{"id":231074,"date":"2022-12-21T12:17:00","date_gmt":"2022-12-21T09:17:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231074"},"modified":"2022-12-07T10:26:38","modified_gmt":"2022-12-07T07:26:38","slug":"taxonomias-de-wordpress-terminos-padres-hijos","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/taxonomias-de-wordpress-terminos-padres-hijos\/","title":{"rendered":"Taxonom\u00edas de WordPress: t\u00e9rminos, padres, hijos"},"content":{"rendered":"\n<p>La creaci\u00f3n program\u00e1tica de taxonom\u00edas parece ser un punto que surge de vez en cuando para aquellos que est\u00e1n creando soluciones para otros en WordPress.<\/p>\n<p>Las taxonom\u00edas en s\u00ed mismas pueden incluso ser un poco confusas; sin embargo, descubr\u00ed que lo siguiente generalmente ayuda a solidificar un poco el concepto:<\/p>\n<p>Las taxonom\u00edas jer\u00e1rquicas son an\u00e1logas a las categor\u00edas; las taxonom\u00edas no jer\u00e1rquicas son an\u00e1logas a las etiquetas.<\/p>\n<p>Pero a\u00fan as\u00ed, supongamos que est\u00e1 creando una soluci\u00f3n para alguien que necesita importar informaci\u00f3n como una publicaci\u00f3n y aplicarle una taxonom\u00eda. Adem\u00e1s, tal vez tambi\u00e9n desee aplicar una taxonom\u00eda principal a la publicaci\u00f3n.<\/p>\n<p>\u00bfC\u00f3mo podemos hacer eso?<\/p>\n<h2>Taxonom\u00edas de WordPress: registro, padres, hijos y m\u00e1s<\/h2>\n<p>La situaci\u00f3n es algo as\u00ed:<\/p>\n<p>Tiene una publicaci\u00f3n a la que se le aplicar\u00e1 una taxonom\u00eda. Si la taxonom\u00eda tiene un padre, tambi\u00e9n queremos aplicarlo a la publicaci\u00f3n.<\/p>\n<p>Para hacer esto, necesitaremos cuatro (quiz\u00e1s cinco) funciones:<\/p>\n<ol>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/register_taxonomy\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">registro_taxonom\u00eda<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/wp_insert_term\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_insertar_t\u00e9rmino<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/get_term_by\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">get_term_by<\/a><\/li>\n<li><a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/wp_set_object_terms\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_set_object_terms<\/a><\/li>\n<\/ol>\n<p>Tambi\u00e9n agregar\u00e9 que creo que es una buena idea usar <a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/sanitize_title_with_dashes\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sanitize_title_with_dashes<\/a> si va a usar alg\u00fan tipo de cadena entrante sin desinfectar para el slug del tipo de publicaci\u00f3n (pero no es necesario si no es as\u00ed, por supuesto ).<\/p>\n<h3>1 Registrar la Taxonom\u00eda<\/h3>\n<p>Para este ejemplo, vamos a crear una taxonom\u00eda para un tipo de publicaci\u00f3n personalizada.<\/p>\n<p>Dado que esto podr\u00eda ser cualquier cosa en la que est\u00e9 trabajando, usar\u00e9 una variable llamada <strong>$postType<\/strong> para demostrar <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a1d3464ee4f84864a002f5568586795f#file-00-register-taxonomy-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">el punto<\/a>.<\/p>\n<pre><code>&lt;?php\n\nregister_taxonomy(\n  'acme-category',\n  $postType,\n  [\n      'label' =&gt; 'Acme Categories',\n      'rewrite' =&gt; ['slug' =&gt; 'acme-category'],\n      'capabilities' =&gt; [\n          'manage_terms' =&gt; 'manage_options',\n          'edit_terms' =&gt; 'manage_options',\n          'delete_terms' =&gt; 'manage_options',\n          'assign_terms' =&gt; 'manage_options',\n      ],\n      'hierarchical' =&gt; true,\n  ]\n);<\/code><\/pre>\n<p>Es bastante sencillo, pero toma nota de <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/register_taxonomy\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la referencia del c\u00f3digo<\/a> :<\/p>\n<blockquote>\n<p>Una funci\u00f3n simple para crear o modificar un objeto de taxonom\u00eda basado en los par\u00e1metros dados. Si modifica un objeto de taxonom\u00eda existente, tenga en cuenta que <code>$object_type<\/code>se sobrescribir\u00e1 el valor del registro original.<\/p>\n<\/blockquote>\n<p>Generalmente, esto no es un problema, pero si est\u00e1 trabajando en una aplicaci\u00f3n grande o una aplicaci\u00f3n preexistente, es algo a tener en cuenta.<\/p>\n<h3>2 Insertar un T\u00e9rmino para la Taxonom\u00eda<\/h3>\n<p>A continuaci\u00f3n, suponga que un <strong>$customPost<\/strong> est\u00e1 disponible para usted y tiene una funci\u00f3n para recuperar su nombre, su t\u00edtulo o alguna otra propiedad utilizada para identificarlo (que no sea su ID).<\/p>\n<\/p>\n<p>Esto podr\u00eda pasarse a una funci\u00f3n, o podr\u00eda estar disponible mediante cualquier uso de otras funciones que proporciona WordPress. <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a1d3464ee4f84864a002f5568586795f#file-01-wp-insert-term-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">En este ejemplo<\/a>, usar\u00e9 una\u00a0 funci\u00f3n <strong>getName()<\/strong> en el objeto <strong>$customPost\u00a0<\/strong>.<\/p>\n<pre><code>&lt;?php\n\n$termInfo = wp_insert_term(\n  $customPost-&gt;getName(),\n  'acme-category',\n  ['slug' =&gt; sanitize_title_with_dashes($customPost-&gt;getName())]\n);<\/code><\/pre>\n<p>Tenga en cuenta que tambi\u00e9n estoy leyendo el resultado de la funci\u00f3n en una\u00a0 variable <strong>$termInfo<\/strong>. Usaremos esto en el siguiente paso para buscar el padre si existe, y tambi\u00e9n lo aplicaremos a nuestro objeto de publicaci\u00f3n personalizado.<\/p>\n<h3>3 Buscar el padre de un t\u00e9rmino<\/h3>\n<p>Aqu\u00ed, usaremos el t\u00e9rmino que acabamos de crear para ver si existe un padre para \u00e9l. Tenga en cuenta que si devuelve falso, entonces la taxonom\u00eda no existe (o si no se encuentra el t\u00e9rmino).<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160701-61e7112a99bca.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160701-61e7112a99bca.png\" alt=\"Taxonom\u00edas de WordPress: t\u00e9rminos, padres, hijos\" ><\/a><\/p>\n<p>Con ese fin, querr\u00e1 agregar un condicional a su c\u00f3digo para crearlo, si es necesario. Sin embargo, para mantener el c\u00f3digo conciso, lo omito en <a href=\"https:\/\/gist.github.com\/tommcfarlin\/a1d3464ee4f84864a002f5568586795f#file-02-get-term-by-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">el siguiente c\u00f3digo<\/a> :<\/p>\n<pre><code>&lt;?php\n\n$parentTermInfo = get_term_by(\n  'term_taxonomy_id',\n  $termInfo['term_taxonomy_id'],\n  'acme-category',\n  ARRAY_A\n);<\/code><\/pre>\n<p>Observe que almaceno el resultado del c\u00f3digo anterior en una\u00a0 variable <strong>$parentTermInfo<\/strong>. Esto es para que podamos pasar esto a nuestra funci\u00f3n final para aplicar la informaci\u00f3n principal a nuestro objeto de publicaci\u00f3n.<\/p>\n<h3>4 Aplicar el t\u00e9rmino a una publicaci\u00f3n<\/h3>\n<p>Finalmente, aplicaremos el t\u00e9rmino (o t\u00e9rminos) si hay un objeto principal. Recuerde que aqu\u00ed es donde se necesitar\u00e1 el condicional. En pocas palabras, si no hay padre, entonces el <strong>valor $parentTermInfo[&#8216;parent&#8217;]<\/strong> no ser\u00e1 necesario.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160701-61e7112e513f4.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160701-61e7112e513f4.png\" alt=\"Taxonom\u00edas de WordPress: t\u00e9rminos, padres, hijos\" ><\/a><\/p>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/a1d3464ee4f84864a002f5568586795f#file-04-wp-set-object-terms-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Pero para el c\u00f3digo a continuaci\u00f3n<\/a>, asumimos que lo tenemos.<\/p>\n<pre><code>&lt;?php\n\nwp_set_object_terms(\n  $customPost-&gt;getId(),\n  [\n      $parentTermInfo['parent'],\n      $termInfo['term_id'],\n  ],\n  'acme-category',\n  true\n);<\/code><\/pre>\n<p>Desde la referencia del c\u00f3digo, observe que esto crear\u00e1 el t\u00e9rmino si a\u00fan no existe; de lo contrario, usar\u00e1 lo que ya est\u00e1 definido y lo aplicar\u00e1 a la publicaci\u00f3n.<\/p>\n<h2>Y hecho<\/h2>\n<p>En t\u00e9rminos generales, no es tanto trabajo. Es \u00fatil asegurarse de tener una comprensi\u00f3n clara de c\u00f3mo funcionan las taxonom\u00edas y sus t\u00e9rminos. Adem\u00e1s, tambi\u00e9n es \u00fatil saber c\u00f3mo recuperar el padre de un t\u00e9rmino determinado si eso es lo que desea hacer (de lo contrario, el tercer paso no es necesario).<\/p>\n<p>Pero, con suerte, los enlaces y el c\u00f3digo anterior le brindan todo lo que necesita para crear una taxonom\u00eda y aplicarla a una publicaci\u00f3n (as\u00ed como un t\u00e9rmino principal, si es necesario).<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Digamos que est\u00e1 creando una soluci\u00f3n tal que necesita aplicarle una taxonom\u00eda. Adem\u00e1s, tambi\u00e9n desea aplicar una taxonom\u00eda principal a la publicaci\u00f3n.<\/p>\n","protected":false},"author":1,"featured_media":235914,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[716,831,800,861],"tags":[1172],"class_list":["post-231074","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desarrollador","category-guia-para-principiantes","category-php-2","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/231074","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=231074"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/231074\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/235914"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=231074"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=231074"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=231074"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}