メインのWordPress投稿エディタを私のいくつかのメタボックスの下に表示したい(Advanced Custom Fieldsによって生成された)。
私はadd_meta_box()
とremove_meta_box()
関数があることを知っています、しかしそれを削除して追加し直す必要なしにエディタメタボックスの優先順位を変更することができればそれは本当に素晴らしいでしょう。
何か案は?
私自身の質問に答えるために、まず@ s_ha_dumの答えが私にはうまくいかない理由を説明します。
私はWordPressエディタの上に表示する必要がある追加のメタボックスを追加するためにAdvanced Custom Fieldsを使用しています。
@s_ha_dumは、WordPressエディタはテンプレート内に ハードコードされている と指摘しましたが、エディタのサポートを削除することで無効にできることに気付きました。これを念頭に置いて、私はエディタのサポートを無効にしてから、新しいメタボックスにエディタのコードを追加しました。
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',
'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>
<?
}
エディタはの形式にハードコードされています。 add_meta_box
では挿入されません。
edit_form_after_title
というフックがありますが、それを使うことができるはずです。
// 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' );