{"id":233299,"date":"2023-02-11T19:57:00","date_gmt":"2023-02-11T16:57:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233299"},"modified":"2022-11-10T20:21:33","modified_gmt":"2022-11-10T17:21:33","slug":"como-modificar-o-agregar-columnas-personalizadas-a-la-lista-de-publicaciones-en-el-administrador-de-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/como-modificar-o-agregar-columnas-personalizadas-a-la-lista-de-publicaciones-en-el-administrador-de-wordpress\/","title":{"rendered":"C\u00f3mo modificar o agregar columnas personalizadas a la lista de publicaciones en el administrador de WordPress"},"content":{"rendered":"\n<p>WordPress le permite modificar y agregar columnas a la lista de publicaciones, p\u00e1ginas o cualquier tipo de publicaci\u00f3n personalizada en el panel de administraci\u00f3n. \u00a1En esta publicaci\u00f3n veremos c\u00f3mo!<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-153990-61e5180a562a1.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-153990-61e5180a562a1.png\" alt=\"C\u00f3mo modificar o agregar columnas personalizadas a la lista de publicaciones en el administrador de WordPress\" ><\/a><\/p>\n<p>Hay dos ganchos a considerar: un filtro para la posici\u00f3n y el encabezado de la columna, y una acci\u00f3n para la salida de la columna para cada publicaci\u00f3n. El tipo de publicaci\u00f3n es parte de los nombres de los ganchos. Ve\u00e1moslos uno por uno, empezando por el filtro.<\/p>\n<h2>Filtro de columna<\/h2>\n<p>El filtro para modificar, eliminar o agregar columnas a la lista de publicaciones en el panel de administraci\u00f3n de WordPress es <code>manage_{$post_type}_posts_columns<\/code>. Intercambiar <code>{$post_type}<\/code>con el tipo de publicaci\u00f3n deseada. Por ejemplo; si desea editar columnas para el tipo de publicaci\u00f3n &#8216; <code>post<\/code>&#8216;, el nombre del filtro ser\u00eda <code>manage_post_posts_columns<\/code>. Y para un tipo de publicaci\u00f3n personalizada &#8216; <code>product<\/code>&#8216;, el nombre del filtro ser\u00eda <code>manage_product_posts_columns<\/code>.<\/p>\n<p>PD: WordPress tiene un filtro de columna exclusivamente para el tipo de publicaci\u00f3n &#8216; <code>page<\/code>&#8216;: <code>manage_pages_columns<\/code>, pero obtendr\u00e1s el mismo resultado usando el filtro <code>manage_page_posts_columns<\/code>.<\/p>\n<p>Proporcionado como argumento para el filtro, obtiene la matriz completa de todas las columnas para ese tipo de publicaci\u00f3n. Cada columna tiene una clave \u00fanica y sus valores son las etiquetas que se muestran en el encabezado de la columna. Ejemplos de claves son &#8216; <code>cb<\/code>&#8216; para la columna de la casilla de verificaci\u00f3n y &#8216; <code>title<\/code>&#8216; para la columna del t\u00edtulo de la publicaci\u00f3n. El orden de los elementos en la matriz determina el orden de las columnas.<\/p>\n<p>Lo que debe hacer para agregar una nueva columna es simplemente agregar un nuevo par clave + valor a la matriz y devolverlo. Puede manipular la matriz como desee, por ejemplo, reorden\u00e1ndola.<\/p>\n<h2>Gancho de contenido de columna<\/h2>\n<p>El enlace que necesita usar para controlar la salida del contenido de la columna depende de si su tipo de publicaci\u00f3n est\u00e1 configurado para ser jer\u00e1rquico o no. Se ha definido un tipo de puesto jer\u00e1rquico como <code>'hierarchical' =&gt; true<\/code>en el <code>register_post_type<\/code>. Cualquier tipo de publicaci\u00f3n no jer\u00e1rquica, incluido el tipo de publicaci\u00f3n incorporado de WordPress &#8216; <code>post<\/code>&#8216;, use el nombre de enlace <code>manage_{$post_type}_custom_column<\/code>. Cualquier tipo de publicaci\u00f3n jer\u00e1rquica, incluido el tipo de publicaci\u00f3n incorporado de WordPress &#8216; <code>page<\/code>&#8216;, usa el nombre del gancho <code>manage_pages_custom_column<\/code>(nota: no se inserta el nombre del tipo de publicaci\u00f3n en el nombre del gancho).<\/p>\n<p>Proporcionado como argumentos para este enlace, obtiene el nombre de la columna, que es la clave mencionada en el filtro de columna anterior (por ejemplo, &#8216; <code>cb<\/code>&#8216; para la columna de casilla de verificaci\u00f3n) y, en segundo lugar, la ID de la publicaci\u00f3n. Este enlace se ejecuta en cada publicaci\u00f3n, y la premisa b\u00e1sica es que verifica si estamos o no en el tipo de columna correcto (por la clave), y si lo estamos, use la ID de la publicaci\u00f3n para obtener meta de la publicaci\u00f3n o similar y generar lo que usted quiere.<\/p>\n<h2>Ejemplos<\/h2>\n<p>Veamos alg\u00fan c\u00f3digo de ejemplos pr\u00e1cticos.<\/p>\n<h3>Agregue una columna personalizada a las publicaciones que muestre una meta de publicaci\u00f3n personalizada<\/h3>\n<p>Este es el uso m\u00e1s simple de agregar columnas personalizadas. Digamos que queremos agregar una columna personalizada para publicar el tipo &#8216;publicar&#8217;. Lo queremos al final de las columnas, llamado &quot;Verificado&quot;, y deber\u00eda generar &#8216;S\u00ed&#8217; o &#8216;No&#8217; seg\u00fan el valor meta de una publicaci\u00f3n personalizada. Nota: Este ejemplo no incluye guardar o actualizar la meta meta de la publicaci\u00f3n personalizada.<\/p>\n<p>En nuestro <code>functions.php<\/code>o en cualquier parte de nuestro tema o c\u00f3digo de complemento, agregaremos la columna fusion\u00e1ndola en la matriz de columnas, y en el gancho para la salida de la columna, buscaremos el valor de la publicaci\u00f3n meta y la mostraremos.<\/p>\n<pre><code>add_filter('manage_post_posts_columns', function($columns) {\n    return array_merge($columns, ['verified' =&gt; __('Verified', 'textdomain')]);\n});\n\u00a0\nadd_action('manage_post_posts_custom_column', function($column_key, $post_id) {\n    if ($column_key == 'verified') {\n        $verified = get_post_meta($post_id, 'verified', true);\n        if ($verified) {\n            echo '&lt;span style=\"color:green;\"&gt;'; _e('Yes', 'textdomain'); echo '&lt;\/span&gt;';\n        } else {\n            echo '&lt;span style=\"color:red;\"&gt;'; _e('No', 'textdomain'); echo '&lt;\/span&gt;';\n        }\n    }\n}, 10, 2);<\/code><\/pre>\n<p>La salida puede ser cualquier cosa que desee, simplemente agregu\u00e9 una <code>span<\/code>alrededor de la salida con diferentes colores de texto para una f\u00e1cil identificaci\u00f3n.<\/p>\n<h3>Agregue una columna personalizada a un tipo de publicaci\u00f3n personalizada jer\u00e1rquica que muestre su publicaci\u00f3n principal<\/h3>\n<p>Cuando un tipo de publicaci\u00f3n es jer\u00e1rquica, las publicaciones pueden tener publicaciones principales. Digamos que tenemos un tipo de publicaci\u00f3n personalizada jer\u00e1rquica &#8216; <code>subject<\/code>&#8216; para materias escolares donde es un h\u00e1bito hacer muchas publicaciones para ni\u00f1os, e incluso publicaciones para ni\u00f1os de ni\u00f1os. Para una mejor visi\u00f3n general, queremos agregar una columna que muestre el antepasado principal de la publicaci\u00f3n (&quot;asunto ra\u00edz&quot;). Si la publicaci\u00f3n es una publicaci\u00f3n de nivel superior, se muestra un simple &#8216;-&#8216;; de lo contrario, la columna muestra el t\u00edtulo de la publicaci\u00f3n principal del antepasado en un enlace para editar la publicaci\u00f3n.<\/p>\n<p>Debido a que nos referimos a un tipo de publicaci\u00f3n jer\u00e1rquica, necesitamos usar un enlace diferente para generar contenido de columna que el ejemplo anterior, pero el proceso es exactamente el mismo.<\/p>\n<p>Este c\u00f3digo tambi\u00e9n muestra un ejemplo de c\u00f3mo inyectar una columna en el medio de la matriz de columnas. Definimos que nuestra columna debe ir antes de &#8216;autor&#8217; y usamos funciones de matriz de PHP para inyectar el elemento en la posici\u00f3n correcta.<\/p>\n<pre><code>add_filter('manage_subject_posts_columns', function($columns) {\n    $offset = array_search('author', array_keys($columns));\n    return array_merge(array_slice($columns, 0, $offset), ['ancestor' =&gt; __('Ancestor', 'textdomain')], array_slice($columns, $offset, null));\n});\n\u00a0\nadd_action('manage_pages_custom_column', function($column_key, $post_id) {\n    if ($column_key == 'ancestor') {\n        $ancestors = get_ancestors($post_id, 'subject', 'post_type');\n        $post_ancestor = end($ancestors);\n        if ($post_ancestor != 0) {\n            echo '&lt;a href=\"'. get_edit_post_link($post_ancestor). '\"&gt;'. get_the_title($post_ancestor). '&lt;\/a&gt;';\n        } else {\n            echo '-';\n        }\n    }\n}, 10, 2);<\/code><\/pre>\n<h3>Quitar una columna<\/h3>\n<p>Eliminar una columna de un tipo de publicaci\u00f3n es bastante simple; todo lo que necesita es filtrar las columnas de publicaciones, eliminar el elemento de la matriz y devolverlo. No necesita engancharse en el gancho de salida de la columna. Por ejemplo; eliminando la <code>date<\/code>columna predeterminada \u00bb del tipo de publicaci\u00f3n &#8216; <code>post<\/code>&#8216;:<\/p>\n<pre><code>add_filter('manage_post_posts_columns', function($columns) {\n    unset($columns['date']);\n    return $columns;\n});<\/code><\/pre>\n<h3>Cambiar los nombres o la posici\u00f3n de las columnas predeterminadas<\/h3>\n<p>Supongamos que tenemos un tipo de publicaci\u00f3n personalizada &#8216; <code>book<\/code>&#8216;, y queremos reemplazar el nombre de columna predeterminado &quot;Autor&quot; con &quot;Editor&quot;. Simplemente filtramos el filtro de columnas y le damos a la clave &#8216; <code>author<\/code>&#8216; un valor diferente:<\/p>\n<pre><code>add_filter('manage_book_posts_columns', function($columns) {\n    $columns['author'] = __('Publisher', 'textdomain');\n    return $columns;\n});<\/code><\/pre>\n<p>El reordenamiento de las columnas se puede hacer mediante el uso de funciones de matriz de PHP. Tenga en cuenta que la matriz resultante debe ser una matriz asociativa con &quot;ID&quot; de columna como claves y su etiqueta como valores. Este es un ejemplo simple de sacar la <code>author<\/code>columna &#8216; &#8216; y ponerla al final, reordenando as\u00ed las columnas:<\/p>\n<pre><code>add_filter('manage_post_posts_columns', function($columns) {\n    $taken_out = $columns['author'];\n    unset($columns['author']);\n    $columns['author'] = $taken_out;\n    return $columns;\n});<\/code><\/pre>\n<h3>Establecer una columna personalizada como ordenable<\/h3>\n<p>De forma predeterminada, algunas de las columnas de WordPress se pueden ordenar, por ejemplo, el t\u00edtulo de la publicaci\u00f3n, el recuento de comentarios y la fecha. Es posible hacer que su columna personalizada se pueda ordenar, pero requiere un poco m\u00e1s de c\u00f3digo y conectarse al gancho de consulta de publicaci\u00f3n de WordPress para decirle a WordPress c\u00f3mo ordenar seg\u00fan su meta de publicaci\u00f3n.<\/p>\n<p>Supongamos que tenemos un tipo de publicaci\u00f3n personalizada &#8216; <code>movie<\/code>&#8216;, y con el siguiente c\u00f3digo agregamos una columna personalizada que muestra la meta de publicaci\u00f3n personalizada &#8216; <code>duration<\/code>&#8216;.<\/p>\n<pre><code>add_filter('manage_movie_posts_columns', function($columns) {\n    return array_merge($columns, ['duration' =&gt; __('Duration', 'textdomain')]);\n});\n\u00a0\nadd_action('manage_movie_posts_custom_column', function($column_key, $post_id) {\n    if ($column_key == 'duration') {\n        $duration = get_post_meta($post_id, 'duration', true);\n        echo (!empty($duration))? sprintf(__('%s minutes', 'textdomain'), $duration): __('Unknown', 'textdomain');\n    }\n}, 10, 2);<\/code><\/pre>\n<p>Para decirle a WordPress que queremos que nuestra columna se pueda ordenar, debemos conectarnos al filtro <code>manage_edit-{$post_type}_sortable_columns<\/code>. Agregamos nuestra columna a la matriz de columnas filtrables y luego definimos cu\u00e1l <code>orderby<\/code>debe ser el valor \u00bb. Establecemos un valor personalizado \u00fanico all\u00ed, el mismo nombre que nuestra columna, al que podemos referirnos en nuestro enlace de consulta m\u00e1s adelante.<\/p>\n<pre><code>add_filter('manage_edit-movie_sortable_columns', function($columns) {\n    $columns['duration'] = 'duration';\n    return $columns;\n});<\/code><\/pre>\n<p>Si actualiza WordPress ahora, deber\u00eda ver que se puede hacer clic en nuestra columna personalizada y ordenarla, pero no se ordena correctamente. Eso es porque WordPress no entiende &#8216; <code>duration<\/code>&#8216; como un &#8216; <code>orderby<\/code>&#8216; valor. Eso es lo que arreglaremos conectando &#8216; <code>pre_get_posts<\/code>&#8216;:<\/p>\n<pre><code>add_action('pre_get_posts', function($query) {\n    if (!is_admin()) {\n        return;\n    }\n    $orderby = $query-&gt;get('orderby');\n    if ($orderby == 'duration') {\n        $query-&gt;set('meta_key', 'duration');\n        $query-&gt;set('orderby', 'meta_value_num');\n    }\n});<\/code><\/pre>\n<p>Debido a que nuestra meta de publicaci\u00f3n personalizada &#8216; <code>duration<\/code>&#8216; siempre ser\u00e1 un n\u00famero, podemos definir &#8216; <code>orderby<\/code>&#8216; como &#8216; <code>meta_value_num<\/code>&#8216; para la comparaci\u00f3n de n\u00fameros. Ajuste los argumentos de la consulta para que se ajusten a los metavalores de su publicaci\u00f3n personalizada.<\/p>\n<h3>Deshabilitar la clasificaci\u00f3n de las columnas predeterminadas<\/h3>\n<p>Deshabilitar la clasificaci\u00f3n de una columna predeterminada es bastante simple. Todo lo que tenemos que hacer es conectarnos al filtro <code>manage_edit-{$post_type}_sortable_columns<\/code>y eliminar la columna que no queremos clasificar de la matriz. Por ejemplo, esto elimina la clasificaci\u00f3n de la columna de fecha para el tipo de publicaci\u00f3n &#8216; <code>post<\/code>&#8216;.<\/p>\n<pre><code>add_filter('manage_edit-post_sortable_columns', function($columns) {\n    unset($columns['date']);\n    return $columns;\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>Esta publicaci\u00f3n profundiza en c\u00f3mo modificar o agregar columnas a la lista de publicaciones, p\u00e1ginas o cualquier tipo de publicaci\u00f3n personalizada en el panel de administraci\u00f3n de WordPress.<\/p>\n","protected":false},"author":1,"featured_media":223841,"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-233299","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\/233299","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=233299"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/233299\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/223841"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=233299"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=233299"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=233299"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}