相关帖子按标签随机显示

时间:2015-04-07 作者:Jornes

我想问一下,为了让我的相关帖子按标签随机显示,我应该添加什么代码?我从其他地方得到了这个密码。

<?php $orig_post = $post;
global $post;
$tags = wp_get_post_tags($post->ID);
if ($tags) {
$tag_ids = array();
foreach($tags as $individual_tag) $tag_ids[] = $individual_tag->term_id;
$args=array(
\'tag__in\' => $tag_ids,
\'post__not_in\' => array($post->ID),
\'posts_per_page\'=>5, // Number of related posts that will be shown.
\'caller_get_posts\'=>1
);
$my_query = new wp_query( $args );
if( $my_query->have_posts() ) {
echo \'<div id="related"><h4>Related Posts</h4>\';
while( $my_query->have_posts() ) {
$my_query->the_post(); ?>
<div class="ncc">
<h5><a href="<? the_permalink()?>" rel="bookmark" title="<?php the_title(); ?>" rel="nofollow"><?php the_title(); ?></a></h5>
<?php the_excerpt(); ?>

</div><!--ncc-->

<? }
echo \'</div><!--related-->\';
}
}
$post = $orig_post;
wp_reset_query(); ?>
有什么解决方案吗?谢谢

1 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

OP中的一些代码有点旧,并且被贬低了,比如caller_get_posts 多年前就贬值了。现在要使用的正确参数是ignore_sticky_posts. 您的查询效率也很低,对性能没有好处。

下面是我将如何解决这个问题

使用get_queried_object_id() 使用全局$post

使用wp_get_post_terms() 返回分配给帖子的所有标签ID。根据我所做的,我们只需要获取ID,而不需要获取完整的标记对象

使用合适的tax_query 获取所有附加了这些标签的帖子。这是更个人的偏好,因为很容易跨分类法进行更改,而且,从源代码来看,标记参数使用tax_query

使用rand 作为对的值orderby 中的参数WP_Query

简而言之,把这一切都放在代码中:(未测试,需要PHP 5.4+

<?php
$tags = wp_get_post_terms( get_queried_object_id(), \'post_tag\', [\'fields\' => \'ids\'] );
$args = [
    \'post__not_in\'        => array( get_queried_object_id() ),
    \'posts_per_page\'      => 5,
    \'ignore_sticky_posts\' => 1,
    \'orderby\'             => \'rand\',
    \'tax_query\' => [
        [
            \'taxonomy\' => \'post_tag\',
            \'terms\'    => $tags
        ]
    ]
];
$my_query = new wp_query( $args );
if( $my_query->have_posts() ) {
    echo \'<div id="related"><h4>Related Posts</h4>\';
        while( $my_query->have_posts() ) {
            $my_query->the_post(); ?>
            <div class="ncc">

                <h5><a href="<?php the_permalink()?>" rel="bookmark" title="<?php the_title(); ?>" rel="nofollow"><?php the_title(); ?></a></h5>
                <?php the_excerpt(); ?>

            </div><!--ncc-->
        <?php }
        wp_reset_postdata();
    echo \'</div><!--related-->\';
}
?> 

结束

相关推荐

Converting Posts to Pages

所以我的网站后端有问题,我的托管公司已经为我解决了。在这样做的过程中,他们无意中制作了我所有的页面和帖子。我正在查看承载此功能的数据库post_type 柱我的问题是,如果我更改值post 到page, 这篇文章会再次成为一页吗?如果没有,我如何转换它们?