我创建了自定义页面模板。
<
?php
/*
* Template Name: foo
*/
?>
该文件名为” foo.php” 。
我试过了
global $query_string;
query_posts($query_string . "&
post_type=post");
但是所有页面都将被排除在外。
如何仅从Wordpress搜索结果中排除此页面模板?
#1尝试这个:
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 );
#2Nicolay提到的查询非常方便, 但是它也从搜索结果中删除了所有帖子, 因为这些帖子不包含’ _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');
可以在WordPress Codex中找到有关此内容的大量信息。
#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');
#4谢谢尼古拉!出于某种原因, 昨晚我只是没有使它工作, 但是今天, 又过了一两个小时, 我做到了。可能仅仅是因为我使用了错误的过滤器, 或者缺少了代码的最后一行。
就我而言, 我想排除基于多个模板的内容, 因此, 添加了更多键/值/比较数组元素。我也只想在搜索过程中执行此操作, 因此为此添加了一个条件子句。这是我添加到主题的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');
#5我不得不排除多个页面模板, 因此我不得不稍微修改一下上面的代码, 但是最后, 这对我有用:
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');
【如何从搜索结果中排除wordpress页面模板(自定义模板)()】也许对有人有用。
推荐阅读
- 如何从WordPress中的子主题扩展类()
- 如何确保短代码结果不会破坏格式()
- 圆满者U盘维护系统最新推荐
- 分区工具diskgenius最新推荐
- U盘修好工具最新推荐
- 装机高手教你如何bios降级
- 本文教您u盘不能格式化怎样办
- win10 iso刻录到u盘最新推荐
- 本文教您u盘中毒怎样办