Как изменить положение по умолчанию мета-блоков WP?

17

Мне интересно, есть ли способ изменить положение мета-блоков Wordpresses по умолчанию, таких как «избранные изображения» для пользовательских типов записей, не перетаскивая их вручную?

Пример: Пример размещения мета-бокса

Мистер Браун
источник
Вы можете изменить порядок по умолчанию: wordpress.stackexchange.com/questions/41501/...

Ответы:

22

Вы можете удалить мета-блоки по умолчанию с помощью remove_meta_box и повторно добавить их в другую позицию с помощью add_meta_box:

add_action('do_meta_boxes', 'wpse33063_move_meta_box');

function wpse33063_move_meta_box(){
    remove_meta_box( 'postimagediv', 'post', 'side' );
    add_meta_box('postimagediv', __('Featured Image'), 'post_thumbnail_meta_box', 'post', 'normal', 'high');
}

Это удалит его из бокового столбца и добавит его в основной столбец. postв этом примере измените на любой другой тип вашего поста.

Milo
источник
Это кажется идеальным, спасибо еще раз, Мило, я попробую.
Мр. Браун
@Milo: Как будто мне add_meta_box()нужно $callbackимя функции, откуда я знаю имя функции, используемой WordPress? Предположим, я хочу сделать то же самое для боковой панели meta_box 'Categories' (#categorydiv)?
Mayeenul Islam
5
@MayeenulIslam загляните в файл, /wp-admin/edit-form-advanced.phpи вы увидите, куда WordPress добавляет все основные мета-блоки, а также используемые им обратные вызовы и аргументы. для категорий это так post_categories_meta_box.
Майло
5

Я тоже боролся с этим. Я действительно не нашел чистого способа переопределить макет / порядок - особенно потому, что пользователи могут изменить его, когда / если они перетаскивают поля.

Мне нравится делать вещи «с» WordPress (это обычно окупается), чем сталкиваются с этим и как WordPress делает это следующим образом:

WordPress сохраняет перетаскиваемые позиции для каждого пользователя на экране, и есть целый набор пользовательских мета-ключей, которые он использует в зависимости от того, на какой странице / экране он находится.

Таким образом, вы можете добавить действие или фильтр для каждого нового пользователя, чтобы установить настройки пользователя так, как вы хотите, чтобы по умолчанию.
1) Перетащите и упорядочите страницу, на которую вы хотите повлиять, затем 2) посмотрите в phpmyadmin вашу мета пользователя для вашего идентификатора и посмотрите, что там сохранил wp. 3) затем закодируйте новое действие пользователя следующим образом, если у пользователя НЕ установлена ​​эта настройка (чтобы не перезаписывать личный выбор), вы можете установить ее так, как хотите - со значением, которое вы нашли при ручной настройке.

Чтобы получить представление о мета-ключах мета-пользователя, которые вы ищете, см. Эти скриншоты: http://wpusersplugin.com/related-plugins/amr-user-templates/screenshots-for-user-templates/

(В итоге я написал общий плагин, чтобы администратор мог определить предпочтительный макет для всех пользователей для всех видов страниц / экранов. Затем они могли изменить это, например, по мере того, как стали более опытными. Также он не сломается при изменении wp Плагин вещей как я просто выбирает пользовательские значения шаблона, он даже не пытается установить значение в жестко заданное значение.)

anmari
источник
1
Хотя мне нравится идея этого подхода, решение Майло кажется намного более быстрым, поэтому я собираюсь дать ему шанс, но спасибо, что нашли время и проинформировать меня об этом подходе. Я определю, как использовать этот способ позже. Я добавил ваш комментарий.
Мр. Браун
3
Плагин, предложенный Anmari, является платным коммерческим плагином ... и не выглядит обновленным с августа прошлого года. Вы все еще поддерживаете этот плагин? Если нет, вы поделились этим с Github?
unfulvio
Спасибо @anmari за то, что поделились этим подходом, очень полезно.
Маор Баразаны
0

Если вы хотите точно заказать ваши мета-блоки, вы можете использовать этот плагин: https://wordpress.org/plugins/post-meta-box-order/

Он играет на мета-поле-порядок_пост пользовательской опции (таблица wp_usermeta).

Примечание 1: этот метод можно применить к любому пользовательскому CPT, изменив конец флага: meta-box-order_ [YOUR_CPT]

Примечание 2: не забудьте изменить хэш в коде плагина, чтобы применить ваш новый порядок ко всем существующим пользователям.

rebe100x
источник