web-dev-qa-db-fra.com

Modification de la priorité de l'éditeur principal

Je souhaite que l'éditeur principal de publication WordPress apparaisse sous certaines de mes boîtes de méta (générées par Advanced Custom Fields).

Je sais qu'il existe les fonctions add_meta_box() et remove_meta_box(), mais ce serait vraiment génial si je pouvais simplement modifier la priorité de la boîte à méta de l'éditeur sans avoir à la supprimer et à l'ajouter.

Des idées?

1
Ben Everard

Pour répondre à ma propre question, je vais d'abord expliquer pourquoi la réponse de @ s_ha_dum ne fonctionne pas pour moi.

J'utilise Advanced Custom Fields pour ajouter les boîtes de méta supplémentaires, celles dont j'ai besoin pour apparaître au-dessus de l'éditeur WordPress.

@s_ha_dum a souligné que l'éditeur WordPress est codé en dur dans le modèle , mais j'ai remarqué qu'il peut être désactivé en supprimant le support de l'éditeur. Dans cet esprit, j'ai désactivé le support de l'éditeur, puis ajouté le code de l'éditeur dans une nouvelle boîte méta.

Et voilà:

add_action('init', function () {
    remove_post_type_support('post', 'editor');
});

add_action('add_meta_boxes', function () {

    $screens = array('post');

    foreach ($screens as $screen) {

        add_meta_box(
            'moved_editor',
            'Moved Editor',
            'moved_editor_custom_box',
            $screen
        );

    }

});

function moved_editor_custom_box( $post ) {

    // Use nonce for verification
    wp_nonce_field( plugin_basename( __FILE__ ), 'myplugin_noncename' );

    ?>

        <style>

            #moved_editor {
                border: none;
            }

            #moved_editor h3 {
                display: none;
            }

            #moved_editor .inside {
                padding: 0;
            }

        </style>

        <div id="postdivrich" class="postarea">

            <?php wp_editor($post->post_content, 'content', array('dfw' => true, 'tabfocus_elements' => 'sample-permalink,post-preview', 'editor_height' => 360) ); ?>

            <table id="post-status-info" cellspacing="0">

                <tbody>

                    <tr>

                        <td id="wp-Word-count"><?php printf( __( 'Word count: %s' ), '<span class="Word-count">0</span>' ); ?></td>
                        <td class="autosave-info">

                            <span class="autosave-message">&nbsp;</span>

                                <?php if ( 'auto-draft' != $post->post_status ) : ?>

                                    <span id="last-edit">'

                                        <?php if ( $last_id = get_post_meta($post_ID, '_edit_last', true) ) : ?>

                                            <?php

                                                $last_user = get_userdata($last_id); 
                                                printf(__('Last edited by %1$s on %2$s at %3$s'), esc_html( $last_user->display_name ), mysql2date(get_option('date_format'), $post->post_modified), mysql2date(get_option('time_format'), $post->post_modified));

                                            ?>

                                        <?php else : ?>

                                            <?php printf(__('Last edited on %1$s at %2$s'), mysql2date(get_option('date_format'), $post->post_modified), mysql2date(get_option('time_format'), $post->post_modified)); ?>

                                        <?php endif; ?>

                                    </span>

                                <?php endif; ?>

                            </td>

                        </tr>

                </tbody>

            </table>

        </div>

    <?
}
1
Ben Everard

L'éditeur est codé en dur dans le formulaire . Il n'est pas inséré par add_meta_box.

Il existe un hook appelé edit_form_after_title que vous devriez pouvoir utiliser cependant.

Preuve de concept:

// use the action to create a place for your meta box
function add_before_editor($post) {
  global $post;
  do_meta_boxes('post', 'pre_editor', $post);
}
add_action('edit_form_after_title','add_before_editor');

// add a box the location just created
function test_box() {
    add_meta_box(
        'generic_box', // id, used as the html id att
        __( 'Generic Title' ), // meta box title
        'generic_cb', // callback function, spits out the content
        'post', // post type or page. This adds to posts only
        'pre_editor', // context, where on the screen
        'low' // priority, where should this go in the context
    );
}
function generic_cb($post) {
  var_dump($post);
  echo 'generic content';
}
add_action( 'add_meta_boxes', 'test_box' );
4
s_ha_dum