2011-09-18 104 views

回答

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); 
+0

謝謝尼古拉:D 我試試你的代碼!但是...不工作這個X( 但結果是一樣的...嗯.. – shiro

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'); 
3

對於任何人在此線程絆倒和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'); 
+0

這排除了我的頁面模板,但也排除所有帖子,所以只有頁面在搜索中可見。 –

+0

我使用了Florian的解決方案以及Edygar用於WP'$ query'的新版本,並且它能夠正常工作 –

3

查詢提到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

我使用了這個解決方案以及Edygar對WP新版本'$ query'的編輯,工作。 –