PHP: Могу ли я поместить оператор if внутри переменной? - PullRequest
2 голосов
/ 29 сентября 2010

Я все еще новичок в PHP, поэтому извините, если это глупый вопрос =)

В блоге WordPress я пытаюсь вставить настраиваемое поле с несколькими значениями («ингредиенты») в свой канал RSS. (У меня также есть другие посты, которые не являются рецептами, поэтому заголовки «Ингредиенты» и «Инструкции» находятся внутри оператора if.) Вот весь мой код:

    <?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');
    ?>

Но я получаю "неожиданную ошибку IF", так что, думаю, я не могу поместить все это в переменную $ recipeStuff =) Я просто не могу придумать, как еще ее туда поместить.

(Если это важно, оператор IF - это именно то, что я использую в сообщениях на самой странице, и он отлично работает!)

Большое спасибо заранее за любую помощь! = D

UPDATE!

Вот что у меня сейчас в коде:

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');

Я больше не получаю сообщение об ошибке, но ингредиенты не отображаются в ленте RSS. Я не уверен, если это потому, что что-то все еще не так с кодом, или требуется некоторое время, чтобы иметь эффект (хотя я не знаю, почему это так)? Я использую FeedBurner, если это имеет значение.

Большое спасибо за ваши ответы всем. Я собираюсь попробовать несколько разных вещей и обновить немного позже. Спасибо! =)

Ответы [ 6 ]

8 голосов
/ 29 сентября 2010

Почему бы не перевернуть его?

if (condition) {
$recipeStuff = '';
}
else
{
$recipeStuff = '';
}
7 голосов
/ 19 сентября 2012

Несмотря на то, что этот вопрос довольно старый, ИМО лучший ответ отсутствует, троичный оператор:

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

$recipeStuff получит значение SOMETHING, если проверка верна, в противном случае он получит SOMETHING ELSE

2 голосов
/ 29 сентября 2010

Самый простой способ сделать это и сделать его простым - это

if (!yourcondition) {//if its not true
$recipeStuff = '';
}
else{//else if it is true
$recipeStuff = '';
}
2 голосов
/ 29 сентября 2010

Нет, это не совсем так. Должно быть (игнорируя заголовок функции и т. Д.):

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

Итак, вы не можете использовать if (в этой форме) как встроенную функцию. Есть встроенная альтернатива, но внутри нее сложно использовать циклы. Эхо ВСЕГДА выводит что-то в буфер вывода. То есть вы не можете использовать echo, например "$ myVar = echo 'что-то';". Просто сделайте задание внутри условия.

1 голос
/ 29 сентября 2010

Я думаю, что это проблемные строки

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

что это делает?или какое значение оно должно иметь?

$recipeStuff = 

попробуйте это вместо

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

При использовании знака равенства для сравнения значений это должен быть двойной == или тройной === с использованием одногоЗнак равенства - это то, как вы устанавливаете значение

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

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

Прочитайте страницу Операторы сравнения

1 голос
/ 29 сентября 2010

Очевидно, что это неправильный синтаксис PHP. Вам нужна переменная, которая объединяет строки (li и т. Д.) И возвращает ее.

Вы должны переместиться, если находитесь за пределами переменной $ recipeStuff.

...