Wordpress 挂钩显示最新的待处理帖子而不是已经发布的帖子
Wordpress hook to display latest pending posts instead of already published
我被困在一些我确信一定很简单但让我抓狂的事情上。我在工作中被迫使用 WordPress,但我对它的经验为零,而且到目前为止,我一直在努力了解它在挂钩和过滤器方面的运作方式。
我想要的很简单:
我正在使用 最新的 posts 块来显示用户编写的 posts。除了我正在处理的页面将是网站管理员的前端,管理员必须看到状态为 'pending' 的 post,而不是 'publish'。我在编辑器中找不到任何选项来更改它,所以我试图设置一个钩子来将查询从 'post_status' => 'publish' 更改为 'post_status' => 'pending',但它不起作用,我得到一个 'Oops! That page can’t be found.'
这是我在 functions.php:
中写的内容
function name_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' );
return $query;
}
}
add_filter( 'pre_get_posts', 'name_of_the_function' );
如果我完全保留此功能但写 'publish' 而不是 'pending' 页面会正确显示最后发布的 posts,但是 'pending' 我得到我之前提到的消息。我尝试使用 add_action 而不是 add_filter 并得到了相同的结果。
我想补充一点,我确实有待处理的 post 正在等待,如果我在我的页面模板中写入以下内容,就会找到它们:
$args = array (
'cat' => 5,
'post_status' => 'pending'
);
$query = new WP_Query( $args );
while ( $query->have_posts() ) {
$query->the_post();
echo get_the_title();
}
只是为了检查,直接在 wp-includes/latest-posts.php 文件中,我更改了:
$args = array(
'posts_per_page' => $attributes['postsToShow'],
'post_status' => 'publish',
'order' => $attributes['order'],
'orderby' => $attributes['orderBy'],
'suppress_filters' => false,
);
至:
$args = array(
'posts_per_page' => $attributes['postsToShow'],
'post_status' => 'pending',
'order' => $attributes['order'],
'orderby' => $attributes['orderBy'],
'suppress_filters' => false,
);
它可以工作并显示待处理的 posts 但我当然不能使用它,因为文件会在每次 WordPress 更新时被删除。
很抱歉 post 但我现在迷路了,不知道还能做什么,我已经查看了所有其他内部网,但找不到答案,我真的很感激任何帮助那个问题,提前致谢。
通过将 pre_get_posts
与 $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' );
所以基本上,不要 运行 在管理中的任何查询或作为主要查询的任何查询上使用此功能,而仅 运行 在具有特定能力的人的特定页面上使用此功能。
我被困在一些我确信一定很简单但让我抓狂的事情上。我在工作中被迫使用 WordPress,但我对它的经验为零,而且到目前为止,我一直在努力了解它在挂钩和过滤器方面的运作方式。
我想要的很简单:
我正在使用 最新的 posts 块来显示用户编写的 posts。除了我正在处理的页面将是网站管理员的前端,管理员必须看到状态为 'pending' 的 post,而不是 'publish'。我在编辑器中找不到任何选项来更改它,所以我试图设置一个钩子来将查询从 'post_status' => 'publish' 更改为 'post_status' => 'pending',但它不起作用,我得到一个 'Oops! That page can’t be found.'
这是我在 functions.php:
function name_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' ); return $query; } } add_filter( 'pre_get_posts', 'name_of_the_function' );
如果我完全保留此功能但写 'publish' 而不是 'pending' 页面会正确显示最后发布的 posts,但是 'pending' 我得到我之前提到的消息。我尝试使用 add_action 而不是 add_filter 并得到了相同的结果。
我想补充一点,我确实有待处理的 post 正在等待,如果我在我的页面模板中写入以下内容,就会找到它们:
$args = array ( 'cat' => 5, 'post_status' => 'pending' ); $query = new WP_Query( $args ); while ( $query->have_posts() ) { $query->the_post(); echo get_the_title(); }
只是为了检查,直接在 wp-includes/latest-posts.php 文件中,我更改了:
$args = array( 'posts_per_page' => $attributes['postsToShow'], 'post_status' => 'publish', 'order' => $attributes['order'], 'orderby' => $attributes['orderBy'], 'suppress_filters' => false, );
至:
$args = array( 'posts_per_page' => $attributes['postsToShow'], 'post_status' => 'pending', 'order' => $attributes['order'], 'orderby' => $attributes['orderBy'], 'suppress_filters' => false, );
它可以工作并显示待处理的 posts 但我当然不能使用它,因为文件会在每次 WordPress 更新时被删除。
很抱歉 post 但我现在迷路了,不知道还能做什么,我已经查看了所有其他内部网,但找不到答案,我真的很感激任何帮助那个问题,提前致谢。
通过将 pre_get_posts
与 $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' );
所以基本上,不要 运行 在管理中的任何查询或作为主要查询的任何查询上使用此功能,而仅 运行 在具有特定能力的人的特定页面上使用此功能。