如何获得按匹配分类中的N个排序的查询?

时间:2014-11-08 作者:untore

如何获得按与指定列表匹配的标记数排序的wp查询?我想检索一个与当前帖子类别相匹配的帖子列表(这是一个普通过滤器),但这些帖子的顺序是从匹配标签的最大数量到最小数量。它是否太过资源密集?

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

没有本机函数可以完成您所需的功能。我能想到的唯一可能的解决办法是利用usort 对自定义查询返回的帖子数组进行排序

您需要执行以下操作:

为您的列表设置所需的标签

获取帖子所属标签的列表

返回一个数组,其中包含与这两个数组匹配的所有标记

对标签进行计数,并将标签计数存储在一个数组中

对数组进行排序,再次循环浏览帖子,并正常显示

此处使用的功能如下

  • get_the_tags

  • usort

  • array_intersect

  • wp_list_pluck

    $args = array(
        \'posts_per_page\' => \'-1\',
        \'cat\' => \'YOUR_CATID\',
    );
    $q = new WP_Query( $args );
    
    if( $q->have_posts() ) {
    $count = [];
    $count1 = [];
    
        while( $q->have_posts() ) {
            $q->the_post();
    
            $posttags = get_the_tags();
            if( $posttags ) {
                $tag_slugs = wp_list_pluck( $posttags, \'slug\' );
                $relevant_tags = array(\'tag1\', \'tag2\', \'etc which translates to end of thought capacity\' );
                $matched_tags = array_intersect( $tag_slugs, $relevant_tags );
                $count[$post->ID] = count( $matched_tags );
            }else{
                $count[$post->ID] = 0;
            }
        }
    
        usort( $q->posts, function ($a, $b) use($count) {
    
            return ($count[$a->ID] < $count[$b->ID]) ? 1 : -1;
    
        });
    
        rewind_posts();
    
        while( $q->have_posts() ) {
            $q->the_post();
    
            //Display your loop elements
    
        }
    }
    

结束

相关推荐

管理菜单中的jQuery POST方法

我正在尝试使用这个:jQuery(document).ready(function(){ jQuery(\"#button\").click(function(){ jQuery.post(\"post_file.php\") }); }); 我的地址。com/wp管理员/管理员。php?页面=pluginname/pluginfile。php\\u pluginfunction但它打开的是:myaddress。com/wp管理员/