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?
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"> </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>
<?
}
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.
// 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' );