ORDER&ORDERBY子句不使用自定义查询

时间:2017-07-24 作者:Michael

我对通过AJAX加载的搜索结果的顺序有问题,它与搜索结果页面上相同查询的顺序不匹配。AJAX响应WP\\U查询实例使用以下参数:

$query_args = [
    \'cat\'            => \'-7\',
    \'orderby\'        => \'relevance\',
    \'order\'          => \'DESC\',
    \'post_type\'      => [\'features\', \'how-to-guides\', \'post\', \'page\', \'testimonials\'],
    \'posts_per_page\' => 8,
    \'post_status\'    => \'publish\',
    \'s\'              => (isset($_GET[\'search_term\']) === true) ? filter_input(INPUT_GET, \'search_term\', FILTER_SANITIZE_SPECIAL_CHARS) : \'\',
    \'meta_query\'     => [
        [
            \'compare\'  => \'NOT EXISTS\',
            \'key\'      => \'thank_you_page\',
            \'value\'    => \'on\',
            \'type\'     => \'CHAR\'
        ]
    ],
    \'tax_query\'      => [
        [
             \'field\'    => \'slug\',
             \'operator\' => \'NOT IN\',
             \'taxonomy\' => \'resources-categories\',
             \'terms\'    => [\'hidden\']
        ]
    ]
];
我尝试从查询中删除除order、orderby之外的所有内容,无论orderby是否设置为“DESC”、“ASC”或orderby是否设置为“相关性”、“标题”等,都不会影响AJAX结果的顺序。

以前有没有其他人遇到过这个问题?如果有,您是否找到了一种方法使订单与搜索结果页面上的相同查询相匹配?

1 个回复
SO网友:Nuno Sarmento

按相关性对帖子进行排序。下面的代码将输出按相关性排序的帖子。我已经添加了一些注释以进行澄清。请告诉我是否有效。

function my_custom_query(){

// get only the posts without order them  
$my_query_posts = new WP_Query( array( \'numberposts\' => 5 ) );

// check relevance posts
foreach( $my_query_posts->posts as $post )    
    $post->relevance = check_relevance( $post );

// sorting the posts 
usort( $my_query_posts->posts, \'compare\' );

return $my_query_posts;

}

function check_relevance( $post ){
// check and calculate the relevance post
return rand( 0, 100 );

}

function my_compare( $a, $b ){

if(  $a->relevance ==  $b->relevance )
    return 0;

return ( $a->relevance > $b->relevance ) ? -1 : 1;

}

$posts = my_custom_query();

// output posts
while( $posts->have_posts() ){

$posts->the_post();

}

结束

相关推荐

如何使用ORDER_BY按两个META_KEY排序,而不排除未初始化这些键的POST?

我在自定义帖子类型上有两个meta\\u键。我希望能够查询所有这些帖子,并按这两个帖子排序meta_key, 一个优先于另一个。一、 我有一个meta_key 调用stickied, 这些应该始终首先出现。第二个meta_key 是popularity, 这是该帖子的基本命中率。当我使用meta_query, 似乎没有初始化的元键的POST不会出现在结果集中。我想要所有的帖子,不管他们是否有meta_key 是否初始化,然后根据这些meta_key.这可能吗?