Modifica della priorità dell'editor principale
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?
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' );

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 :-)

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"> </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>
<?
}

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ì, 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.

"...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.
