Intereting Posts

Как фильтровать customize_loaded_components из темы?

Я написал тему 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 :

customize_loaded_components

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

Какие-либо предложения?

Solutions Collecting From Web of "Как фильтровать 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';

Может быть метод эффективного удаления панели виджетов без предупреждения о печати. Но для общего публичного использования просто кажется, что это не лучшая практика для удаления любого из этих основных компонентов из темы.