您问题中的代码的问题是它总是拦截。您完全失去了不发布、不可能有草稿的能力。我并没有进一步研究为什么这会导致一篇不可删减的文章。无论如何,这不是一个人想要的。
我很高兴javascript解决方案能为您服务,但就我个人而言,我有两个问题,第一个问题,您可以将帖子另存为public,第二个问题,这使得处理草稿变得更加困难,因为脚本总是将单选按钮设置为private。在某种程度上,现在有两种解决方案。
1。将帖子类型强制为私有加上视觉指示:
这就是为什么我再次研究如何使用帖子状态转换,正如我所说,可以使用
Post Status Transitions.
Code:
add_action( \'transition_post_status\', \'wpse118970_post_status_new\', 10, 3 );
function wpse118970_post_status_new( $new_status, $old_status, $post ) {
if ( $post->post_type == \'itsme_private_posts\' && $new_status == \'publish\' && $old_status != $new_status ) {
$post->post_status = \'private\';
wp_update_post( $post );
}
}
这将强制您发布的帖子类型为私有。不影响保存草稿的功能。这本身就足以解决拥有私人帖子类型的问题
但当然,在发布元数据库中表示帖子类型的私有性质会更好。为此,我稍微调整了javascript。主要是通过默认情况下不设置复选框,但仍然更改显示的文本,另外我添加了一个注释。
Code:
add_action( \'post_submitbox_misc_actions\' , \'wpse118970_change_visibility_metabox\' );
function wpse118970_change_visibility_metabox(){
global $post;
if ($post->post_type != \'post\')
return;
$message = __(\'<strong>Note:</strong> Published posts are always <strong>private</strong>.\');
$post->post_password = \'\';
$visibility = \'private\';
$visibility_trans = __(\'Private\');
?>
<style type="text/css">
.priv_pt_note {
background-color: lightgreen;
border: 1px solid green;
border-radius: 2px;
margin: 4px;
padding: 4px;
}
</style>
<script type="text/javascript">
(function($){
try {
$(\'#post-visibility-display\').text(\'<?php echo $visibility_trans; ?>\');
$(\'#hidden-post-visibility\').val(\'<?php echo $visibility; ?>\');
} catch(err){}
}) (jQuery);
</script>
<div class="priv_pt_note">
<?php echo $message; ?>
</div>
<?php
}
Source: How to set new posts visibility to private by default?Note: 与下面的代码相比,我删除了单选按钮的检查,并为消息添加了额外的代码。
当然,您不需要javascript来将您的post类型设置为私有,但将内容直观地指示出来总是很好的。因此,这是一个很好的补充
2。将private作为发布元框中的标准选项:
我保留这个选项,因为@its\\me接受了这个答案作为解决方案。正如我在评论中所说,我发现了一段有用的代码,它通过挂接
post_submitbox_misc_actions
. 正如我在开始时所说的,我有两个问题,第一,你可以将帖子保存为public,第二,它使处理草稿变得更加困难,因为脚本总是将单选按钮设置为private。仍然可以拥有并使用草稿,只是不像以前那样直观,但私人出版状态是无法强制执行的。
Code:
add_action( \'post_submitbox_misc_actions\' , \'wpse118970_change_visibility_metabox_value\' );
function wpse118970_change_visibility_metabox_value(){
global $post;
if ($post->post_type != \'itsme_private_posts\')
return;
$post->post_password = \'\';
$visibility = \'private\';
$visibility_trans = __(\'Private\');
?>
<script type="text/javascript">
(function($){
try {
$(\'#post-visibility-display\').text(\'<?php echo $visibility_trans; ?>\');
$(\'#hidden-post-visibility\').val(\'<?php echo $visibility; ?>\');
$(\'#visibility-radio-<?php echo $visibility; ?>\').attr(\'checked\', true);
} catch(err){}
}) (jQuery);
</script>
<?php
}
Source: How to set new posts visibility to private by default?Note: 我缩短了代码以适应这里的需要。