PHP multi elseif WP запрос - PullRequest
       1

PHP multi elseif WP запрос

0 голосов
/ 20 октября 2018

Ладно, ребята, я в своем уме.Я знаю, что я близко, но что-то не так.Ниже приведен код для моего условного заявления, но он не работает должным образом.

По сути, на моем WP-сайте у меня есть два набора обзоров: те, которые я делал до WordPress, и те, что после.Когда я перешел на WP, я использовал тип контента (Easy Content Types), который дает полям предисловие ecpt_.Это оставляет другие (до WordPress), которые используют настраиваемые поля WordPress.

, т. Е. Для вышеупомянутого, "новое" поле будет ecpt_trail , тогда как старое будет Trail

Это обзоры на DVD, поэтому, по сути (на простом английском языке) следует сказать: «Если это обзор WordPress (новый) с трейлером, то распечатать« Новый с Theatrical Trailer »иесли он новый без него, выведите «New w / o Theatrical Trailer». В противном случае он будет считать, что это старый обзор с той же логикой.

Проще говоря, это отлично работает на новых обзорах, но наболее старые обзоры не показывают трейлер (и я помещаю его в обзор через виджет, который, как я знаю, имеет). Что не так с кодом?

<?php
global $wp_query;
$postid = $wp_query->post->ID;
if( get_post_meta($postid, 'ecpt_trail', true)) { ?>
<li><i class="fa fa-plus-circle fa-lg"></i>  New w/ Theatrical Trailer</li>
<?php } 
 elseif(empty($ecpt_trail)) { 
?>
<li class="minus"><i class="fa fa-minus-circle fa-lg"></i>  New w/o  Theatrical Trailer</li>
<?php } 
 elseif( get_post_meta($postid, 'Trail', true)) { 
?>
<li><i class="fa fa-plus-circle fa-lg"></i>   Old w/ Theatrical Trailer</li>
<?php } 
else(empty($Trail)) 
?>
<li class="minus"><i class="fa fa-minus-circle fa-lg"></i>  Old w/o Theatrical Trailer</li>
<?php  ?>

1 Ответ

0 голосов
/ 20 октября 2018

Я заметил пару вещей.

Первое - стилистическое решение, но я не думаю, что при таком простом HTML это требует закрытия и повторного открытия PHP, и вместо этого вы могли бы / должны простоecho код.

Второй - еще одно стилистическое решение, но обычно переменная ID чаще определяется как $post_id.Абсолютно несущественно, но я изменил его в моем примере.

Третий - вам действительно нужен доступ к global $wp_query вместо простого определения идентификатора записи с помощью функции get_the_ID()или даже получить доступ к global $post напрямую?Я оставил это там на случай, если вы используете его по определенной причине, но я бы подумал, нужно ли вам это вызывать, и просто заменить первые две строки на $post_id = get_the_ID();

Четвертый -Ваше окончательное утверждение является заявлением else, но вы передаете ему условия.Если вы передаете условия, это должен быть оператор else if, операторы else просто должны содержать значение по умолчанию, при условии, что все остальные операторы if else вернули false до этого момента.Это должно быть } else { или } else if( empty( $Trail ) ){

Пятое - у вас есть странные пустые открывающие / закрывающие теги PHP в конце вашего кода.Вам это не нужно.

Шестое - Теперь, когда я засыпал вас чем-то (извините!), Я начну решать вашу проблему.Отчасти это то, что вы на самом деле не определяете переменные $ecpt_trail и $Trail.Если вы хотите, чтобы они были определены, вы можете определить их в ваших if выражениях следующим образом:

if( $ecpt_trail = get_post_meta( $post_id, 'ecpt_trail', true ) ){
    // <li>…</li>
} else if( empty( $ecpt_trail ) ){ 
    // <li>…</li>
}

Вот как будет выглядеть этот код:

<?php
    global $wp_query;
    $post_id = $wp_query->post->ID;

    if( $ecpt_trail = get_post_meta( $post_id, 'ecpt_trail', true ) ){
        echo '<li><i class="fa fa-plus-circle fa-lg"></i>  New w/ Theatrical Trailer</li>';
    } else if( empty( $ecpt_trail ) ){ 
        echo '<li class="minus"><i class="fa fa-minus-circle fa-lg"></i>  New w/o  Theatrical Trailer</li>';
    } else if( $Trail = get_post_meta( $post_id, 'Trail', true ) ){ 
        echo '<li><i class="fa fa-plus-circle fa-lg"></i>   Old w/ Theatrical Trailer</li>';
    } else if( empty( $Trail ) ){
        echo '<li class="minus"><i class="fa fa-minus-circle fa-lg"></i>  Old w/o Theatrical Trailer</li>';
    }
?>

С учетом сказанноговы также, вероятно, фактически не проходите мимо второго оператора if, который объясняет, почему вы не видите старые трейлеры, учитывая, что вы в основном обрабатываете два возможных результата первого оператора if.Если первый оператор if возвращает true, он останавливается там и выдает New w/ Trailer, а если нет;поскольку вы на самом деле не определяете $ecpt_trailer;тот второй возвращает true, и он останавливается, выводя New w/o Trailer.Это единственные два результата этого одного условия.

Теперь я также думаю, что у вас есть много избыточных мест, которые можно устранить, - и вы могли бы также упростить это для себя, пройдя через всестарые сообщения со старым мета-ключом и использованием add_post_meta() для клонирования значения.Тогда вам нужно будет беспокоиться только об одном мета-ключе, и вы можете отказаться от старого.

Кроме того, get_post_meta() вернет false при сбое, вы можете использовать его для своегопреимущество, а не беспокойство, если оно empty или нет, так как оно также вернет истинное значение в случае успеха.

Вот как я мог бы это сделать - поскольку оба условия отказа не сообщают вам, если *На самом деле 1056 * - это Новое без или Старое без:

<?php
    $post_id = get_the_ID();

    if( $trailer = get_post_meta( $post_id, 'ecpt_trail', true ) ){
        // New Trailer Exists, $trailer now defined as `ecpt_trail` value
        echo '<li><i class="fa fa-plus-circle fa-lg"></i>  New w/ Theatrical Trailer</li>';
    } else if( $trailer = get_post_meta( $post_id, 'Trail', true ) ){
        // New Trailer not there, $trailer now defined as `Trail` value
        echo '<li><i class="fa fa-plus-circle fa-lg"></i>  Old w/ Theatrical Trailer</li>';
    } else {
        // Neither Trailer exists, $trailer now defined as `false`
        echo '<li class="minus"><i class="fa fa-minus-circle fa-lg"></i>  Either w/o Theatrical Trailer</li>';
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...