Add New PostページのVisibilityをデフォルトでPrivateに設定するにはどうすればよいですか?


8

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

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

[Publish]

... WordPressが通常想定しているものとは対照的に:

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

[Publish]

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

投稿を自動的に公開せず、デフォルトで[表示]を[非公開]に変更して、ボタンを[更新]に変更する方法はありますか?通常のWordPressでは、ユーザーは表示を手動で非公開に変更でき、ボタンは[公開]のままです...プラグインを介してそれを実現するだけです。また、ユーザーが希望する場合でも、ユーザーが「パブリック」を選択できるようにしたいと考えています。

ありがとう!

回答:


-1

プラグインを開発しているので、wp-content / pluginsまたは../themes以外のファイルには触れたくないと思います。

ただし、そうでない場合は、次の
手順に従ってください。wp-admin / includes / meta-boxes.phpに移動して、以下を見つけます。

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

次に、それを明白なものに変更します。

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

この場合も、プラグインフォルダーの外部にあるmeta-boxes.phpファイルに影響します。それでも、あなたが取るべきアプローチは、新しいメタボックスを作成し、カスタムの可視性設定(つまりプライベート)を追加し、後者がデフォルトのWP可視性設定をオーバーライドすることだと思います

ベスト、
クリス


2
コアファイルを変更する必要のあるソリューションは、更新を行うと常に混乱します。したがって、それらは実際にはソリューションではありません。
Drew Gourley、2011

同意しましたが、私が間違っていない限り、太字の部分は通常のプラグインを介して達成できると思います。それが事実なら、それはまともな解決策であり、私がやりたかったことよりもわずかに多くの作業です。
Matt Refghi

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.