Изменение приоритета главного редактора

23 мая 2013 г., 18:45:27
Просмотры: 1.48K
Голосов: 2

Я хочу, чтобы основной редактор записей WordPress отображался ниже некоторых моих метабоксов (созданных с помощью Advanced Custom Fields).

Я знаю о функциях add_meta_box() и remove_meta_box(), однако было бы здорово, если бы я мог просто изменить приоритет метабокса редактора без необходимости удалять и добавлять его снова.

Есть идеи?

0
Все ответы на вопрос 2
2

Редактор жёстко встроен в форму. Он не добавляется через add_meta_box.

Однако есть хук edit_form_after_title, который можно использовать для решения этой задачи.

Доказательство концепции:

// используем действие для создания места под метабокс
function add_before_editor($post) {
  global $post;
  do_meta_boxes('post', 'pre_editor', $post);
}
add_action('edit_form_after_title','add_before_editor');

// добавляем метабокс в созданное место
function test_box() {
    add_meta_box(
        'generic_box', // id, используется как html атрибут id
        __( 'Общий заголовок' ), // заголовок метабокса
        'generic_cb', // callback функция, выводит содержимое
        'post', // тип записи. Добавляется только к постам
        'pre_editor', // контекст, место на экране
        'low' // приоритет, расположение в контексте
    );
}
function generic_cb($post) {
  var_dump($post);
  echo 'общее содержимое';
}
add_action( 'add_meta_boxes', 'test_box' );
23 мая 2013 г. 19:06:07
Комментарии

Спасибо @s_ha_dum, я посмотрю на это и дам вам знать :-)

Ben Everard Ben Everard
24 мая 2013 г. 10:33:36

это бы идеально работало, если бы я использовал свои собственные метабоксы, однако я использую Advanced Custom Fields, у которого нет возможности переместить редактор в другое место. Я собираюсь опубликовать собственный ответ на этот вопрос, ваш ответ помог мне прийти к решению :-)

Ben Everard Ben Everard
28 мая 2013 г. 15:57:17
4

Чтобы ответить на свой собственный вопрос, сначала объясню, почему ответ @s_ha_dum не сработал в моем случае.

Я использую Advanced Custom Fields для добавления дополнительных метабоксов, которые мне нужно разместить над редактором WordPress.

@s_ha_dum отметил, что редактор WordPress жестко встроен в шаблон, но я заметил, что его можно отключить, удалив поддержку редактора. С учетом этого я отключил поддержку редактора, а затем добавил код редактора в новый метабокс.

И вуаля:

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_custom_box', // Функция обратного вызова
            $screen // Тип записи
        );

    }

});

function moved_editor_custom_box( $post ) {

    // Используем nonce для проверки безопасности
    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( __( 'Количество слов: %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(__('Последнее редактирование: %1$s, %2$s в %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(__('Последнее редактирование: %1$s в %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>

    <?php
}
28 мая 2013 г. 16:04:00
Комментарии

Я бы внимательно за этим следил. Удаление поддержки редактора может иметь и другие последствия. Я никогда не пробовал удалить его, а затем использовать в другом блоке.

s_ha_dum s_ha_dum
28 мая 2013 г. 16:05:39

Да, это было опасение, которое я изначально пытался обойти, однако контент все равно сохраняется и выводится... не уверен, с чем еще это может вызвать проблемы.

Ben Everard Ben Everard
28 мая 2013 г. 16:07:22

"...с чем еще это может вызвать проблемы..." — Я тоже не уверен, но возможно, что это может вызвать проблемы где-то еще. Придется глубоко копнуть в ядро и посмотреть, на что влияет эта настройка. Просто предостережение, вот и все.

s_ha_dum s_ha_dum
28 мая 2013 г. 16:15:37

Возможно, я так и сделаю... не хочу, чтобы это все испортилось. Большое спасибо, очень помогли :-)

Ben Everard Ben Everard
28 мая 2013 г. 16:26:35