2016-02-27 143 views
0

我已經從其他帖子示例構建了以下代碼片段,這些代碼片段說,以任何其他方式進行查詢修改都會受到懲罰,但它不起作用。我得到的結果,其中包括未公開的文章和網頁這顯然是不應該發生:使用pre_get_post自定義Wordpress查詢

function post_conditions($where) 
{ 
    $where .= "AND post_content NOT LIKE '%::exclude tag::%'"; 
    return $where; 
} 
add_filter('posts_where','post_conditions'); 

    function mysearch($query) 
    { 
     $query->set('post_type','post'); 
     $query->set('post_status','publish'); 
     $query->set('posts_per_page',20); 
     $query->set('paged',get_query_var('paged')); 
    } 

    add_action('pre_get_posts','mysearch'); 

    while(have_posts()){ 
     the_post(); 

     echo get_the_excerpt(); 
     the_tags(); 

    } 
    if (get_query_var('paged')) 
     my_paged_function(); 

    wp_reset_query(); 

的GET變量看起來像這樣:S = mysearchterm &提交= + GO%21 +

在我的博客模板上,我使用verbotten query_posts()函數來實現相同的效果,並且完美地工作。

我不知道發生了什麼問題。有任何想法嗎?

+0

此代碼在哪裏?它在你的函數文件中嗎? (它應該是)?或者在某個模板中? (不應該,這太遲了) –

+0

它在模板中。所以它必須在函數的文件中?那麼我怎麼才能讓它只用這種方式搜索一個模板與另一個呢? –

+0

是的,模板加載的方式太晚而無法使此代碼生效。您區分的方式(希望)基於*正在查詢的內容*,因此我們可以檢查其他值,而不是正在加載的* template *:http://wordpress.stackexchange.com/a/102885/11704 –

回答

1

由於此代碼位於您的模板中,因此無法及時觸發pre_get_posts鉤子。當模板被選擇/運行時,wp_query完成設置,並且pre_get_posts結束。

您需要將此功能移動到您的functions.php文件中,並嘗試使用一些其他方法來確定是否要更改查詢。有很多信息可供您使用 - 包括檔案,單個頁面,單個帖子,帖子ID等 - 希望通過這些信息,您可以確定是否要修改查詢。