首页 > 解决方案 > 在 wordpress 中创建一个小部件以显示最新和最受欢迎的帖子

问题描述

我正在构建一个函数来显示我在 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; ?>

无论如何,什么都不会发生。

有什么建议吗?

标签: phpwordpresstemplatesposts

解决方案


好的,

首先,该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().


推荐阅读