我该如何做才能使“添加新帖子”页面的“可见性”默认设置为“私人”?


8

我正在尝试创建一个可更改“添加新帖子”页面的插件,因此默认情况下,“可见性”字段显示为“私人”:

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

[Publish]

...与WordPress通常假定的相反:

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

[Publish]

目前,我正在使用“ wp_insert_post_data”过滤器,这使我可以将post_status的所有信息都从“自动草稿”更改为“私人”。在这种情况下,会有意想不到的副作用:将post_status更改为“ private”似乎会自动发布该帖子,将编辑器中的按钮更改为“ Update”。此外,如果用户在指定标题之前进行了保存,则该帖子将以标题“自动草稿”发布。

有什么方法可以将默认情况下的“可见性”简单地更改为“不公开”,而不会自动发布帖子,并将按钮更改为“更新”?在普通WordPress中,用户可以手动将可见性更改为“私有”,并且该按钮将保持为“发布...”,我只需要通过插件即可实现。我还希望确保用户仍然可以选择“公开”。

谢谢!

Answers:


-1

由于您正在开发插件,因此我假设您不想触摸wp-content / plugins或../themes之外的任何文件。

但是,如果不是这样,请遵循以下步骤:
转到wp-admin / includes / meta-boxes.php并找到:

$visibility = 'public';
$visibility_trans = __('Public');

现在将其更改为显而易见的:

$visibility = 'private';
$visibility_trans = __('Private');

同样,这会影响plugins文件夹外部的meta-boxes.php文件。尽管如此,我认为您应该采取的方法是创建一个新的meta框,添加您的自定义可见性设置(即private),并使后者覆盖默认的WP可见性设置

最好的,
克里斯


2
需要您修改核心文件的解决方案将始终在您进行更新时结转。因此,它们确实不是解决方案。
Drew Gourley

同意,但是除非我没有记错,否则我认为粗体部分可以通过常规插件实现。如果是这样,那就是一个不错的解决方案,仅比我想做的工作多一点。
Matt Refghi 2011年

3

来自插件;使用操作“ post_submitbox_misc_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' );

?>

当您执行“保存草稿”时,这会中断草稿并自动发布帖子。还有其他解决方案吗?

2

将帖子自动标记为私人的正确方法是使用wp_insert_post_data过滤器。非常简单:

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;
}

这是正确的,但是如果您希望帖子能够被放入垃圾箱,则应首先检查是否('trash'!= $ post ['post_status'])。
alexg '19
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.