PHP: Kann ich eine if-Anweisung in eine Variable einfügen?

Lesezeit: 4 Minuten

Benutzer-Avatar
KeriLynn

Ich bin immer noch ein ziemlicher Anfänger in PHP, also sorry, wenn das eine dumme Frage ist =)

Was ich versuche, ist in einem WordPress-Blog ein benutzerdefiniertes Feld mit mehreren Werten (“Zutaten”) in meinen RSS-Feed einzufügen. (Ich habe auch andere Posts, die keine Rezepte sind, weshalb die Überschriften “Zutaten” und “Anleitung” in der if-Anweisung stehen.) Hier ist mein gesamter Code bisher:

    <?php
    function insertIngredients($content) {
     /* get ingredients into variable $recipeStuff */
     $recipeStuff = 
   if ($ingredients = get_post_custom_values('ingredients')) {
    echo '<h3>Ingredients</h3><ul id="ingredients">';
    foreach ( $ingredients as $key => $value ) {
   echo '<li>';
   echo $value;
   echo '</li>';
    } 
    echo '</ul><h3>Instructions</h3>';
   }
     /* add before content */
        $content = $recipeStuff . $content;
        return $content;
    }
    /* Do it! */
    add_filter('the_excerpt_rss', 'insertIngredients');
    add_filter('the_content_rss', 'insertIngredients');
    ?>

Aber ich bekomme einen “unerwarteten IF”-Fehler, also kann ich das alles nicht in die $recipeStuff-Variable einfügen =) Mir fällt einfach nicht ein, wie ich es sonst dort einfügen könnte.

(Wenn es darauf ankommt, die IF-Anweisung ist genau das, was ich in den Beiträgen auf der Seite selbst verwende, und es funktioniert perfekt!)

Vielen Dank im Voraus für jede Hilfe! =D

AKTUALISIEREN!

Folgendes habe ich jetzt in meinem Code:

function insertIngredients($content) {
/* test for presence of ingredients & set variables */
if ($ingredients = get_post_custom_values('ingredients')) {
    $heading1 = '<h3>Ingredients</h3><ul id="ingredients">';
    foreach ( $ingredients as $key => $value ) {
        $ings="<li>" . $value . '</li>';
    }
    $heading2 = '</ul><h3>Instructions</h3>';
}
/* if no ingredients, variables are empty */
else { $heading1=''; $ings=""; $heading2=''; }

$recipeStuff = $heading1 . $ings . $heading2 ;

/* add before content */
    $content = $recipeStuff . $content;
    return $content;
}
/* Do it! */
add_filter('the_excerpt_rss', 'insertIngredients');
add_filter('the_content_rss', 'insertIngredients');

Ich bekomme keine Fehlermeldung mehr, aber die Zutaten werden nicht im RSS-Feed angezeigt. Ich bin mir nicht sicher, ob es daran liegt, dass immer noch etwas mit dem Code nicht stimmt, oder ob es eine Weile dauert, bis eine Wirkung eintritt (obwohl ich nicht weiß, warum das der Fall sein sollte)? Ich benutze FeedBurner, falls das einen Unterschied macht.

Vielen Dank für Ihre Antworten, alle. Ich werde ein paar verschiedene Dinge ausprobieren und in Kürze wieder aktualisieren. Vielen Dank! =)

  • Versuchen Sie für Ihren UPDATE-Code: if ($ingredients == get_post_custom_values(‘ingredients’)) {

    – Phil Pafford

    30. September 2010 um 16:20 Uhr

Warum nicht umdrehen?

if (condition) {
$recipeStuff="";
}
else
{
$recipeStuff="";
}

  • ALTER! Warum ist mir das nicht eingefallen?! Danke =))))

    – KeriLynn

    29. September 2010 um 13:26 Uhr

  • Aus Neugier, unterstützt PHP $variable = (condition)? wahr falsch ; ?

    – joslinm

    29. September 2010 um 13:29 Uhr

  • Ja, inline if, aber – im obigen Code gibt es einige Schleifen, die nicht wirklich gut gemacht wären.

    – Aurel Bilý

    29. September 2010 um 13:31 Uhr

Obwohl diese Frage ziemlich alt ist, fehlt meiner Meinung nach die beste Antwort, der ternäre Operator:

<?php
    $recipeStuff = (  HERE CHECK FOR INGREDIENTS  ) ? SOMETHING : SOMETHING ELSE ;
?>

$recipeStuff bekommt den Wert SOMETHING wenn die Prüfung wahr ist, sonst wird es bekommen SOMETHING ELSE

Der einfachste Weg, dies zu tun, und es einfach zu halten, ist by

if (!yourcondition) {//if its not true
$recipeStuff="";
}
else{//else if it is true
$recipeStuff="";
}

Benutzer-Avatar
Aurel Bilý

Nein, das geht so nicht wirklich. Es sollte sein (ignoriert den Funktionsheader und was auch immer):

<?php
if (  HERE CHECK FOR INGREDIENTS  ){
    $recipeStuff = SOMETHING ;
} else {
    $recipeStuff = SOMETHING ELSE ;
}
?>

Sie können if (in dieser Form) also nicht wie eine Inline-Funktion verwenden. Es gibt eine Inline-Alternative, aber es ist schwierig, Schleifen darin zu verwenden. Echo gibt IMMER etwas an den Ausgabepuffer aus. Id est, Sie können echo nicht wie “$myVar = echo ‘something’;” verwenden. Führen Sie einfach eine Zuweisung innerhalb der Bedingung durch.

Offensichtlich ist dies nicht die korrekte PHP-Syntax. Was Sie brauchen, ist eine Variable, die die Zeichenfolgen (li usw.) verkettet und zurückgibt.

Sie sollten sich außerhalb der $recipeStuff-Variablen bewegen.

Benutzer-Avatar
Phil Pafford

Ich denke, das sind die Problemlinien

$recipeStuff = 
   if ($ingredients = get_post_custom_values('ingredients')) {

was macht das? oder welchen Wert sollte es haben?

$recipeStuff = 

versuchen Sie es stattdessen

if ($ingredients == get_post_custom_values('ingredients')) {

Wenn Sie das Gleichheitszeichen verwenden, um Werte zu vergleichen, sollte es ein doppeltes == oder dreifaches === sein, indem Sie ein Gleichheitszeichen verwenden, um den Wert festzulegen

$one = 1; // assigns the value 1 to the variable $one

// Compares the values
if($one == 1) {
   echo "True<br />";
} else {
   echo "False<br />";
}

Lies das Seite Vergleichsoperatoren

1175710cookie-checkPHP: Kann ich eine if-Anweisung in eine Variable einfügen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy