Я написал тему WordPress, которая много использует интерфейс. Я хотел бы отменить регистрацию панели виджетов (у меня есть причины). В настоящее время я делаю это:
/** * Our class for altering the WP theme customizer. */ class LXB_AF_Customize { public function __construct() { [...] add_action( 'customize_register', array( $this, 'remove_items' ), 980 ); [...] } [...] // We're gonna output widgets elsewhere, so we don't need the core widgets panel. function remove_items( $wp_customize ) { [...] @$wp_customize -> remove_panel( 'widgets' ); } }
Который создается в глобальном масштабе через:
/** * Setup the Theme Customizer settings and controls. */ function lxb_af_customizer_init() { new LXB_AF_Customize(); } add_action( 'init' , 'lxb_af_customizer_init' );
Это вызывает ошибку do_it_wrong от ядра, здесь: https://github.com/WordPress/WordPress/blob/master/wp-includes/class-wp-customize-manager.php#L1212
Это сообщение предполагает, что вместо этого я использую customize_loaded_components
:
Однако, как отмечено на этой странице docs, customize_loaded_components
, похоже, не работают при вызове из темы. Я могу заставить его работать только с плагином. В моей ситуации я не хочу, чтобы какой-либо конкретный плагин был активным, чтобы использовать мою тему.
Какие-либо предложения?
Начиная с WordPress 4.5 появляется новое предупреждение об использовании remove_panel
с основными компонентами (в настоящий момент 'nav_menus'
и 'widgets'
).
Предупреждение гласит:
Удаление WP_Customize_Manager :: remove_panel вручную вызовет предупреждения PHP. Вместо этого используйте фильтр customize_loaded_components.
По-видимому, это было добавлено из-за некоторых ошибок php и javascript, которые, по-видимому, возникали в версиях WordPress от 4.0 до 4.5, когда плагины и / или темы предоставляли противоречивые заказы, например, пытались изменить панель виджета за другим, удалили ее раньше.
Однако предупреждение не относится к темам, так как перед ними запускается customize_loaded_components
. Таким образом, этот крюк, вызванный из темы, просто не будет иметь место в нужный момент очереди обработки и не будет иметь никакого эффекта.
Для 'nav_menus'
есть это обходное решение, которое, похоже, не работает для виджетов:
$wp_customize->get_panel( 'nav_menus' )->active_callback = '__return_false';
Может быть метод эффективного удаления панели виджетов без предупреждения о печати. Но для общего публичного использования просто кажется, что это не лучшая практика для удаления любого из этих основных компонентов из темы.