默认情况下将帖子设置为私有的最简单方法

时间:2011-06-22 作者:user310291

我不知道如何制作插件,所以我无法执行此处的建议How can I make it so the Add New Post page has Visibility set to Private by default?

那么还有什么选择呢?

4 个回复
最合适的回答,由SO网友:Vikas Khunteta 整理而成

公认的解决方案不是将任何职位类型的可见性更改为任何状态的正确答案。下面的代码是更改post状态的正确方法。

function set_post_type_status_private( $status, $post_id ) {
    $status = \'private\';
    return $status;
}
add_filter( \'status_edit_pre\', \'set_post_type_status_private\', 10, 2 );

Updated:

当用户点击时,上述过滤器会将post状态更改为PrivateSave DraftPublish 按钮因此,在编辑页面加载时,如果您看到状态为Public,则不用担心。

还有一个过滤器可用于在保存到数据库之前更改状态。过滤器为status_save_pre 但我没有找到关于this page 所以我写了下面的代码来测试它。

function save_post_type_status_private( $status ) {
    $status = \'private\';
    return $status;
}
add_filter( \'status_save_pre\', \'save_post_type_status_private\', 10, 1 );
上述过滤器会在编辑页面加载后立即将帖子保存为“专用”帖子类型,因此可能需要在上面使用此过滤器status_edit_pre 但如果我使用status_save_pre 筛选我遇到问题,我无法删除任何帖子。因此,在WordPress团队修复此bug之前,我更喜欢“status\\u edit\\u pre”而不是“status\\u save\\u pre”。

SO网友:patnz

在上找到此WordPress forums:

您可以将其添加到函数中。php。我测试过一次,似乎效果很好。

function default_post_visibility(){
global $post;

if ( \'publish\' == $post->post_status ) {
    $visibility = \'public\';
    $visibility_trans = __(\'Public\');
} elseif ( !empty( $post->post_password ) ) {
    $visibility = \'password\';
    $visibility_trans = __(\'Password protected\');
} elseif ( $post_type == \'post\' && is_sticky( $post->ID ) ) {
    $visibility = \'public\';
    $visibility_trans = __(\'Public, Sticky\');
} else {
    $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
}
add_action( \'post_submitbox_misc_actions\' , \'default_post_visibility\' );

SO网友:EAMann

另一种选择是找其他人制作插件。

如果您使用的是WordPress。com(意思是你不能在你的网站上安装任意插件),那么你就不走运了。但是对于自托管WordPress安装,您需要编写一个插件并将其安装到您的站点上。在添加自定义功能时,没有其他选择。

SO网友:Sahil

公认的答案对我不适用。这里有一个简单的解决方案。它只会在您第一次发布任何帖子时运行。

function tse_make_post_private( $new_status, $old_status, $post ) {
  // check if is published and the post type is "post"
  if ( \'publish\' === $new_status && $post->post_type === \'post\' ) {
    // check if the post status is not private
    if ( $post->post_status != \'private\' ) {
      // change the post status to private
      $post->post_status = \'private\';
      // update the post
      wp_update_post( $post );
    }
  }
}
add_action(\'transition_post_status\', \'tse_make_post_private\', 10, 3);

结束

相关推荐

WordPress MS wp-admin/includes/post.php出现短码生成器错误

我对Wordpress 3.1启用多站点和我的主题自定义短代码生成器有一个严重的问题。出于某种原因,每当我创建一个新的页面/帖子/自定义帖子类型页面等时,我都会遇到以下错误。这特别是单选按钮和“name”标记的问题。移除后,一切正常。当它设置为变量时,我会得到错误。但是,将变量设置为常量(如文本)会使其再次工作。这就是我所犯的错误;我不知道这是什么意思,也不知道是什么原因造成的:Warning: Invalid argument supplied for foreach() in /home/matthe