按自定义字段值创建自定义帖子类型搜索的最佳方法

时间:2015-06-30 作者:Oliver

我有一个自定义的帖子类型,叫做people。

我想有3个搜索字段;名字、中间名和姓氏

我在考虑用自己的搜索框创建一个页面,并使用query\\u帖子:

<?php query_posts( array( \'post_status\' => \'publish\' ,
                             \'post_type\' => array( \'people\' ),
                             \'meta_query\' => array(
                                 array  (
                                     \'key\' => \'last-name\',
                                     \'value\' => $last,
                                     \'compare\' => \'LIKE\'
                                 ),
                                 array  (
                                     \'key\' => \'first-name\',
                                     \'value\' => $first,
                                     \'compare\' => \'LIKE\'
                                 ),
                                 array  (
                                     \'key\' => \'middle-name\',
                                     \'value\' => $middle,
                                     \'compare\' => \'LIKE\'
                                 )
                             )

                            )
                     ); ?>
这是正确的搜索方式吗?

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

假设需要AND 名字、中间名和姓氏之间的关系,但是query_posts is never, ever, ever the right way to do anything.

注:This function isn\'t meant to be used by plugins or themes. 如后文所述,有更好、性能更好的选项来更改主查询。query_posts() is overly simplistic and problematic 通过将页面的主查询替换为查询的新实例来修改页面的主查询的方法。It is inefficient (重新运行SQL查询),并且在某些情况下会彻底失败(尤其是在处理POST分页时)。任何现代的WP代码都应该使用更可靠的方法,比如使用pre\\u get\\u posts钩子。

新建WP_Query 对象并使用它。

$args = array(
  // your arguments as above
);
$q = new WP_Query($args);
if ($q->have_posts()) {
  while ($q->have_posts()) {
    $q->the_post();
    the_title(); // etc.
  }
}

结束

相关推荐

Where is search.php?

我在Wordpress 4.0.1上有一个网站,但我找不到搜索。php。数据库批处理过程已将模板应用于默认搜索结果页面,但我现在找不到该页面以将其更改回原来的页面。如何更改此页面的模板?在我的主题中创建一个新的“search.php”会有帮助吗?如果是,此文件应包含哪些内容?