Comment puis-je faire en sorte que la page Ajouter un nouveau message ait la visibilité définie sur Privé par défaut?


8

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

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

[Publish]

... par opposition à ce que WordPress suppose normalement:

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

[Publish]

En ce moment, j'utilise le filtre "wp_insert_post_data", et cela me permet de changer tous les messages avec un post_status de "auto-draft" en "private". Pendant que cela fonctionne, il y a un effet secondaire involontaire: changer le post_status en "privé" semble publier le message 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 changer simplement la visibilité en privé par défaut, d'une manière qui ne publie pas automatiquement le message, et de changer le bouton en «mise à jour»? Dans vanilla WordPress, les utilisateurs peuvent changer manuellement la visibilité en Privé, et le bouton reste comme Publier ... J'ai juste besoin de le faire via un plugin. Je veux également m'assurer que "public" peut toujours être sélectionné par l'utilisateur, s'il le souhaite.

Merci!

Réponses:


-1

puisque vous développez un plug-in, je suppose que vous ne voulez pas toucher à des fichiers en dehors de wp-content / plugins ou ../themes d'ailleurs.

Cependant, si ce n'est pas le cas, suivez:
Allez sur wp-admin / includes / meta-boxes.php et trouvez:

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

Maintenant changez-le en évidence:

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

Encore une fois, cela affecte le fichier meta-boxes.php qui se trouve en dehors du dossier plugins. Néanmoins, je pense que l'approche que vous devriez adopter consiste à créer une nouvelle méta-boîte, à ajouter votre paramètre de visibilité personnalisé (c'est-à-dire privé) et à faire en sorte que ce dernier remplace le paramètre de visibilité WP par défaut .

Bien,
Chris


2
Les solutions qui vous obligent à modifier les fichiers de base seront toujours récupérées lorsque vous effectuez une mise à jour. Ce ne sont donc vraiment pas des solutions.
Drew Gourley

D'accord, mais sauf erreur, je pense que la partie en gras est réalisable via un plugin classique. Si c'est le cas, alors c'est une solution décente, juste un peu plus de travail que ce que je voulais faire.
Matt Refghi

3

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

?>

Cela brise les brouillons et publie automatiquement les articles lorsque vous effectuez "Enregistrer le brouillon". D'autres solutions?

2

La bonne façon de marquer automatiquement une publication comme privée est de 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 ( 'your_post_type_goes_here' == $data['post_type'] ) {
        $data['post_status'] = 'private';
    }

    return $data;
}

C'est correct, mais si vous voulez que la publication puisse être placée dans la corbeille, vous devez d'abord vérifier si ('corbeille'! = $ Post ['post_status']).
alexg
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.