Taxonomías de WordPress: términos, padres, hijos
La creación programática de taxonomías parece ser un punto que surge de vez en cuando para aquellos que están creando soluciones para otros en WordPress.
Las taxonomías en sí mismas pueden incluso ser un poco confusas; sin embargo, descubrí que lo siguiente generalmente ayuda a solidificar un poco el concepto:
Las taxonomías jerárquicas son análogas a las categorías; las taxonomías no jerárquicas son análogas a las etiquetas.
Pero aún así, supongamos que está creando una solución para alguien que necesita importar información como una publicación y aplicarle una taxonomía. Además, tal vez también desee aplicar una taxonomía principal a la publicación.
¿Cómo podemos hacer eso?
Taxonomías de WordPress: registro, padres, hijos y más
La situación es algo así:
Tiene una publicación a la que se le aplicará una taxonomía. Si la taxonomía tiene un padre, también queremos aplicarlo a la publicación.
Para hacer esto, necesitaremos cuatro (quizás cinco) funciones:
También agregaré que creo que es una buena idea usar sanitize_title_with_dashes si va a usar algún tipo de cadena entrante sin desinfectar para el slug del tipo de publicación (pero no es necesario si no es así, por supuesto ).
1 Registrar la Taxonomía
Para este ejemplo, vamos a crear una taxonomía para un tipo de publicación personalizada.
Dado que esto podría ser cualquier cosa en la que esté trabajando, usaré una variable llamada $postType para demostrar el punto.
<?php
register_taxonomy(
'acme-category',
$postType,
[
'label' => 'Acme Categories',
'rewrite' => ['slug' => 'acme-category'],
'capabilities' => [
'manage_terms' => 'manage_options',
'edit_terms' => 'manage_options',
'delete_terms' => 'manage_options',
'assign_terms' => 'manage_options',
],
'hierarchical' => true,
]
);
Es bastante sencillo, pero toma nota de la referencia del código :
Una función simple para crear o modificar un objeto de taxonomía basado en los parámetros dados. Si modifica un objeto de taxonomía existente, tenga en cuenta que
$object_typese sobrescribirá el valor del registro original.
Generalmente, esto no es un problema, pero si está trabajando en una aplicación grande o una aplicación preexistente, es algo a tener en cuenta.
2 Insertar un Término para la Taxonomía
A continuación, suponga que un $customPost está disponible para usted y tiene una función para recuperar su nombre, su título o alguna otra propiedad utilizada para identificarlo (que no sea su ID).
Esto podría pasarse a una función, o podría estar disponible mediante cualquier uso de otras funciones que proporciona WordPress. En este ejemplo, usaré una función getName() en el objeto $customPost .
<?php
$termInfo = wp_insert_term(
$customPost->getName(),
'acme-category',
['slug' => sanitize_title_with_dashes($customPost->getName())]
);
Tenga en cuenta que también estoy leyendo el resultado de la función en una variable $termInfo. Usaremos esto en el siguiente paso para buscar el padre si existe, y también lo aplicaremos a nuestro objeto de publicación personalizado.
3 Buscar el padre de un término
Aquí, usaremos el término que acabamos de crear para ver si existe un padre para él. Tenga en cuenta que si devuelve falso, entonces la taxonomía no existe (o si no se encuentra el término).
Con ese fin, querrá agregar un condicional a su código para crearlo, si es necesario. Sin embargo, para mantener el código conciso, lo omito en el siguiente código :
<?php
$parentTermInfo = get_term_by(
'term_taxonomy_id',
$termInfo['term_taxonomy_id'],
'acme-category',
ARRAY_A
);
Observe que almaceno el resultado del código anterior en una variable $parentTermInfo. Esto es para que podamos pasar esto a nuestra función final para aplicar la información principal a nuestro objeto de publicación.
4 Aplicar el término a una publicación
Finalmente, aplicaremos el término (o términos) si hay un objeto principal. Recuerde que aquí es donde se necesitará el condicional. En pocas palabras, si no hay padre, entonces el valor $parentTermInfo[‘parent’] no será necesario.
Pero para el código a continuación, asumimos que lo tenemos.
<?php
wp_set_object_terms(
$customPost->getId(),
[
$parentTermInfo['parent'],
$termInfo['term_id'],
],
'acme-category',
true
);
Desde la referencia del código, observe que esto creará el término si aún no existe; de lo contrario, usará lo que ya está definido y lo aplicará a la publicación.
Y hecho
En términos generales, no es tanto trabajo. Es útil asegurarse de tener una comprensión clara de cómo funcionan las taxonomías y sus términos. Además, también es útil saber cómo recuperar el padre de un término determinado si eso es lo que desea hacer (de lo contrario, el tercer paso no es necesario).
Pero, con suerte, los enlaces y el código anterior le brindan todo lo que necesita para crear una taxonomía y aplicarla a una publicación (así como un término principal, si es necesario).

