我正在尝试在Wordpress网站上搜索结果。它提供了帖子信息。但我想按页面搜索搜索结果。
<?php if (have_posts()) : ?>
<?php while(have_posts()) : the_post(); ?>
<?php get_template_part( 'post' , 'search') ?>
<?php endwhile; else : ?>
这是search.php
中给出的默认代码我在上面的代码之前添加了一个代码用于此操作。
<?php
$args = array(
'post_type'=> 'page',
'order' => 'ASC'
);
query_posts( $args );
?>
但它提供了随机结果,并没有进入下一页。
答案 0 :(得分:2)
使用pre_get_posts
过滤器更改您的搜索查询。将以下内容添加到functions.php
function search_filter($query) {
if ( !is_admin() && $query->is_main_query() ) {
if ($query->is_search) {
$query->set('post_type', 'page');
}
}
}
add_action('pre_get_posts','search_filter');
仅提供额外信息,永远不会使用query_posts
构建自定义查询。在大多数情况下,分页失败就像你的情况一样,它也是资源密集型,因此很慢,它改变了主要的主要查询
注意:此功能并非由插件或主题使用。如后面所述,有更好的,更高性能的选项来改变主查询。 query_posts()是一种过于简单化和有问题的方法来修改页面的主要查询,方法是用新的查询实例替换它。它是低效的(重新运行SQL查询)并且在某些情况下会彻底失败(特别是在处理帖子分页时)。
如果您无法使用pre_get_posts
更改主要查询,并且必须使用自定义查询,请改用WP_Query
或get_posts
。
如需其他阅读,请查看my answer
上的this post