Ошибки возврата get_terms

Привет, когда я пытаюсь get_terms(); в настройках темы через этот код

 $catalogs_terms = get_terms( 'catalogs' ); $mycatalogs = array( -1 => 'Select a catalog' ); if ( $catalogs_terms ) { foreach ( $catalogs_terms as $catalog_term ) { $mycatalogs[$catalog_term->term_id] = $catalog_term->name; } } 

return empty, но этот код работает нормально везде, где на страницах и т. д., когда я пытаюсь print_r( $catalogs_terms ) вывод, я получаю ошибки

 Array ( [errors] => Array ( [invalid_taxonomy] => Array ( [0] => Invalid Taxonomy ) ) [error_data] => Array ( ) ) 

я не понимаю, где я ошибаюсь? моя функция для таксономии регистра

  add_action( 'init', 'my_taxonomies', 0 ); function my_taxonomies() { // Add new taxonomy, make it hierarchical (like categories) $labels = array( 'name' => _x( 'Catalogs', 'taxonomy general name' ), 'singular_name' => _x( 'Catalog', 'taxonomy singular name' ), 'search_items' => __( 'Search Catalogs', 'mytextdomain' ), 'all_items' => __( 'All Catalogs', 'mytextdomain' ), 'parent_item' => __( 'Parent Catalog', 'mytextdomain' ), 'parent_item_colon' => __( 'Parent Catalog:', 'mytextdomain' ), 'edit_item' => __( 'Edit Catalog', 'mytextdomain' ), 'update_item' => __( 'Update Catalog', 'mytextdomain' ), 'add_new_item' => __( 'Add New Catalog', 'mytextdomain' ), 'new_item_name' => __( 'New Catalog Name', 'mytextdomain' ), 'menu_name' => __( 'Catalogs', 'mytextdomain' ), ); // register catalogs hierarchical (like categories) register_taxonomy( 'catalogs', array( 'news' ), array( 'hierarchical' => true, 'labels' => $labels, 'show_ui' => true, 'public' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'catalogs' ) ) ); } 

Как я уже упоминал ранее, это случай, когда ваш выбор происходит до регистрации таксономии.

Действие init происходит после того, как файл функций темы включен, поэтому, если вы ищете условия непосредственно в файле функций, вы делаете это до того, как они действительно были зарегистрированы.

Вот часть кода из wp-settings.php которая включает функции темы и выполняет действие init .

 // Load the functions for the active theme, for both parent and child theme if applicable. if ( TEMPLATEPATH !== STYLESHEETPATH && file_exists( STYLESHEETPATH . '/functions.php' ) ) include( STYLESHEETPATH . '/functions.php' ); if ( file_exists( TEMPLATEPATH . '/functions.php' ) ) include( TEMPLATEPATH . '/functions.php' ); do_action( 'after_setup_theme' ); // Load any template functions the theme supports. require_if_theme_supports( 'post-thumbnails', ABSPATH . WPINC . '/post-thumbnail-template.php' ); register_shutdown_function( 'shutdown_action_hook' ); // Set up current user. $wp->init(); /** * Most of WP is loaded at this stage, and the user is authenticated. WP continues * to load on the init hook that follows (eg widgets), and many plugins instantiate * themselves on it for all sorts of reasons (eg they need a user, a taxonomy, etc.). * * If you wish to plug an action once WP is loaded, use the wp_loaded hook below. */ do_action( 'init' ); 

Поскольку вы можете видеть, что действие init не срабатывает до тех пор, пока не будет включен файл функций темы, следовательно, после вызова инициализация должна начинаться с любого поиска. Я больше не могу вам советовать, потому что вы только показали мне часть своего кода, поэтому я не очень понимаю идею контекста, в котором вы пытаетесь использовать функцию term, но она, безусловно, может 't вызывается непосредственно в файле функций (вне обратного вызова, подключенного к определенному действию / фильтру, потому что код скоро будет запущен).

Надеюсь, что вышеописанная проблема достаточно для вас .. 🙂

Дополнительное примечание:
В этой функции отсутствует переменная из глобального оператора (вы увидите уведомления PHP, если вы включили отладку).

 function news_updated_messages( $messages ) { global $post; 

Это должно читать ..

 function news_updated_messages( $messages ) { global $post, $post_ID; 

.. потому что код внутри этой функции ссылается на var, но переменная не имеет видимости внутри функции, мое предложенное выше изменение исправит это.

Последующее наблюдение № 1

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

 add_action('admin_menu', 'my_theme_menu'); function my_theme_menu() { add_theme_page( 'Theme Settings', 'Theme Settings', 'manage_options', 'my-unique-identifier', 'my_theme_settings' ); } function my_theme_settings() { // Code to display/handle theme options would be here // You get_terms() call should work inside this function just fine } 

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

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

 function custom_get_terms($term) { global $wpdb; $out = array(); $a = $wpdb->get_results($wpdb->prepare("SELECT t.name,t.slug,t.term_group,x.term_taxonomy_id,x.term_id,x.taxonomy,x.description,x.parent,x.count FROM {$wpdb->prefix}term_taxonomy x LEFT JOIN {$wpdb->prefix}terms t ON (t.term_id = x.term_id) WHERE x.taxonomy=%s;",$term)); foreach ($a as $b) { $obj = new stdClass(); $obj->term_id = $b->term_id; $obj->name = $b->name; $obj->slug = $b->slug; $obj->term_group = $b->term_group; $obj->term_taxonomy_id = $b->term_taxonomy_id; $obj->taxonomy = $b->taxonomy; $obj->description = $b->description; $obj->parent = $b->parent; $obj->count = $b->count; $out[] = $obj; } return $out; }