web-dev-qa-db-ja.com

[新しい投稿を追加]ページで[表示設定]がデフォルトで[非公開]に設定されるようにするにはどうすればよいですか。

[新規投稿の追加]ページを変更するプラグインを作成しようとしているので、[表示]フィールドにはデフォルトで "Private"と表示されています。

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

[Publish]

... WordPressが通常想定していることとは対照的に、

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

[Publish]

現時点では、 "wp_insert_post_data"フィルタを使用しています。これにより、 "auto-draft"のpost_statusの投稿を "private"に変更できます。これはうまくいきますが、意図しない副作用があります:post_statusを "private"に変更すると自動的に投稿が公開され、エディタのボタンが "Update"に変更されるようです。さらに、タイトルを指定する前にユーザーが保存した場合、投稿はタイトル "自動ドラフト"で公開されます。

投稿を自動公開せずにボタンを[更新]に変更する方法で、デフォルトで[表示]を[非公開]に変更する方法はありますか。 Vanilla WordPressでは、ユーザは手動で表示をプライベートに変更することができ、ボタンは公開のままです...プラグインを介してそれを達成する必要があります。また、「パブリック」をユーザーが選択できるようにする必要があります。

ありがとうございます。

8
Matt Refghi

プラグインから。アクション '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' );

?>
3
hearvox

投稿を自動的に非公開としてマークする正しい方法は、wp_insert_post_dataフィルターを使用して投稿を行うことです。とても簡単です。

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

    return $data;
}
1
Yaron