web-dev-qa-db-fra.com

Déplacer la méta-boîte de l'extrait vers l'éditeur de contenu ci-dessus

J'ai trouvé un hook WordPress appelé " edit_form_after_title " pour ajouter une zone de texte après le titre.

Comment puis-je utiliser ce crochet pour afficher l'extrait après le titre lors de la création d'un nouveau message?

11
Abouasy

C’est simple, il suffit de désenregistrer tout d'abord la boîte postexcerpt puis d’en ajouter une autre en haut.

Voici mon code

add_action(
  'admin_menu', function () {
    remove_meta_box('postexcerpt', 'post', 'normal');
  }, 999
);

add_action('edit_form_after_title', 'post_excerpt_meta_box');
7
OzzyCzech

J'ai adapté à partir d'ici: https://wordpress.stackexchange.com/a/158485/373

/* -----------------------------------------
 * Put excerpt meta-box before editor
 * ----------------------------------------- */
function my_add_excerpt_meta_box( $post_type ) {
    if ( in_array( $post_type, array( 'post', 'page' ) ) ) {
         add_meta_box(
            'postexcerpt', __( 'Excerpt' ), 'post_excerpt_meta_box', $post_type, 'test', // change to something other then normal, advanced or side
            'high'
        );
    }
}
add_action( 'add_meta_boxes', 'my_add_excerpt_meta_box' );

function my_run_excerpt_meta_box() {
    # Get the globals:
    global $post, $wp_meta_boxes;

    # Output the "advanced" meta boxes:
    do_meta_boxes( get_current_screen(), 'test', $post );

}

add_action( 'edit_form_after_title', 'my_run_excerpt_meta_box' );

function my_remove_normal_excerpt() { /*this added on my own*/
    remove_meta_box( 'postexcerpt' , 'post' , 'normal' ); 
}
add_action( 'admin_menu' , 'my_remove_normal_excerpt' );
4
Lea Cohen
function jb_post_excerpt_meta_box($post) {
    remove_meta_box( 'postexcerpt' , $post->post_type , 'normal' );  ?>
    <div class="postbox" style="margin-bottom: 0;">
        <h3 class="hndle"><span>Excerpt</span></h3>
        <div class="inside">
             <label class="screen-reader-text" for="excerpt"><?php _e('Excerpt') ?></label>
             <textarea rows="1" cols="40" name="excerpt" id="excerpt">
                  <?php echo $post->post_excerpt; ?>
             </textarea>
        </div>
    </div>
<?php }

add_action('edit_form_after_title', 'my_post_excerpt_meta_box');

De cette façon, vous pouvez ajouter exactement un extrait à votre guise. Mais il est important d'éliminer la boîte d'origine. Sinon, vous ne pourrez pas sauvegarder l'extrait dans la nouvelle boîte.

2

Cette réponse est similaire à celle publiée par @OzzyCzech, mais elle est plus universelle et ajoute un en-tête à la zone de l'extrait. L'un des inconvénients de cette méthode est que vous ne pouvez pas masquer la boîte d'extraits via Options d'écran ... Dans ce cas, vous devrez utiliser la réponse de @ lea-cohen.

add_action( 'edit_form_after_title', 'move_excerpt_meta_box' );
function move_excerpt_meta_box( $post ) {
    if ( post_type_supports( $post->post_type, 'excerpt' ) ) {
        remove_meta_box( 'postexcerpt', $post->post_type, 'normal' ); ?>
        <h2 style="padding: 20px 0 0;">Excerpt</h2>
        <?php post_excerpt_meta_box( $post );
    }
}
0
David