WordPress как на ладони

Таксономии (доступность) (зона видимости)

Добрый день! (Можете подсказать пожалуйста). Почему данный код не работает например в functions.php, а в шаблонах работает.

$categories = get_terms( array( 'taxonomy' => 'portfolio-category','hide_empty' => 0, 'orderby' => 'ASC',  'parent' =>0) );

А работает только вот так

add_filter('init', 'my_get_woo_cats');

function my_get_woo_cats() {
  $categories = get_terms( array( 'taxonomy' => 'portfolio-category','hide_empty' => 0, 'orderby' => 'ASC',  'parent' =>0) );
  if($categories) {
	  foreach($categories as $cat) {

	  }
  }
}

Мне нужно передать в массив в add_options в carbon fields и поэтому второй вариант не подходит!

0
Саидгость
2.1 год назад
  • 1
    campusboy4750 www.youtube.com/c/wpplus

    У меня была такая же ситуация, Тимур всё правильно написал. Ты запрашиваешь то, что ещё на момент регистрации полей не зарегистрировано. Выход есть, я задавал вопрос разрабам и они отвечали в issue, то есть тебе надо такой пример под себя доработать:

    function my_options_function() {
    	$post_types = get_post_types( ... );
    	// filter $post_types array so it becomes a simple key=>value array of options
    	// e.g. array( 'post' => 'Post', 'page' => 'Page')
    	return array( ... );
    }
    
    Field::make( 'set', 'crb_product_features', 'Features' )
    	->add_options( 'my_options_function' )

    Суть кода в том, что поле заполняется ключами только на момент его отрисовки в админки (выполняется функция my_options_function()), что достаточно поздно (на этом моменте уже всё доступно, что нужно), а не на момент регистрации поля, как раньше, что достаточно рано (на этом момент почти ничего не доступно).

    Саид гость 2.1 год назад

    Спасибо, проверю.

    Саид гость 2.1 год назад

    Получилось!

    add_action('init', 'my_get_woo_cats', 99999);
    $cats[0] = 'Показать все!';
    function my_get_woo_cats() {
    	$categories = get_terms( array( 'taxonomy' => 'portfolio-category','hide_empty' => 0, 'orderby' => 'ASC',  'parent' =>0) );
    
    	if($categories) {
    	  foreach($categories as $cat) {
    		$cats[ $cat->term_id ] = $cat->name;
    	}
    
    	return $cats;
    }
    
    Container::make('term_meta', 'Настройки категории')
    	->show_on_taxonomy( 'service-category' )
    	  ->add_tab( 'Связи', array(
    		  Field::make( 'select', 'termcat_tab6_cat', 'Категория' )
    		  ->add_options('my_get_woo_cats')
    	  ) );
    campusboy 2.1 год назад

    Отлично, только почему $cats[0] вне функции? Это странно, советую прочесть Область видимости переменной.

    Саид гость 2.1 год назад

    Да, все верно. Забыл поместить внутрь! В крайнем случае, если бы не поместил внутрь, то просто первый индекс был бы не доступен. Это текст показать все. А так ничего страшного. Но согласен лучше поместить во внутрь.

    Комментировать
  • 0
    Kama9616

    Скорее всего потому что на момент вызова хука, таксономия portfolio-category еще не зарегистрирована.

    Запускай add_options в carbon fields попозже, например так же на хуке init.

    Саидгость 2.1 год назад

    Мне нужно было, просто получить все категории таксономии, и передать их вот так
    ->add_options($cats)

    через хук если сделать работает только внутри этой функции! Что только не пробовал.

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация