web-dev-qa-db-fra.com

Comment puis-je faire en sorte que Visibilité de la page Ajouter un nouveau message soit défini sur Privé par défaut?

J'essaie de créer un plugin qui modifie la page Ajouter un nouveau message de sorte que le champ Visibilité indique "Privé" par défaut:

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

[Publish]

... contrairement à ce que WordPress suppose normalement:

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

[Publish]

Pour le moment, j'utilise le filtre "wp_insert_post_data", ce qui me permet de modifier les publications ayant un post_status de "projet automatique" en "privé". Tandis que cela fonctionne, il y a un effet secondaire non souhaité: changer le post_status en "privé" semble publier le post automatiquement, changer le bouton dans l'éditeur en "Mettre à jour". De plus, si l’utilisateur enregistre avant de spécifier un titre, l’article sera publié avec le titre "Auto-Draft".

Existe-t-il un moyen de modifier simplement Visibility à Private par défaut, de manière à ne pas publier automatiquement le message et de changer le bouton en "Mettre à jour"? Dans Vanilla WordPress, les utilisateurs peuvent modifier manuellement la visibilité en Privé, et le bouton reste tel que Publier ... Je dois juste y parvenir via un plugin. Je veux aussi m'assurer que l'utilisateur puisse toujours sélectionner le "public" s'il le souhaite.

Merci!

8
Matt Refghi

du plugin; utilise l'action 'post_submitbox_misc_actions' et une requête pour intercepter l'utilisateur Formulaire de publication: 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

La manière correcte de marquer automatiquement une publication comme étant privée consiste à le faire avec le filtre wp_insert_post_data. C'est très simple:

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