我創建了自定義頁面模板。如何從搜索結果中排除wordpress頁面模板(自定義模板)?
<?php
/*
* Template Name: foo
*/
?>
此文件的名稱是「foo.php」。
我試圖
global $query_string;
query_posts($query_string . "&post_type=post");
但是所有的頁面將被除外....
如何排除只從WordPress的搜索結果中的頁面模板?
我創建了自定義頁面模板。如何從搜索結果中排除wordpress頁面模板(自定義模板)?
<?php
/*
* Template Name: foo
*/
?>
此文件的名稱是「foo.php」。
我試圖
global $query_string;
query_posts($query_string . "&post_type=post");
但是所有的頁面將被除外....
如何排除只從WordPress的搜索結果中的頁面模板?
試試這個:
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);
感謝尼古拉!由於某種原因,昨晚我只是沒有得到這個工作,但今天又過了一兩個小時,我做到了。這可能僅僅是因爲我使用了錯誤的過濾器或錯過了代碼的最後一行。
在我的情況下,我想基於多個模板排除內容,所以添加了更多的鍵/值/比較數組元素。我也只想在搜索過程中這樣做,所以爲此添加了條件子句。這是我加入到我的主題的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');
對於任何人在此線程絆倒和WP新版本不會成功:在$詢問參數必須設置而不是重做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');
這排除了我的頁面模板,但也排除所有帖子,所以只有頁面在搜索中可見。 –
我使用了Florian的解決方案以及Edygar用於WP'$ query'的新版本,並且它能夠正常工作 –
查詢提到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。
我使用了這個解決方案以及Edygar對WP新版本'$ query'的編輯,工作。 –
謝謝尼古拉:D 我試試你的代碼!但是...不工作這個X( 但結果是一樣的...嗯.. – shiro