¿Por qué mi Taxonomía Personalizada funcional no aparece en el array get_taxonomies?
He creado una taxonomía personalizada. Funciona como se espera, excepto que no aparece en el array get_taxonomies
. La función get_terms
devuelve un error de taxonomía inválida
.
Quiero usar get_terms
para recorrer las Double India Pale Ales e imprimir cada nombre en un cuadro de selección.
Aquí está el código utilizado para 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'
)
);
}
Este código está en un plugin y está en Multisite.
Gracias de antemano por tu ayuda.

El error Invalid Taxonomy
será generado por la función get_terms()
. Estás registrando tu taxonomía en el hook de acción init
. Por lo tanto, debes llamar a tu función get_terms()
en el mismo hook o en uno posterior.
Prueba este fragmento de código. Debería mostrar todos los nombres de los términos de tu taxonomía, independientemente de si el término está vacío o no.
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;
}
}

Si entiendo correctamente, estás sugiriendo que elimine el envoltorio de la función y lo ejecute directamente desde el plugin. Voy a intentar esto.

Al eliminar el envoltorio obtengo este error - Fatal error: Call to a member function add_rewrite_tag() on a non-object

El problema que tengo es con el orden en el que estoy ejecutando el código que construye las páginas versus las taxonomías. La solución estará en encontrar una forma creativa de reorganizar la memoria hacia mis funciones.

@Jeff El código anterior también debe envolverse dentro de una función y llamarse en el gancho de acción init. Disculpa por la confusión.

Estás intentando usar get_terms() antes del hook de acción 'Init'.
Este es el orden en que se ejecutan los hooks en una petición típica:
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

Tuve el mismo problema antes, pero usar WP_Term_Query me ayudó a recuperar lo que necesitaba. Pruébalo, debería funcionar. Más detalles aquí: https://developer.wordpress.org/reference/classes/WP_Term_Query/__construct/
