我已经使用EdiFlow插件创建了许多自定义帖子状态。现在,我想做的是,如果贡献者访问帖子编辑页面,并且帖子状态为“已分配”以自动更改为“正在工作”。这将允许我知道并在他们开始工作时向他们发送电子邮件(在编辑后加载页面时)。
我正在尝试使用这个代码,它似乎没有任何作用
function educadme_assigned_to_inprogress( $post_id ) {
if ( current_user_can(\'edit_post\', $post_id) && !current_user_can( \'manage_options\' ) ) {
$post = get_post($post_id);
if (get_post_type()==\'post\' && $post->post_status ==\'assigned\' && strstr($_SERVER[\'REQUEST_URI\'], \'wp-admin/post-new.php\')) {
$post->post_status = \'in-progress\'; // use any post status
wp_update_post($post);
}
}
}
add_action(\'add_meta_boxes\', \'educadme_assigned_to_inprogress\');
另一个条件较少的简化版本可能是:function educadme_assigned_to_inprogress( $post_id ) {
if ( current_user_can(\'edit_post\', $post_id) && !current_user_can( \'manage_options\' ) ) {
$post = get_post($post_id);
$screen = get_current_screen();
if ($screen->base != \'post\')
return;
if ($post->post_status ==\'assigned\') {
$post->post_status = \'in-progress\'; // use any post status
wp_update_post($post);
}
}
}
add_action(\'add_meta_boxes\', \'educadme_assigned_to_inprogress\');
另一个类似的版本虽然起到了一定的作用,但导致了以下问题:function educadme_assigned_to_inprogress( $post_id ) {
if ( current_user_can(\'edit_post\', $post_id) && !current_user_can( \'manage_options\' ) ) {
$post = get_post($post_id);
if (get_post_type()==\'post\' && $post->post_status ==\'assigned\' && strstr($_SERVER[\'REQUEST_URI\'], \'wp-admin/post-new.php\') || strstr($_SERVER[\'REQUEST_URI\'], \'wp-admin/post.php\')) {
$post->post_status = \'in-progress\'; // use any post status
wp_update_post($post);
}
}
}
add_action(\'add_meta_boxes\', \'educadme_assigned_to_inprogress\');
此代码的主要问题是,它不仅在指定自定义状态时运行。此外,它在列出所有帖子的页面上运行,而不仅仅在单个编辑帖子页面中运行。也就是说,如果我正在查看帖子列表,它会更改他们的帖子状态!如有任何建议或更正,将不胜感激。我相信其他人也会觉得这很有用。