оператор if для каждой функции - PullRequest
0 голосов
/ 07 января 2020
$args = array( 'numberposts' => '3' ); 
$recent_posts = wp_get_recent_posts( $args );

foreach( $recent_posts as $recent ){

    echo '<a style="color:white;text-decoration:none;" href="'. get_permalink($recent["ID"]) .'">
    <article class="post post_home" style="background-image: url('. 
    function(){ 
        if( has_post_thumbnail() ) {
            echo get_the_post_thumbnail_url( $recent["ID"], 'cover' );
        } elseif ( has_category( 'positive-morning' ) ) {
            echo get_bloginfo('template_directory') . '/img/BG/2-Morning.jpg'; 
        } elseif ( has_category( 'positive-talks' ) ) {
            echo get_bloginfo('template_directory') . '/img/BG/2-Talks.jpg'; }
        } 
    .'); 
    background-position : center; background-size :cover;">
    <h2>'. $recent["post_title"] .'</h2></article>';
    ....

}

Привет всем,

У меня проблемы с размещением оператора if, потому что когда я добавляю оператор if, который должен объявить, если в сообщении нет миниатюр, он должен получить относительный путь для отображения миниатюры, определенные для категории.

Я пробовал разные способы заставить это работать, но я не могу найти, в чем проблема. Единственная ошибка, которую я получаю:

Объект класса Closure не может быть преобразован в строку

Спасибо за любую помощь

Ответы [ 2 ]

1 голос
/ 07 января 2020

function(){ - это определение функции, вы не можете объединить это. Кроме того, has_post_thumbnail на самом деле является функцией WP, которую вы хотите использовать, и в качестве первого параметра она принимает идентификатор записи. Поэтому вы должны переписать свой код следующим образом.

$args = array( 'numberposts' => '3' ); 
$recent_posts = wp_get_recent_posts( $args );
foreach( $recent_posts as $recent ){
    $output = '<a style="color:white;text-decoration:none;" href="'. get_permalink($recent["ID"]) . '">
    <article class="post post_home" style="background-image: url(';  
    if( has_post_thumbnail($recent["ID"]) ) {
        $output .= get_the_post_thumbnail_url( $recent["ID"], 'cover' );
    } elseif ( has_category( 'positive-morning' ) ) {
        $output .= get_bloginfo('template_directory') . '/img/BG/2-Morning.jpg'; 
    } elseif ( has_category( 'positive-talks' ) ) {
        $output .= get_bloginfo('template_directory') . '/img/BG/2-Talks.jpg';
    } 
    $output .= ' background-position : center; background-size :cover;">
    <h2>'. $recent["post_title"] .'</h2></article>';
    echo $output;
}
0 голосов
/ 07 января 2020

Здесь не хватает нескольких вещей. Вы не настраиваете постданные внутри вашего l oop, и вам тоже не нужна функция внутри них, также лично мне не нравится объединять строки внутри тегов PHP, чтобы сделать HTML, поэтому я использовал ob_start() и ob_get_clean() для построения HTML. попробуйте что-то вроде этого ...

<?php
$args = array( 'numberposts' => '3' );
$recent_posts = wp_get_recent_posts( $args );
ob_start();
foreach( $recent_posts as $recent ){ 
    setup_postdata($recent); ?>
    <a style="color:white;text-decoration:none;" href="<?php get_permalink($recent["ID"])?>">
    <article class="post post_home" style="background-image: url(<?php 
        if( has_post_thumbnail() ) {
            echo get_the_post_thumbnail_url( $recent["ID"], 'cover' );
        } elseif ( has_category( 'positive-morning' ) ) {
            echo get_bloginfo('template_directory') . '/img/BG/2-Morning.jpg';
        } elseif ( has_category( 'positive-talks' ) ) {
            echo get_bloginfo('template_directory') . '/img/BG/2-Talks.jpg'; 
        }; ?>

    ); background-position : center; background-size :cover;">
    <h2><?php echo $recent["post_title"] ?></h2></article>
    <?php
    wp_reset_postdata();
}

echo ob_get_clean(); ?>

Справедливое предупреждение Я не тестировал ни один из этого кода

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...