2016-03-28 130 views
0

我真的需要帮助。以下是我的wp页面模板的代码,用于搜索结果search.php,一切正常。现在,该网站是关于公共事件的,所以搜索结果按事件日期显示是非常重要的。我创建了一个名为“date”的自定义字段,我希望通过“date”字段值显示结果。按meta_key排序搜索结果

我花了整整一周的时间找到解决方案,但不幸的是我不能。请帮我:)

下面是一个代码:

<?php 
    global $query_string; 
    $query_args = explode("&", $query_string); 
    $search_query = array(); 
    if(strlen($query_string) > 0) { 
     foreach($query_args as $key => $string) { 
      $query_split = explode("=", $string); 
      $search_query[$query_split[0]] = urldecode($query_split[1]); 
     } 
    } 
    $search = new WP_Query($search_query); 
?> 

<?php if ($search->have_posts()) : while ($search->have_posts()) : $search->the_post(); ?> 

    <!-- loop goes here --> 

<?php endwhile; else: ?> 

<?php endif; ?> 

谢谢!!!!

+2

请发布'$ search_query'数组。 – Noman

+0

是一个自定义帖子类型?或者你想搜索整个网站? – Mark

+0

@Mark我想搜索整个网站。 – Devades

回答

0

我想尝试别的东西:

在你functions.phpmy-plugin.php

add_filter('pre_get_posts', 'customize_search_page'); 

function customize_search_page($query){ 

    if(!is_admin() && $query->is_search && $query->is_main_query()){ 
     $query->query_vars['meta_key'] = 'your_meta_key'; 
     $query->query_vars['orderby'] = 'meta_value'; 
     $query->query_vars['order'] = 'DESC'; 
    } 
    return $query; 
} 

我没有测试它,但pre_get_posts过滤器将在循环之前被调用。如果这是正确的查询(搜索和主)我改变了orderby到一个元值的顺序。

+0

非常感谢您的回答,但不幸的是它不起作用。 – Devades

+0

为什么不呢?这应该在http://yoursite.com/s=test上使用标准的'if(have_posts()){while(have_posts()){the_post();/*循环在这里* /}}'模板。 –

+0

对不起,它的工作原理。我之前没有注意到你的代码中有一个额外的'>'。所以,行:'$ query-> query_vars ['meta_key'] =>'your_meta_key';' 应该是:'$ query-> query_vars ['meta_key'] ='your_meta_key';' 谢谢非常!!!! – Devades