我被困在我確信一定很簡單但讓我發瘋的事情上。我在作業中被迫使用 WordPress,我對它的使用經驗為零,到目前為止,我一直在努力了解它是如何操作掛鉤和過濾器的。
我想要的很簡單:
我使用最新的帖子塊來顯示用戶寫的帖子。除了我正在處理的頁面將是網站版主的前端,他們必須查看狀態為“待處理”的帖子,而不是“發布”狀態的帖子。我在編輯器中找不到任何更改它的選項,所以我試圖設定一個鉤子來將查詢從“post_status”=>“publish”更改為“post_status”=>“pending”,但它不起作用,我得到一個'哎呀!找不到那個頁面。
這是我在我的functions.php中寫的:
函式名稱_of_the_function( $query ) {
if( get_query_var('pagename') == 'name_of_the_page' && current_user_can('publish_posts') && $query->is_main_query() ) {
$query->set('post_status', 'pending');
回傳 $query;
}
}
add_filter('pre_get_posts', 'name_of_the_function');
如果我完全保留這個功能,但寫“發布”而不是“待定”,頁面會正確顯示上次發布的帖子,但使用“待定”我會收到我之前提到的訊息。我嘗試使用 add_action 而不是 add_filter 并得到了相同的結果。
我想補充一點,我確實有待處理的帖子在等待,如果我在頁面模板中寫入以下內容,則會找到它們:
$args = 陣列 (
'貓' => 5,
'post_status' => '待定'
);
$query = new WP_Query( $args );
而 ( $query->have_posts() ) {
$query->the_post();
echo get_the_title();
}
只是為了檢查,直接在 wp-includes/latest-posts.php 檔案中,我更改了:
$args = 陣列(
'posts_per_page' => $attributes['postsToShow'],
'post_status' => '發布' ,
'order' => $attributes['order'],
'orderby' => $attributes['orderBy'],
'suppress_filters' => 假,
);
到 :
$args = 陣列(
'posts_per_page' => $attributes['postsToShow'],
'post_status' => 'pending' ,
'order' => $attributes['order'],
'orderby' => $attributes['orderBy'],
'suppress_filters' => 假,
);
它可以作業并顯示待處理的帖子,但我當然不能使用它,因為每次 WordPress 更新時該檔案都會被洗掉。
很抱歉這篇很長的帖子,但我現在迷路了,不知道還能做什么,我已經查看了所有其他的內網,但無法找到答案,我非常感謝有關此事的任何幫助,謝謝提前。
uj5u.com熱心網友回復:
通過使用pre_get_postswith $query->is_main_query(),您可以將其應用于 WordPress 用于查找頁面的查詢(主查詢)。您的代碼需要更改為:
function name_of_the_function( $query ) {
if ( is_admin() || $query->is_main_query() ) {
return $query;
}
if( get_query_var('pagename') == 'name_of_the_page' && current_user_can('publish_posts') ) {
$query->set( 'post_status', 'pending' );
}
return $query;
}
add_filter( 'pre_get_posts', 'name_of_the_function' );
所以基本上,不要在管理中的任何查詢或作為主查詢的任何查詢上運行它,而只在具有特定功能的人的特定頁面上運行它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/351202.html
標籤:php WordPress的 wordpress 主题
下一篇:按鈕PHPHTML的Href
