wp_nav_menu внутри объекта – как я могу справиться с fallback_cb?

Я пытаюсь создать класс, который позволяет мне создавать меню навигации. Вот упрощенная версия того, что я использую:

class PJ_Menu { function make_menu() { $args = array( 'theme_location' => 'location', 'fallback_cb' => array( $this, 'pj_page_menu' ), ); wp_nav_menu( $args ); } function pj_page_menu() { // a bunch of code here } } new PJ_Menu(); 

Кажется, я не могу понять, что мне нужно в параметре fallback_cb . array( $this, 'pj_page_menu' ); не работает, и не было 'self::pj_page_menu' . Я пропустил что-то очевидное или это невозможно сделать?

Solutions Collecting From Web of "wp_nav_menu внутри объекта – как я могу справиться с fallback_cb?"

Аргумент fallback_cb используется, когда меню не существует – то есть, когда нет меню с правильным именем. Я не буду использовать иначе. Проверьте код . По умолчанию резервным является wp_page_menu .

Ваш код подходит мне для использования метода класса в качестве обратного вызова, но я подозреваю, что то, что вы действительно хотите, это аргумент walker , а не fallback_cb . Аргумент walker будет использоваться в любое время, когда ваше меню будет создано, а не только как резерв, если что-то пойдет не так.

wp_nav_menu вызывает wp_nav_menu PHP на fallback_cb . Чтобы передать метод класса в качестве этого аргумента, метод должен быть статическим, и вам нужно передать имя класса и метода.

 static function pj_page_menu() { // a bunch of code here } 

Из документации PHP is_callable fallback_cb должен быть в форме:

 'fallback_cb' => array('PJ_Menu', 'pj_page_menu') 

или для PHP> = 5.2.3

 `fallback_cb` => 'PJ_Menu::pj_page_menu'