我创建了自定义页面模板。
<?php
/*
* Template Name: foo
*/
?>
此文件名为“foo.php”。
我试过
global $query_string;
query_posts($query_string . "&post_type=post");
但所有页面都将被排除....
如何从wordpress搜索结果中仅排除此页面模板?
答案 0 :(得分:4)
提到by Nicolay的查询非常方便,但它也会删除搜索结果中的所有帖子,因为帖子不包含'_wp_page_template'
键。要拥有所有页面(没有过滤的模板)以及您需要执行以下操作的所有帖子:
// exclude any content from search results that use specific page templates
function exclude_page_templates_from_search($query) {
global $wp_the_query;
if ( ($wp_the_query === $query) && (is_search()) && ( ! is_admin()) ) {
$meta_query =
array(
// set OR, default is AND
'relation' => 'OR',
// remove pages with foo.php template from results
array(
'key' => '_wp_page_template',
'value' => 'foo.php',
'compare' => '!='
),
// show all entries that do not have a key '_wp_page_template'
array(
'key' => '_wp_page_template',
'value' => 'page-thanks.php',
'compare' => 'NOT EXISTS'
)
);
$query->set('meta_query', $meta_query);
}
}
add_filter('pre_get_posts','exclude_page_templates_from_search');
有关此问题的详细信息,请in the WordPress Codex。
答案 1 :(得分:3)
对于那些偶然发现这个帖子并且在WP更新版本上没有成功的人:必须设置$ query args而不是重做query_posts ...如下所示:
// exclude any content from search results that use specific page templates
function exclude_page_templates_from_search($query) {
global $wp_the_query;
if ( ($wp_the_query === $query) && (is_search()) && ( ! is_admin()) ) {
$query->set(
'meta_query',
array(
array(
'key' => '_wp_page_template',
'value' => 'page-template-1.php',
'compare' => '!='
)
)
);
}
}
add_filter('pre_get_posts','exclude_page_templates_from_search');
答案 2 :(得分:2)
试试这个:
global $wp_query;
$args = array_merge($wp_query->query, array(
'meta_query' => array(
array(
'key' => '_wp_page_template',
'value' => 'foo.php',
'compare' => '!='
)
),
));
query_posts( $args );
答案 3 :(得分:1)
谢谢尼古拉!出于某种原因昨晚我只是没有让这个工作,但今天又过了一两个小时,我做到了。可能只是因为我使用了错误的过滤器或者错过了代码的最后一行。
在我的情况下,我想基于多个模板排除内容,因此,添加了更多键/值/比较数组元素。我也只是想在搜索过程中这样做,所以,为此添加了条件子句。这是我添加到主题的functions.php文件中的完整函数:
// exclude any content from search results that use specific page templates
function exclude_page_templates_from_search($query) {
global $wp_the_query;
if ( ($wp_the_query === $query) && (is_search()) && ( ! is_admin()) ) {
$args = array_merge($wp_the_query->query, array(
'meta_query' => array(
array(
'key' => '_wp_page_template',
'value' => 'page-template-1.php',
'compare' => '!='
),
array(
'key' => '_wp_page_template',
'value' => 'page-template-2.php',
'compare' => '!='
),
array(
'key' => '_wp_page_template',
'value' => 'page-template-3.php',
'compare' => '!='
)
),
));
query_posts( $args );
}
}
add_filter('pre_get_posts','exclude_page_templates_from_search');
答案 4 :(得分:0)
我不得不排除多个页面模板,因此我不得不对上面的代码进行一些修改,但是最后,这对我有用:
function exclude_page_templates_from_search($query) {
global $wp_the_query;
if ( ($wp_the_query === $query) && (is_search()) && ( ! is_admin()) ) {
$meta_query =
array(
// set OR, default is AND
'relation' => 'OR',
// remove pages with foo.php template from results
array(
'key' => '_wp_page_template',
'value' => array('page-landings-new.php', 'page-landings-EU.php', 'page-thankyou.php'),
'compare' => 'NOT IN'
),
// show all entries that do not have a key '_wp_page_template'
array(
'key' => '_wp_page_template',
'value' => 'page-thanks.php',
'compare' => 'NOT EXISTS'
)
);
$query->set('meta_query', $meta_query);
}
}
add_filter('pre_get_posts','exclude_page_templates_from_search');
也许对外面的人有用。