Создайте виджет в WordPress для отображения как самых последних, так и самых популярных сообщений. - PullRequest
0 голосов
/ 19 октября 2018

Я создаю функцию для отображения моих последних сообщений в WordPress, и я хотел бы знать, как вернуть некоторые из них:

вот мой код:

function wpb_set_post_views($postID) {
    $count_key = 'wpb_post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    if($count==''){
        $count = 0;
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, '0');
    }else{
        $count++;
        update_post_meta($postID, $count_key, $count);
    }
}

Я скопировал предложение, основанное на представлении о том, как отображать самые последние сообщения без плагина.Пока все хорошо, за исключением того, что мне нужно что-то вернуть, чтобы создать небольшой виджет для переключения между самым последним и самым популярным.Самый популярный виджет был немного проще, например:

function get_recent_posts($count){
    $args = [
        'numberposts' => $count,
        'offset' => 0,
        'category' => 0,
        'orderby' => 'post_date',
        'order' => 'DESC',
        'include' => '',
        'exclude' => '',
        'meta_key' => '',
        'meta_value' =>'',
        'post_type' => 'post',
        'post_status' => 'publish',
        'suppress_filters' => true
    ];

    return wp_get_recent_posts( $args );
}

И вот часть, где я могу переключаться между ними:

function get_blog_posts($count , $type='recent'){

    if($type=='recent'){

        $posts = get_recent_posts($count);
    } else {
        $posts = wpb_set_post_views(get_the_ID());
    }
    var_dump($posts);
    die();
    return $posts;
}

Как я уже сказал, я пытаюсь построить его так, в данный момент я сбрасываю свой массив, чтобы посмотреть, работают ли они, как я аспект.Если я переключусь на популярный, я получу значение NULL, но если я попытаюсь вернуть свою функцию с помощью

return function wpb_set_post_views($postID);

, я забыл упомянуть, что я буду вызывать свою функцию в своем шаблоне следующим образом:

<?php if($blog_posts = get_blog_posts( wp_kses_post($instance['posts_type']) )): 

        foreach ($blog_posts as $blog_post) : 

            ?>
            <a class="blog-archive-sidebar-feed" href="<?=get_permalink($blog_post['ID'])?>">
                <span class="blog-archive-title"><?=$blog_post['post_title']?></span>
                <p class="blog-archive-date"><?=date('F d, Y' , strtotime($blog_post['post_date']))?></p>
            </a>


        <?php endforeach; endif; ?>

В любом случае, ничего не произойдет.

Есть предложения?

1 Ответ

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

Хорошо,

Во-первых, функция wpb_set_post_views() ничего не возвращает, поскольку в ней нет оператора return, поэтому совершенно нормально, что return wpb_set_post_views($postID); ничего не возвращает.

Во-вторых, wpb_set_post_views () предназначена для обновления метапеременной записи, в которой хранится nb просмотра указанного сообщения, а не для возврата списка наиболее просматриваемых сообщений.

Вам нужно будет создать такую ​​функцию (скажем, get_most_viewed_posts($count); для примера), а затем вызвать ее внутри вашей get_blog_posts() функции внутри wpb_set_post_views().

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