web-dev-qa-db-fra.com

Comment positionner la méta_box sur l'écran d'édition après le titre?

J'affiche un div dans l'écran Edit Post en utilisant add_meta_box(). Cette fonction offre des options de positionnement très limitées via les paramètres "priorité" et "contexte" et celles-ci ne sont pas suffisantes pour mes besoins.

Je dois pouvoir afficher la div en dessous du lien permanent, mais au-dessus du bouton Insérer un média dans Edit Post, plus précisément en dessous de la div "titlediv", au-dessus de la div "postdivrich".

Sinon, comment puis-je positionner la boîte de méta sur l'écran d'édition post? Cela peut-il être fait avec jQuery?

Voici une solution partiellement efficace:

function admin_init(){
  add_meta_box("wd_meta", "WD Meta", "wd_meta", "post", "normal", "high");
}
add_action("admin_init", "admin_init");

function wd_meta() {
    global $post;
    $custom = get_post_custom($post->ID);
?>
<div id="wdMeta">
<p>Display a message here.</p>
</div> 

<script>
$('#wd_meta').insertAfter('#titlediv'); 
</script>
<?php } ?>

La méta-boîte s'affiche correctement sur la page, mais le javascript ne la positionne pas correctement, même si cela semble fonctionner en démo:

http://jsfiddle.net/kFTc5/11/

6
AMcDermott

Vous ne pouvez pas utiliser un vrai metabox pour cela, accrochez plutôt edit_form_after_title.

enter image description here

Voici un exemple simple:

add_action( 'edit_form_after_title', 'wpse_87478_pseudo_metabox' );
add_action( 'save_post', 'wpse_87478_save_metabox' );

function wpse_87478_pseudo_metabox()
{
    global $post;
    $key = '_wpse_87478';

    if ( empty ( $post ) || 'post' !== get_post_type( $GLOBALS['post'] ) )
        return;

    if ( ! $content = get_post_meta( $post->ID, $key, TRUE ) )
        $content = '';

    printf(
        '<p><label for="%1$s_id">Enter some text
        <input type="text" name="%1$s" id="%1$s_id" value="%2$s" class="all-options" />
        </label></p>',
        $key,
        esc_attr( $content )
    );
}

function wpse_87478_save_metabox( $post_id )
{
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
        return;

    if ( ! current_user_can( 'edit_post', $post_id ) )
        return;

    $key = '_wpse_87478';

    if ( isset ( $_POST[ $key ] ) )
        return update_post_meta( $post_id, $key, $_POST[ $key ] );

    delete_post_meta( $post_id, $key );
}
9
fuxia