Perché la mia Tassonomia Personalizzata funzionante non è nell'array get_taxonomies?
Ho creato una tassonomia personalizzata. Funziona esattamente come previsto, tranne per il fatto che non appare nell'array get_taxonomies
. La funzione get_terms
restituisce un errore di invalid taxonomy
.
Voglio utilizzare get_terms
per scorrere le Double India Pale Ales e stampare ogni nome in una casella di selezione.
Ecco il codice utilizzato per registrarla.
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'
)
);
}
Questo codice si trova in un plugin ed è su Multisite.
Grazie in anticipo per il vostro aiuto.

L'errore Invalid Taxonomy
viene sollevato dalla funzione get_terms()
. Stai registrando la tua tassonomia sull'hook di azione init
. Pertanto, devi chiamare la tua funzione get_terms()
sullo stesso hook o su uno successivo.
Prova questo snippet. Dovrebbe visualizzare tutti i nomi dei termini della tua tassonomia, indipendentemente dal fatto che il termine sia vuoto.
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;
}
}

Se ho capito bene, mi stai suggerendo di eliminare il wrapper della funzione e di eseguirla direttamente dal plugin. Proverò a farlo.

Rimuovendo il wrapper ottengo questo errore - Fatal error: Call to a member function add_rewrite_tag() on a non-object

Il problema che sto riscontrando riguarda l'ordine in cui eseguo il codice che costruisce le pagine rispetto alle tassonomie. La soluzione consisterà nel trovare un modo creativo per riorganizzare la memoria nelle mie funzioni.

@Jeff Il codice sopra dovrebbe anche essere racchiuso all'interno di una funzione e chiamato sull'hook di azione init. Scusa per la confusione.

Stai cercando di utilizzare get_terms() prima dell'action hook 'Init'.
Ecco l'ordine degli hook eseguiti in una tipica richiesta:
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

Anch'io ho avuto lo stesso problema in precedenza, ma utilizzare WP_Term_Query mi ha aiutato a recuperare ciò di cui avevo bisogno. Provalo, dovrebbe funzionare. Maggiori dettagli qui: https://developer.wordpress.org/reference/classes/WP_Term_Query/__construct/
