Почему моя рабочая Custom Taxonomy отсутствует в массиве get_taxonomies?

22 сент. 2011 г., 06:31:06
Просмотры: 28.1K
Голосов: 7

Я создал пользовательскую таксономию. Она работает как ожидалось, за исключением того, что она не отображается в массиве get_taxonomies. Функция get_terms возвращает ошибку invalid taxonomy.

Я хочу использовать get_terms для перебора Double India Pale Ales и вывода каждого названия в выпадающий список.

Вот код, используемый для регистрации:

add_action( 'init', 'double_ipa_init' );

function double_ipa_init()  {
    register_taxonomy(
        'double-ipa',
        array (
            0 => 'post',
            1 => 'page',
        ),
        array(
            'hierarchical' => true,
            'label' => 'Double IPAs',
            'show_ui' => true,
            'query_var' => true,
            'rewrite' => array(
                'slug' => 'double-ipa'
            ),
        'singular_label' => 'Double IPA'
        )
    );
}

Этот код находится в плагине и работает на Multisite.

Заранее спасибо за помощь.

1
Комментарии

опубликуйте ваш код для get_taxonomies и get_terms. Также попробуйте установить аргумент public в значение true.

Assad Nazar Assad Nazar
22 сент. 2011 г. 10:17:07
Все ответы на вопрос 3
5
14

Ошибка Invalid Taxonomy возникает в функции get_terms(). Вы регистрируете свою таксономию на хуке init. Следовательно, вам нужно вызывать функцию get_terms() на том же или более позднем хуке.

Попробуйте этот сниппет. Он должен отображать все названия терминов вашей таксономии, даже если термин пустой.

add_action('init', 'wpse29164_registerTaxonomy');
function wpse29164_registerTaxonomy() {
    $args = array(
        'hierarchical' => true,
        'label' => 'Double IPAs',
        'show_ui' => true,
        'query_var' => true,
        'rewrite' => array(
            'slug' => 'double-ipa'
        ),
        'singular_label' => 'Double IPA'
    );

    register_taxonomy('double-ipa', array('post', 'page'), $args);

    $terms = get_terms('double-ipa', array('hide_empty' => false));
    foreach ($terms as $term) {
        echo $term->name;
    }
}
22 сент. 2011 г. 10:45:28
Комментарии

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

Jeff Sebring Jeff Sebring
22 сент. 2011 г. 18:44:42

Удаление обертки приводит к этой ошибке - Fatal error: Call to a member function add_rewrite_tag() on a non-object

Jeff Sebring Jeff Sebring
22 сент. 2011 г. 19:27:34

Проблема, с которой я столкнулся, связана с порядком выполнения кода, который строит страницы, по сравнению с таксономиями. Решение будет заключаться в поиске креативного способа перераспределения памяти между моими функциями.

Jeff Sebring Jeff Sebring
22 сент. 2011 г. 20:14:13

@Jeff Приведённый выше код также должен быть обёрнут в функцию и вызываться через хук init. Извините за путаницу.

Roman Roman
22 сент. 2011 г. 20:15:45

Да, я на самом деле никогда не пробовал регистрировать из plugins_loaded. Проблема была в том, где я запускал код страницы настроек. Спасибо за помощь.

Jeff Sebring Jeff Sebring
23 сент. 2011 г. 19:38:17
0

Вы пытаетесь использовать get_terms() до хука действия 'Init'.

Вот порядок выполнения хуков в типичном запросе:

muplugins_loaded
registered_taxonomy
registered_post_type
plugins_loaded
sanitize_comment_cookies
setup_theme
load_textdomain
after_setup_theme
auth_cookie_malformed
auth_cookie_valid
set_current_user
**init**
widgets_init
register_sidebar
wp_register_sidebar_widget
wp_default_scripts
wp_default_stypes
admin_bar_init
add_admin_bar_menus
wp_loaded
parse_request
send_headers
parse_query
pre_get_posts
posts_selection
wp
template_redirect
get_header
wp_head
wp_enqueue_scripts
wp_print_styles
wp_print_scripts
25 янв. 2013 г. 10:39:08
0

Я сталкивался с такой же проблемой ранее, но использование WP_Term_Query помогло мне получить нужные данные. Попробуйте этот метод, он должен сработать. Подробнее здесь: https://developer.wordpress.org/reference/classes/WP_Term_Query/__construct/

27 февр. 2019 г. 16:48:21