web-dev-qa-db-fra.com

Comment positionner un champion personnalisé avant l'éditeur

J'ai installé Advanced Custom Fields 4.0.1 et créé un nouveau Field group contenant un seul champ appelé preamble. Je voudrais positionner ce nouveau champ avant l'éditeur dans l'écran d'édition des articles. Il semble que tous les champs personnalisés sont toujours ajoutés après les champs ordinaires.

Une solution ne consisterait pas à supprimer les champs personnalisés créés avec ACF et à utiliser des champs personnalisés ordinaires.

4
Cyclonecode

Ceci peut être résolu en utilisant ce joli fragment et edit_form_after_title. Mais je n'ai pas testé ce qui se passe lorsqu'il existe plusieurs méta-boîtes. Avec un seul champ ACF (position:normal, style:no-metabox), cela fonctionne:

add_action( 'edit_form_after_title', 'pre_title_metabox_wpse_94530' );

function pre_title_metabox_wpse_94530() 
{
    global $post, $wp_meta_boxes;

    do_meta_boxes( get_current_screen(), 'normal', $post );

    unset( $wp_meta_boxes['post']['normal'] );
}

Et si cela doit être résolu avec jQuery, ajustez subtitle_text à votre nom de champ:

// Add hook to Edit and New post
foreach( array( 'post.php', 'post-new.php' ) as $hook )
    add_action( "admin_footer-$hook", 'move_acf_to_title_wpse_94530' );

function move_acf_to_title_wpse_94530()
{
    // Check post type
    if( 'post' != get_post_type() )
        return;

    ?>
    <script type="text/javascript">
        jQuery(document).ready( function($) 
        {
            $( '#acf-field-subtitle_text' ).css( 'width', '100%' );
            $( '#acf-subtitle_text' ). insertAfter( '#titlewrap' );
        });
    </script>
    <?php
}
5
brasofilo

J'ai vérifié cela un peu. J'ai regardé la source ACF. Les champs normaux utilisés par ACF sont toujours des boîtes à méta. ACF utilise simplement CSS pour leur donner l’apparence de champs plus génériques. Ils sont toujours traités comme des boîtes à méta par WP (action do_metaboxes).

Pour ajouter des champs en clair à d'autres parties du formulaire de modification, vous devez utiliser les points d'ancrage appropriés. Plus de crochets sur l'écran d'édition :

add_action( 'edit_form_after_title', 'myprefix_edit_form_after_title' );
function myprefix_edit_form_after_title() {
    echo '<h2>This is edit_form_after_title!</h2>';
}

add_action( 'edit_form_after_editor', 'myprefix_edit_form_after_editor' );
function myprefix_edit_form_after_editor() {
    echo '<h2>This is edit_form_after_editor!</h2>';
}

add_action( 'edit_form_advanced', 'myprefix_edit_form_advanced' );
function myprefix_edit_form_advanced() {
    echo '<h2>This is ye olde edit_form_advanced!</h2>';
}
3
Dave Romsey