如何才能使添加新帖子页面的可见性在默认情况下设置为私有?

时间:2011-04-18 作者:Matt Refghi

我正在尝试创建一个插件来更改添加新帖子页面,以便可见性字段在默认情况下显示“Private”:

Status: Draft
Visibility: **Private**
Publish immediately

[Publish]
。。。与WordPress通常的假设相反:

Status: Draft
Visibility: **Public**
Publish immediately

[Publish]
目前,我正在使用“wp\\u insert\\u post\\u data”过滤器,这允许我将任何post\\u状态为“auto draft”的帖子更改为“private”。虽然这样做有效,但也有一个意想不到的副作用:将post_状态更改为“private”似乎会自动发布帖子,将编辑器中的按钮更改为“Update”。此外,如果用户在指定标题之前保存,则将以标题“自动草稿”发布帖子。

我有没有办法在默认情况下将可见性更改为Private,而不自动发布帖子,并将按钮更改为“更新”?在vanilla WordPress中,用户可以手动将可见性更改为Private,按钮保持为Publish。。。我只需要通过一个插件来实现这一点。我还想确保用户仍然可以选择“public”,如果他们愿意的话。

谢谢

3 个回复
最合适的回答,由SO网友:cr0z3r 整理而成

由于您正在开发一个插件,我假设您不想接触wp内容/插件之外的任何文件,或者/这方面的主题。

但是,如果不是这样,请按照以下步骤操作:
转到wp admin/INCLUDE/meta框。php和查找:

$visibility = \'public\';
$visibility_trans = __(\'Public\');
现在将其更改为显而易见的:

$visibility = \'private\';
$visibility_trans = __(\'Private\');
同样,这会影响元框。位于plugins文件夹之外的php文件。尽管如此,我认为你应该采取的方法是creating a new meta box, adding your custom visibility setting (i.e. private) and make the latter override the default WP visibility setting.

最佳,
克里斯

SO网友:hearvox

来自插件;使用操作“post\\u submitbox\\u misc\\u actions”和一些查询来捕获用户发布表单:http://wordpress.org/extend/plugins/private-post-by-default/

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网友:Yaron

自动将帖子标记为私有的正确方法是使用wp\\u insert\\u post\\u数据过滤器。这很简单:

add_filter( \'wp_insert_post_data\', \'mark_post_private\' );
function mark_post_private( $data ) {
    if ( \'your_post_type_goes_here\' == $data[\'post_type\'] ) {
        $data[\'post_status\'] = \'private\';
    }

    return $data;
}

结束

相关推荐

在调用Query_Posts()之后使用wp_list_ages()

可能我只是做错了,所以请随时告诉我您将如何解决此问题。我有一个主要基于页面的网站,但也有一些“页面”,其中我的内容来自自定义query_posts() 呼叫在所有这些页面中,我希望能够使用wp_list_pages() 生成子导航。当我在一个普通页面上时,这很好用,但当我在一个query_posts() 内容,这根本不起作用。这里有一个我所说的“页面”的例子。这是一个主题文件,名为page-media.php:<?php get_header(); ?> <?php q