2013-10-03 54 views
0

我知道你可以使用WP_Query如果用戶登錄返回的狀態爲private的所有帖子,但看不到如何爲未登錄的用戶做到這一點?如何向未登錄的用戶顯示密碼保護頁面?

EG:對於誰是登錄的用戶...

$query = new WP_Query('post_status=private'); 

但是,如何爲誰是登錄用戶呢?

回答

1

您可以使用過濾器posts_clauses,如:

add_filter('posts_clauses', 'wpse70214_posts_clauses'); 

function wpse70214_posts_clauses($pieces) 
{ 
    global $wpdb; 
    if(!is_user_logged_in()) 
     $pieces['where'] = str_replace( 
      "post_status = 'publish')", 
      "post_status = 'publish' OR $wpdb->posts.post_status = 'private') ", 
      $pieces['where'] 
     ); 

    return $pieces; 
} 
+0

看起來像一個明確的解決方案!將嘗試它,讓你知道盡快!非常感謝您的幫助! :) – myatix

+0

只是一個簡單的問題。我試圖阻止這個代碼在我的function.php頁面中,然後調用我的頁面模板中的函數wpse70214_posts_clauses(),但它不會返回任何內容?對不起,我不是一個很強大的開發人員。感謝您迄今的幫助... – myatix

+0

不,您沒有呼叫功能。過濾器照顧這一點。比'functions.php'更好的是創建[你自己的小工具插件](http://wordpress.stackexchange.com/q/72160/12615)。 – brasofilo

0

你可以創建一個訪客用戶,如果當前用戶沒有登錄使用代碼作爲訪客登錄它們,那麼你的查詢將工作。

您將需要在構建解決方案時查看組和權限。此外,最後要考慮的是如何向訪客用戶呈現登錄屏幕,以便他們可以作爲真實用戶登錄。

+0

嗨亞當,感謝您的回答,但我不是一個強大的開發人員,所以甚至不知道如何開始做類似的東西...當然有一個更簡單的方法? – myatix

相關問題