Comment masquer tout dans la métabox PUBLISH sauf le bouton Déplacer vers la corbeille et publier

10

J'ai un type de message personnalisé (appelé contacts). Étant donné que ce type de publication ne fonctionne pas comme une publication, je ne souhaite pas afficher SAVE DRAFT, PREVIEW, Status, Visibility ou Publish Date.

Les seules options que je souhaite afficher sont les boutons PUBLIER et Déplacer vers la corbeille.

Existe-t-il un moyen de masquer ces autres options? Sinon, comment puis-je créer un nouveau PUBLISH & Move to Trash que je puisse ajouter à une nouvelle métabox?

katemerart
la source

Réponses:

14

Vous pouvez simplement masquer les options à l'aide de CSS. Cela ajoutera un style d'affichage: aucun aux actions de publication diverses et mineures sur les pages post.php et post-new.php. Il vérifie également un type de publication spécifique, car tous les types de publication utilisent ces deux fichiers.

function hide_publishing_actions(){
        $my_post_type = 'POST_TYPE';
        global $post;
        if($post->post_type == $my_post_type){
            echo '
                <style type="text/css">
                    #misc-publishing-actions,
                    #minor-publishing-actions{
                        display:none;
                    }
                </style>
            ';
        }
}
add_action('admin_head-post.php', 'hide_publishing_actions');
add_action('admin_head-post-new.php', 'hide_publishing_actions');
Brian Fegter
la source
Brian - Merci pour la réponse rapide. J'ai essayé la fonction, en remplaçant 'POST_TYPE' par le nom du type de message personnalisé (contacts), mais rien n'est supprimé lorsque je vais sur les pages d'édition / ajout de nouvelles.
katemerart
Découvrez ma dernière modification. Cela devrait résoudre le problème. :)
Brian Fegter
C'est génial - cela a ouvert une toute nouvelle façon de supprimer des choses que je ne veux pas montrer !! Merci beaucoup.
katemerart
Heureux de vous aider :)
Brian Fegter
1
Juste pour le souligner: vous pouvez supprimer un niveau d'indentation pour votre code en faisant simplement if ( $post->post_type != $my_post_type ){ return; }au début. Pas besoin d'avoir l'intégralité de votre code enveloppé dans la ifdéclaration.
Pete
1

Dans cet exemple, vous pouvez facilement définir sur quels types de publication vous souhaitez masquer les options de publication, l'exemple les masque pour le type de type de pots intégrés pageet le type de publication personnalisé cpt_portfolio.

/**
 * Hides with CSS the publishing options for the types page and cpt_portfolio
 */
function wpse_36118_hide_minor_publishing() {
    $screen = get_current_screen();
    if( in_array( $screen->id, array( 'page', 'cpt_portfolio' ) ) ) {
        echo '<style>#minor-publishing { display: none; }</style>';
    }
}

// Hook to admin_head for the CSS to be applied earlier
add_action( 'admin_head', 'wpse_36118_hide_minor_publishing' );

Mise à jour importante

Je vous suggère également de forcer le statut de publication "Publié" pour éviter d'enregistrer les publications en tant que brouillons:

/**
 * Sets the post status to published
 */
function wpse_36118_force_published( $post ) {
    if( 'trash' !== $post[ 'post_status' ] ) { /* We still want to use the trash */
        if( in_array( $post[ 'post_type' ], array( 'page', 'cpt_portfolio' ) ) ) {
            $post['post_status'] = 'publish';
        }
        return $post;
    }
}

// Hook to wp_insert_post_data
add_filter( 'wp_insert_post_data', 'wpse_36118_force_published' );
Nabil Kadimi
la source