Modifica della priorità dell'editor principale

23 mag 2013, 18:45:27
Visualizzazioni: 1.48K
Voti: 2

Voglio che l'editor principale degli articoli di WordPress appaia sotto alcuni dei miei metabox (generati da Advanced Custom Fields).

So che esistono le funzioni add_meta_box() e remove_meta_box(), ma sarebbe davvero fantastico se potessi semplicemente modificare la priorità del metabox dell'editor senza doverlo rimuovere e aggiungere nuovamente.

Qualche idea?

0
Tutte le risposte alla domanda 2
2

L'editor è integrato direttamente nel form. Non viene inserito tramite add_meta_box.

Esiste però un hook chiamato edit_form_after_title che puoi utilizzare.

Dimostrazione concettuale:

// utilizza l'azione per creare uno spazio per la tua 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');

// aggiungi una box nella posizione appena creata
function test_box() {
    add_meta_box(
        'generic_box', // id, usato come attributo html id
        __( 'Titolo Generico' ), // titolo della meta box
        'generic_cb', // funzione di callback, genera il contenuto
        'post', // post type o page. Questo si aggiunge solo ai post
        'pre_editor', // contesto, posizione nello schermo
        'low' // priorità, dove posizionarlo nel contesto
    );
}
function generic_cb($post) {
  var_dump($post);
  echo 'contenuto generico';
}
add_action( 'add_meta_boxes', 'test_box' );
23 mag 2013 19:06:07
Commenti

Grazie @s_ha_dum, darò un'occhiata a questo e ti farò sapere :-)

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

quindi questo funzionerebbe perfettamente se stessi usando i miei meta box personalizzati, tuttavia sto usando Advanced Custom Fields, che non ha un'opzione per posizionare la casella dell'editor altrove. Sto per pubblicare la mia risposta a questa domanda, la tua risposta mi ha aiutato ad arrivarci :-)

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

Per rispondere alla mia domanda, inizierò spiegando perché la risposta di @s_ha_dum non funziona nel mio caso.

Sto utilizzando Advanced Custom Fields per aggiungere meta box aggiuntivi, quelli che ho bisogno appaiano sopra l'editor di WordPress.

@s_ha_dum ha fatto notare che l'editor di WordPress è hardcoded all'interno del template, ma ho osservato che può essere disabilitato rimuovendo il supporto per l'editor. Con questo in mente ho disabilitato il supporto per l'editor, poi ho aggiunto il codice per l'editor in un nuovo meta box.

Et voila:

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', // ID del meta box
            'Editor Spostato', // Titolo del meta box
            'moved_editor_custom_box', // Funzione callback
            $screen // Post type
        );

    }

});

function moved_editor_custom_box( $post ) {

    // Usa nonce per la verifica
    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( __( 'Conteggio parole: %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(__('Ultima modifica da %1$s il %2$s alle %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(__('Ultima modifica il %1$s alle %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 mag 2013 16:04:00
Commenti

Lo guarderei con attenzione. Potrebbero esserci altre conseguenze dalla rimozione del supporto all'editor. Non ho mai provato a rimuoverlo e poi usarlo in un altro box.

s_ha_dum s_ha_dum
28 mag 2013 16:05:39

Sì, questa era una preoccupazione che cercavo di evitare fin dall'inizio, tuttavia sembra ancora salvare e produrre il contenuto... non sono sicuro di cos'altro potrebbe causare problemi.

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

"...cos'altro potrebbe causare problemi..." -- Non sono sicuro neanche io, ma è possibile che possa causare un problema da qualche parte. Dovrei davvero approfondire il Core e vedere cosa influenza quell'impostazione. Una storia di cautela, tutto qui.

s_ha_dum s_ha_dum
28 mag 2013 16:15:37

Potrei farlo... non voglio che questo crei problemi. Molte grazie, molto utile :-)

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