我只想在WP搜索结果中显示带有特定模板的页面, 因为我尝试构建没有任何插件的产品目录。纯WP代码。有些页面是我的产品, 并且它们具有product.php模板文件。这是我的search.php:
<?php
if ( have_posts() ) :
while ( have_posts() ) :
the_post();
get_template_part( 'template-parts/post/content', 'excerpt' );
endwhile;
the_posts_pagination();
else :
?>
<p><?php _e( 'No results.' ); ?></p>
<?php
get_search_form();
endif;
?>
问题是, 如何仅显示我的产品页面而不显示其他页面?
#1
试试看!此功能将中断搜索查询, 并为查询添加一些条件以返回特定页面。
//Filter the search for only posts and parts
function SearchFilter($query)
{
// Now filter the posts
if ($query->is_main_query() & $query->is_search && $search_template) {
$query->set('post_type', 'page');
$query->set('meta_key' => '_wp_page_template', );
$query->set('meta_value' => 'product.php');
}
// Returning the query after it has been modified
return $query;
}
add_action('pre_get_posts', 'SearchFilter');
解释代码:
” post_type”将限制此过滤器仅用于页面帖子类型。
条件将限制此过滤器仅在搜索查询上起作用, 而不是在每次调用post查询时都起作用。
$query->is_search && $search_template
这些参数将通过包含页面模板的meta_key” _wp_page_template”过滤返回的帖子, 因此我们仅返回带有页面模板” product.php”的页面。
$query->set('meta_key' => '_wp_page_template', );
$query->set('meta_value' => 'product.php');
评论前必须登录!
注册