Modificando la prioridad del editor principal

23 may 2013, 18:45:27
Vistas: 1.48K
Votos: 2

Quiero que el editor principal de WordPress aparezca debajo de algunos de mis meta boxes (generados por Advanced Custom Fields).

Sé que existen las funciones add_meta_box() y remove_meta_box(), sin embargo sería genial si pudiera simplemente modificar la prioridad del meta box del editor sin tener que eliminarlo y volver a añadirlo.

¿Alguna idea?

0
Todas las respuestas a la pregunta 2
2

El editor está integrado directamente en el formulario. No se inserta mediante add_meta_box.

Existe un hook llamado edit_form_after_title que podrías utilizar.

Prueba de concepto:

// usar la acción para crear un espacio para tu 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');

// agregar un box en la ubicación recién creada
function test_box() {
    add_meta_box(
        'generic_box', // id, usado como atributo html id
        __( 'Título Genérico' ), // título del meta box
        'generic_cb', // función callback, muestra el contenido
        'post', // tipo de post o página. Esto se agrega solo a posts
        'pre_editor', // contexto, ubicación en la pantalla
        'low' // prioridad, dónde debe ubicarse en el contexto
    );
}
function generic_cb($post) {
  var_dump($post);
  echo 'contenido genérico';
}
add_action( 'add_meta_boxes', 'test_box' );
23 may 2013 19:06:07
Comentarios

Gracias @s_ha_dum, voy a echar un vistazo a esto y te contesto :-)

Ben Everard Ben Everard
24 may 2013 10:33:36

esto funcionaría perfectamente si estuviera usando mis propios meta boxes personalizados, sin embargo estoy usando Advanced Custom Fields, que no tiene una opción para colocar el cuadro del editor en otro lugar. Estoy a punto de publicar mi propia respuesta a esta pregunta, tu respuesta me ayudó a llegar hasta aquí :-)

Ben Everard Ben Everard
28 may 2013 15:57:17
4

Para responder a mi propia pregunta, primero explicaré por qué la respuesta de @s_ha_dum no funciona para mí.

Estoy usando Advanced Custom Fields para agregar los meta boxes adicionales, los que necesito que aparezcan encima del editor de WordPress.

@s_ha_dum señaló que el editor de WordPress está codificado de forma rígida dentro de la plantilla, pero noté que se puede desactivar eliminando el soporte para el editor. Con esto en mente, he desactivado el soporte para el editor y luego agregué el código del editor en un nuevo meta box.

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',
            'Editor Movido',
            'moved_editor_custom_box',
            $screen
        );

    }

});

function moved_editor_custom_box( $post ) {

    // Usar nonce para verificación
    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( __( 'Recuento de palabras: %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(__('Última edición por %1$s el %2$s a las %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(__('Última edición el %1$s a las %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>

    <?
}
28 may 2013 16:04:00
Comentarios

Observaría esto cuidadosamente. Puede haber otras consecuencias al eliminar el soporte del editor. Nunca he intentado eliminarlo y luego usarlo en otro cuadro.

s_ha_dum s_ha_dum
28 may 2013 16:05:39

Sí, esto era una preocupación que intentaba evitar desde el principio, sin embargo, parece que aún guarda y muestra el contenido... no estoy seguro de qué más podría causar problemas.

Ben Everard Ben Everard
28 may 2013 16:07:22

"...qué más podría causar problemas..." -- Tampoco estoy seguro, pero es posible que pueda causar un problema en algún lugar. Tendría que profundizar mucho en el Core y ver qué efectos tiene esa configuración. Una advertencia, eso es todo.

s_ha_dum s_ha_dum
28 may 2013 16:15:37

Podría hacer eso... no quiero que esto se arruine. Muchas gracias, muy útil :-)

Ben Everard Ben Everard
28 may 2013 16:26:35