Wordpress 如何将 post 状态从待定更改为已批准
Wordpress how to change post status from pending to approved
我需要在创建新 post 时将 post 状态从 pending
更改为 approved
,并且如果作者之前已获得批准 post。
我有这样的功能,但代码根本不起作用。
请帮忙:
add_filter('wp_insert_post', 'change_post_status_when_insert_post_data',10,2);
function change_post_status_when_insert_post_data($data) {
if($data['post_type'] == "post") {
$posts_args = array(
'author__in' => $id,
'post_type' => 'post',
'post_status' => 'approved',
'posts_per_page' => -1,
);
$user_posts = get_posts($posts_args);
$count = count($user_posts);
if($count > 0) {
$data['post_status'] = 'approved';
} else {
$data['post_status'] = 'pending';
}
}
return $data;
}
the code doesn't work at all
因为
wp_insert_post
是动作挂钩而不是过滤器挂钩。因此,使用 add_filter
是不正确的。
- 您要求
wp_insert_post
给您两个参数,但您在回调函数中使用了一个。
$data
是 post object
,不是 array
。你不能像 $data['post_type']
. 那样使用它
'post_status' => 'approved'
不存在。 See the list of valid post statusesDocs
- 您要找的是 post 状态
publish
不是 approved
.
以下代码进入主题的 functions.php
文件。
add_action('wp_insert_post', 'change_post_status_when_insert_post_data', 999, 2);
function change_post_status_when_insert_post_data($post_id, $post)
{
$posts_args = array(
'posts_per_page' => -1,
'author' => $post->post_author,
'post_status' => 'publish',
);
$user_posts = new WP_Query($posts_args);
$post_status = (('post' == $post->post_type) && ($user_posts->found_posts) && ('publish' != $post->post_status) && ('trash' != $post->post_status)) ? 'publish' : 'pending';
if ('publish' == $post_status) {
wp_update_post(array(
'ID' => $post_id,
'post_status' => $post_status
));
}
}
我为 post 自动发布所使用的条件:
post_type
应该是'post'
- 和
- 作者必须至少已经发表了一篇文章post。
- 和
post_status
不应 publish
。
- 和
post_status
也不应该是 trash
。
还值得一提的是,我使用 WP_Query
及其 属性 found_posts
而不是使用 get_posts
和 count
来判断作者是否有已经发表了post or not.
此答案已在 wordpress 5.8.1
上进行了全面测试并且有效。
我需要在创建新 post 时将 post 状态从 pending
更改为 approved
,并且如果作者之前已获得批准 post。
我有这样的功能,但代码根本不起作用。
请帮忙:
add_filter('wp_insert_post', 'change_post_status_when_insert_post_data',10,2);
function change_post_status_when_insert_post_data($data) {
if($data['post_type'] == "post") {
$posts_args = array(
'author__in' => $id,
'post_type' => 'post',
'post_status' => 'approved',
'posts_per_page' => -1,
);
$user_posts = get_posts($posts_args);
$count = count($user_posts);
if($count > 0) {
$data['post_status'] = 'approved';
} else {
$data['post_status'] = 'pending';
}
}
return $data;
}
the code doesn't work at all
因为
wp_insert_post
是动作挂钩而不是过滤器挂钩。因此,使用add_filter
是不正确的。- 您要求
wp_insert_post
给您两个参数,但您在回调函数中使用了一个。 $data
是 postobject
,不是array
。你不能像$data['post_type']
. 那样使用它
'post_status' => 'approved'
不存在。 See the list of valid post statusesDocs- 您要找的是 post 状态
publish
不是approved
.
以下代码进入主题的 functions.php
文件。
add_action('wp_insert_post', 'change_post_status_when_insert_post_data', 999, 2);
function change_post_status_when_insert_post_data($post_id, $post)
{
$posts_args = array(
'posts_per_page' => -1,
'author' => $post->post_author,
'post_status' => 'publish',
);
$user_posts = new WP_Query($posts_args);
$post_status = (('post' == $post->post_type) && ($user_posts->found_posts) && ('publish' != $post->post_status) && ('trash' != $post->post_status)) ? 'publish' : 'pending';
if ('publish' == $post_status) {
wp_update_post(array(
'ID' => $post_id,
'post_status' => $post_status
));
}
}
我为 post 自动发布所使用的条件:
post_type
应该是'post'- 和
- 作者必须至少已经发表了一篇文章post。
- 和
post_status
不应publish
。- 和
post_status
也不应该是trash
。
还值得一提的是,我使用 WP_Query
及其 属性 found_posts
而不是使用 get_posts
和 count
来判断作者是否有已经发表了post or not.
此答案已在 wordpress 5.8.1
上进行了全面测试并且有效。