web-dev-qa-db-ja.com

メインエディタの優先順位を変更する

メインのWordPress投稿エディタを私のいくつかのメタボックスの下に表示したい(Advanced Custom Fieldsによって生成された)。

私はadd_meta_box()remove_meta_box()関数があることを知っています、しかしそれを削除して追加し直す必要なしにエディタメタボックスの優先順位を変更することができればそれは本当に素晴らしいでしょう。

何か案は?

1
Ben Everard

私自身の質問に答えるために、まず@ 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">&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(__('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>

    <?
}
1
Ben Everard

エディタはの形式にハードコードされています。 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' );
4
s_ha_dum