在发布我的自定义帖子后锁定草稿选项

时间:2019-12-11 作者:J.BizMai

在我的插件中,我有一个具有特定行为的自定义帖子类型。

管理员在发布后,应该不能再将帖子设置为草稿。

我该怎么做?

2 个回复
SO网友:Tom

我会推荐transition_post_status 钩子,允许您在帖子转换时(或保存帖子时)钩子。在下面的示例中,我们检查帖子是否属于自定义帖子类型。然后查看旧状态是否已发布,如果新状态未发布,则抛出错误。

<?php 
add_action( \'transition_post_status\', \'tps_no_draft_after_publish\', 10, 3 );
function tps_no_draft_after_publish( $new_status, $old_status, $post ) {
    if ( ( \'publish\' !== $new_status && \'publish\' === $old_status ) && \'my-custom-post-type\' === $post->post_type
    ) {
        wp_die(\'Posts that have been published cannot be set as draft.\');
    }
}
附加读数:

SO网友:J.BizMai

我一直在寻找一个解决方案,以显示带有草稿按钮的提交框。

显示此框的代码由函数生成post_submit_meta_box 从…起wp-admin/includes/meta-boxes.php.

正如我们所看到的,没有钩子来覆盖某些代码,因此下面的解决方案是我找到的最好的方法,它不需要使用像隐藏css或js这样的脏解决方案:

1-删除metabox“submitdiv”

public function remove_customized_metabox(){    
    remove_meta_box( \'submitdiv\', $post_type_slug, \'side\' ); 
}
add_action( \'add_meta_boxes\', "remove_customized_metabox", 10 );
添加我的“submitdiv”自定义元数据库您必须使用不同的idsubmitdiv 在我的示例中,要显示元框,请使用下划线作为前缀:_submitdiv

add_meta_box( 
    "_submitdiv", 
    __( "Publish" ), 
    "my_custom_callback", 
    $post_type_slug, 
    \'side\', 
    \'core\', 
    [ \'show_draft_button\' => false ] 
);
3-在回调函数中写入视图post_submit_meta_box, 按如下方式编写回调函数:

public function my_custom_callback(?\\WP_Post $post, array $callback_args){
    global $action;

    $post_type = $post->post_type;
    $post_type_object = get_post_type_object($post_type);
    $can_publish = current_user_can($post_type_object->cap->publish_posts);
    ?>
    <div class="submitbox" id="submitpost">
    ...
    if( $callback_args[\'show_draft_button\'] ) {
       //display the draft button
    }

    ...
}

4-更改_submitdiv 通过submitdiv 如果要更改发布日期,请使用jquery,post.js 使用锚点#submitdiv 所以你必须更改id。

wp_enqueue_style( "metaboxsubmitstyle", "path/css/admin-metabox-submit.css" );
wp_enqueue_script( "metaboxsubmitscript", "path/js/admin-metabox-submit.js" );
管理元数据库提交。css

#poststuff #_submitdiv .inside {
    margin: 0;
    padding: 0;
} 
管理元数据库提交。js公司
jQuery(function ($) {
    $(document).ready(function () {
        $("#_submitdiv").attr( \'id\', "submitdiv");
    });
});

相关推荐