{"id":233526,"date":"2023-02-16T09:42:00","date_gmt":"2023-02-16T06:42:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233526"},"modified":"2022-11-11T00:10:42","modified_gmt":"2022-11-10T21:10:42","slug":"agregue-una-configuracion-de-enlace-permanente-personalizado-para-su-tipo-de-publicacion-personalizada-en-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/agregue-una-configuracion-de-enlace-permanente-personalizado-para-su-tipo-de-publicacion-personalizada-en-wordpress\/","title":{"rendered":"Agregue una configuraci\u00f3n de enlace permanente personalizado para su tipo de publicaci\u00f3n personalizada en WordPress"},"content":{"rendered":"\n<p>Este es un tutorial sobre c\u00f3mo agregar una configuraci\u00f3n personalizada a la p\u00e1gina de administraci\u00f3n de WordPress &quot;Configuraci\u00f3n&gt; Enlaces permanentes&quot; para definir el slug para su tipo de publicaci\u00f3n personalizada. Si est\u00e1 desarrollando un tema o complemento para otros que tiene un tipo de publicaci\u00f3n personalizado incorporado, el usuario apreciar\u00e1 agregar esta configuraci\u00f3n porque le permite decidir la estructura de URL del tipo de publicaci\u00f3n personalizada.<\/p>\n<p>No explicar\u00e9 en detalle c\u00f3mo agregar un tipo de publicaci\u00f3n personalizada; si no est\u00e1 seguro, le recomiendo que eche un vistazo a <a href=\"https:\/\/awhitepixel.com\/blog\/how-to-create-custom-post-types-and-custom-taxonomies\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">c\u00f3mo agregar un tipo de publicaci\u00f3n personalizada<\/a>.<\/p>\n<p>Suponga que tiene un c\u00f3digo para registrar su tipo de publicaci\u00f3n personalizada como esta:<\/p>\n<pre><code>add_action('init', function() {\n    register_post_type('reference', [\n        'label' =&gt; __('References', 'txtdomain'),\n        'public' =&gt; true,\n        'menu_position' =&gt; 5,\n        'menu_icon' =&gt; 'dashicons-book',\n        'supports' =&gt; ['title', 'editor', 'thumbnail', 'author', 'custom-fields', 'revisions'],\n        'show_in_rest' =&gt; true,\n        'rewrite' =&gt; [\n            'slug' =&gt; 'reference',\n            'with_front' =&gt; false\n        ],\n        'labels' =&gt; [\n            'singular_name' =&gt; __('Reference', 'txtdomain'),\n            'add_new_item' =&gt; __('Add new reference', 'txtdomain'),\n            'new_item' =&gt; __('New reference', 'txtdomain'),\n            'view_item' =&gt; __('View reference', 'txtdomain'),\n            'not_found' =&gt; __('No references found', 'txtdomain'),\n            'not_found_in_trash' =&gt; __('No references found in trash', 'txtdomain'),\n            'all_items' =&gt; __('All references', 'txtdomain'),\n            'insert_into_item' =&gt; __('Insert into reference', 'txtdomain')\n        ],      \n    ]);\n});<\/code><\/pre>\n<p>La parte que nos interesa es el <code>rewrite<\/code>argumento. Aqu\u00ed es donde definimos qu\u00e9 slug obtendr\u00e1 el tipo de publicaci\u00f3n frente a todas sus publicaciones. Su c\u00f3digo para registrar un tipo de mensaje personalizado puede ser ligeramente diferente, por ejemplo, sin &#8216; <code>with_front<\/code>&#8216;, pero lo que nos interesa aqu\u00ed es &#8216; <code>slug<\/code>&#8216;:<\/p>\n<pre><code>'rewrite' =&gt; [\n    'slug' =&gt; 'reference',\n    'with_front' =&gt; false\n]<\/code><\/pre>\n<p>Con este c\u00f3digo, pr\u00e1cticamente est\u00e1 codificando cu\u00e1l ser\u00e1 el slug de enlace permanente de las publicaciones. Un tipo de publicaci\u00f3n para referencias puede usarse para muchos tipos de contenido y usuarios de temas; por ejemplo, proyecto, cartera, referencias de clientes, referencias de empresas, etc. Para que su tema sea flexible, es posible que desee permitir que el usuario del tema decida el slug del tipo de publicaci\u00f3n por s\u00ed mismo.<\/p>\n<p>\u00a1As\u00ed que echemos un vistazo a c\u00f3mo hacerlo!<\/p>\n<h2>Agregar y guardar el campo<\/h2>\n<p>El uso de la API de configuraci\u00f3n de WordPress simplifica un poco esto para nosotros. Todo lo que necesitamos es agregar un campo de configuraci\u00f3n y decirle a WordPress en qu\u00e9 p\u00e1gina de administraci\u00f3n queremos que se muestre, en nuestro caso, la p\u00e1gina de configuraci\u00f3n de enlaces permanentes. Tenga en cuenta que necesitamos escribir una funci\u00f3n que tambi\u00e9n guarde el valor, lo cual haremos al final.<\/p>\n<p>Enganchamos nuestra funci\u00f3n al <code>admin_init<\/code>gancho y registramos nuestra configuraci\u00f3n. Cuando registramos una configuraci\u00f3n, definimos qu\u00e9 funci\u00f3n debe ejecutar para generar la configuraci\u00f3n:<\/p>\n<pre><code>add_action('admin_init', function() {\n    add_settings_field('mytheme_reference_slug', __('References base', 'txtdomain'), 'mytest_reference_slug_output', 'permalink', 'optional');\n});<\/code><\/pre>\n<p>El argumento de configuraci\u00f3n cuatro de <code>[add_settings_field](https:\/\/developer.wordpress.org\/reference\/functions\/add_settings_field\/)()<\/code>to <code>'permalink'<\/code>le dice a WordPress que agregue la configuraci\u00f3n a la p\u00e1gina de configuraci\u00f3n de enlaces permanentes. El argumento n\u00famero tres es la funci\u00f3n que debe ejecutar WordPress al generar la configuraci\u00f3n, una funci\u00f3n que definimos a continuaci\u00f3n (fuera de la funci\u00f3n enganchada):<\/p>\n<pre><code>function mytest_reference_slug_output() {\n    ?&gt;\n    &lt;input name=\"mytheme_reference_slug\" type=\"text\" class=\"regular-text code\" value=\"&lt;?php echo esc_attr(get_option('mytheme_reference_slug')); ?&gt;\" placeholder=\"&lt;?php echo 'reference'; ?&gt;\" \/&gt;\n    &lt;?php\n}<\/code><\/pre>\n<p>En esta funci\u00f3n, simplemente generamos un texto de formulario b\u00e1sico <code>&lt;input&gt;<\/code>. Para su <code>value<\/code>atributo, buscamos el valor de la configuraci\u00f3n usando <code>[get_option](https:\/\/developer.wordpress.org\/reference\/functions\/get_option\/)()<\/code>. El <code>placeholder<\/code>atributo es opcional, pero es una buena pr\u00e1ctica poner su base de slug predeterminada para que el usuario del tema sepa si quiere cambiar su valor o no.<\/p>\n<p>Si guarda su c\u00f3digo y va a su p\u00e1gina de enlaces permanentes de WordPress ahora, deber\u00eda ver su campo al final:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152961-61e500224b55a.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-152961-61e500224b55a.png\" alt=\"Agregue una configuraci\u00f3n de enlace permanente personalizado para su tipo de publicaci\u00f3n personalizada en WordPress\" ><\/a><\/p>\n<p>Por el momento la configuraci\u00f3n no est\u00e1 guardando su valor, ese es el siguiente paso.<\/p>\n<p>Necesitamos agregar otra funci\u00f3n vinculada <code>admin_init<\/code>que verifique si nuestra configuraci\u00f3n se envi\u00f3 o no en forma de estructura de enlace permanente. Y si es as\u00ed, debe guardarse con <code>[update_option](https:\/\/developer.wordpress.org\/reference\/functions\/update_option\/)()<\/code>.<\/p>\n<pre><code>add_action('admin_init', function() {\n    if (isset($_POST['permalink_structure'])) {\n        update_option('mytheme_reference_slug', trim($_POST['mytheme_reference_slug']));\n    }\n});<\/code><\/pre>\n<p>Al guardar la configuraci\u00f3n de Permalinks, se env\u00eda un formulario, por lo que podemos obtener los valores a trav\u00e9s de <code>$_POST<\/code>la variable global de PHP. Los valores enviados desde el formulario se almacenan como una matriz con los atributos de nombre de entrada como claves. En nuestro caso, establecemos un atributo de nombre &#8216; <code>mytheme_reference_slug<\/code>&#8216; en nuestra entrada, para que podamos acceder al valor enviado con <code>$_POST['mytheme_reference_slug']<\/code>.<\/p>\n<p>Ahora la configuraci\u00f3n deber\u00eda estar funcionando completamente en la p\u00e1gina de Configuraci\u00f3n de Permalink. La parte final es adjuntar el valor de esta configuraci\u00f3n a nuestro tipo de publicaci\u00f3n personalizada.<\/p>\n<h2>Hacer que nuestro tipo de publicaci\u00f3n personalizada use nuestra configuraci\u00f3n<\/h2>\n<p>Para hacer que nuestro tipo de publicaci\u00f3n personalizada use el valor personalizado de nuestra configuraci\u00f3n, volvemos a la <code>register_post_type()<\/code>llamada de funci\u00f3n y modificamos el <code>rewrite<\/code>argumento en algo como esto:<\/p>\n<pre><code>'rewrite' =&gt; [\n    'slug' =&gt; (!empty(get_option('mytheme_reference_slug')))? get_option('mytheme_reference_slug'): 'reference',\n    'with_front' =&gt; false\n]<\/code><\/pre>\n<p>Todo lo que hacemos aqu\u00ed es buscar el valor de nuestra nueva opci\u00f3n. Si est\u00e1 vac\u00edo <code>'reference'<\/code>, se utilizar\u00e1 el predeterminado ().<\/p>\n<p>\u00a1Y eso es! Ahora su tipo de publicaci\u00f3n personalizada utilizar\u00e1 cualquier base de slug establecida en la p\u00e1gina Configuraci\u00f3n de enlaces permanentes. Puede agregar m\u00e1s configuraciones de la misma manera, por ejemplo, para taxonom\u00edas personalizadas.<\/p>\n<h2>El c\u00f3digo completo<\/h2>\n<p>Todos juntos ahora.<\/p>\n<pre><code>\/\/ Register custom post type\nadd_action('init', function() {\n    register_post_type('reference', [\n        'label' =&gt; __('References', 'txtdomain'),\n        'public' =&gt; true,\n        'menu_position' =&gt; 5,\n        'menu_icon' =&gt; 'dashicons-book',\n        'supports' =&gt; ['title', 'editor', 'thumbnail', 'author', 'custom-fields', 'revisions'],\n        'show_in_rest' =&gt; true,\n        'rewrite' =&gt; [\n            'slug' =&gt; (!empty(get_option('mytheme_reference_slug')))? get_option('mytheme_reference_slug'): 'reference',\n            'with_front' =&gt; false\n        ],\n        'labels' =&gt; [\n            'singular_name' =&gt; __('Reference', 'txtdomain'),\n            'add_new_item' =&gt; __('Add new reference', 'txtdomain'),\n            'new_item' =&gt; __('New reference', 'txtdomain'),\n            'view_item' =&gt; __('View reference', 'txtdomain'),\n            'not_found' =&gt; __('No references found', 'txtdomain'),\n            'not_found_in_trash' =&gt; __('No references found in trash', 'txtdomain'),\n            'all_items' =&gt; __('All references', 'txtdomain'),\n            'insert_into_item' =&gt; __('Insert into reference', 'txtdomain')\n        ],      \n    ]);\n});\n\u00a0\n\/\/ Add setting\nadd_action('admin_init', function() {\n    add_settings_field('mytheme_reference_slug', __('References base', 'txtdomain'), 'mytest_reference_slug_output', 'permalink', 'optional');\n});\n\u00a0\n\/\/ Setting output\nfunction mytest_reference_slug_output() {\n    ?&gt;\n    &lt;input name=\"mytheme_reference_slug\" type=\"text\" class=\"regular-text code\" value=\"&lt;?php echo esc_attr(get_option('mytheme_reference_slug')); ?&gt;\" placeholder=\"&lt;?php echo 'reference'; ?&gt;\" \/&gt;\n    &lt;?php\n}\n\u00a0\n\/\/ Save setting\nadd_action('admin_init', function() {\n    if (isset($_POST['permalink_structure'])) {\n        update_option('mytheme_reference_slug', trim($_POST['mytheme_reference_slug']));\n    }\n});<\/code><\/pre>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Este es un tutorial sobre c\u00f3mo agregar una configuraci\u00f3n personalizada a la p\u00e1gina de administraci\u00f3n de WordPress \u00abConfiguraci\u00f3n> Enlaces permanentes\u00bb para definir el slug a su tipo de publicaci\u00f3n personalizada.<\/p>\n","protected":false},"author":1,"featured_media":152962,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[892,892,716,716,831,1110,800,800,831,840,840,861,861],"tags":[1172],"class_list":{"0":"post-233526","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-codigo","9":"category-desarrollador","11":"category-guia-para-principiantes","12":"category-n-a","13":"category-php-2","16":"category-tutoriales","18":"category-wordpress-2","20":"tag-affiai-es"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/233526","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=233526"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/233526\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/152962"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=233526"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=233526"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=233526"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}