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:
Vous ne pouvez pas utiliser un vrai metabox pour cela, accrochez plutôt edit_form_after_title
.
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 );
}