【问题标题】:Sort search results by meta_key value按 meta_key 值对搜索结果进行排序
【发布时间】:2016-03-28 13:48:57
【问题描述】:

我真的需要这方面的帮助。下面是我用于搜索结果search.php 的 wp 页面模板的代码,一切正常。现在,该网站是关于公共活动的,因此按活动日期显示搜索结果非常重要。我创建了一个名为“日期”的自定义字段,我想按“日期”字段值显示结果。

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

这是一个代码:

<?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; ?>

谢谢!!!!

【问题讨论】:

  • 请发布$search_query的数组。
  • 是自定义帖子类型吗?或者你想搜索整个网站?
  • @Mark 我想搜索整个网站。

标签: php wordpress search


【解决方案1】:

我会尝试别的:

在您的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 更改为按元值排序。

【讨论】:

  • 非常感谢您的回答,但不幸的是它不起作用。
  • 为什么不呢?这应该适用于具有标准 if(have_posts()){ while(have_posts()){ the_post(); /*loop goes here*/ }} 模板的 yoursite.com/s=test
  • 对不起,它有效。我之前没有注意到您的代码中有一个额外的&gt;。所以,行:$query-&gt;query_vars['meta_key'] =&gt; 'your_meta_key'; 应该是:$query-&gt;query_vars['meta_key'] = 'your_meta_key'; 非常感谢!!!!
猜你喜欢
  • 2011-03-05
  • 2013-08-19
  • 1970-01-01
  • 2016-01-09
  • 1970-01-01
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多