Consejo rápido Haga que su columna personalizada se pueda ordenar

En un artículo reciente de Claudio Simeone, demostró cómo podría agregar columnas adicionales a su publicación, o tipo de publicación personalizada, pantallas de administración (o eliminar las existentes). En esta sugerencia rápida, me baso en eso, mostrándole cómo hacer que sus columnas recién creadas se puedan ordenar.


Para indicar a WordPress qué columnas desea registrar como clasificables, necesita este filtro:

 administrar _ $ screen-> id _sortable_column

Para publicaciones y páginas., $ screen-> id es 'editar post'y'editar página'respectivamente. En general, para un tipo de publicación con nombre 'my-post-type', es 'edit-my-post-type'.

El filtro pasa una matriz con los nombres de las columnas que se pueden ordenar como claves, y qué ordenar como un valor. Más precisamente, los valores dictan lo que el 'orden por'parámetro se establece como en la consulta que llena la tabla. De la misma manera en que puede eliminar columnas, también puede hacer que las columnas sean "no aceptables" al eliminarlas de esta matriz. Veamos un ejemplo:


Registrar una columna

Siguiendo el artículo de Claudio, supongamos que hemos agregado la columna 'cortes' a nuestro tipo de publicación 'pastel', que podemos hacer de la siguiente manera:

 add_filter ('manage_edit-cake_columns', 'my_extra_cake_columns'); function my_extra_cake_columns ($ columnas) $ columnas ['slices'] = __ ('Slices', 'myplugindomain'); devuelve $ columnas; 

Y hemos añadido el contenido de la columna de la siguiente manera:

 add_action ('manage_cake_posts_custom_column', 'my_cake_column_content', 10, 2); function my_cake_column_content ($ column_name, $ post_id) if ('slices'! = $ column_name) return; // Obtener el número de segmentos de la publicación meta $ slices = get_post_meta ($ post_id, 'slices', true); echo intval ($ slices); 

He almacenado segmentos como meta de publicación, pero otras columnas pueden rellenar sus columnas..


Hacer una columna clasificable

Ahora registramos nuestra columna personalizada como 'ordenable'. Como se mencionó anteriormente utilizamos el administrar _ $ screen-> id _sortable_column filtrar. los $ screen-> id en este caso es 'pastel de edición'.

 add_filter ('manage_edit-cake_sortable_columns', 'my_sortable_cake_column'); function my_sortable_cake_column ($ columnas) $ columnas ['slices'] = 'slice'; // Para hacer que una columna sea "no clasificable", elimínela de la matriz // unset ($ columnas ['fecha']); devuelve $ columnas; 

La clave de la $ columnas la matriz indica una columna que se puede ordenar y su valor le dice a WordPress qué debe configurar 'orden por'en la consulta. Si ese valor fuera uno de los 'orden por'se entiende de forma nativa por WordPress (estos incluyen'título','fecha','modificado','Recuento de comentarios', o de hecho cualquiera de los otros enumerados en WP_Query en el Códice de WordPress] podríamos detenernos aquí. La excepción a esta regla, como en este ejemplo, es la 'meta_valor'y'meta_value_num'parámetros, que nos obligan a establecer una clave meta también.

Si queremos ordenar por un valor meta, o por alguna otra forma, WordPress no entiende automáticamente que tiene que decirle lo que quiere decir ordenando por 'rebanada'. Si realiza el pedido por meta, la forma más sencilla de hacerlo es enganchar en el pre_get_posts acción. Esto pasa un objeto de consulta que podemos modificar. Tenga en cuenta que esta acción se activa para todas las consultas predeterminadas (frontal y posterior). Si bien es poco probable que cause problemas, a menos que quiera que WordPress interprete orden por configurado como 'slice' en el extremo delantero también, es una buena idea realizar solo consultas en el lado del administrador.

 add_action ('pre_get_posts', 'my_slice_orderby'); function my_slice_orderby ($ query) if (! is_admin ()) return; $ orderby = $ consulta-> get ('orderby'); if ('slice' == $ orderby) $ query-> set ('meta_key', 'slices'); $ consulta-> set ('orderby', 'meta_value_num'); 

Esto verifica si nuestra consulta está ordenada por 'sector' y, si lo está, le dice a WordPress que ordene numéricamente por el valor del meta de los 'segmentos'. Si desea ordenar el valor alfabéticamente, utilice 'meta_valor' más bien que 'meta_value_num'.

$ consulta es un WP_Query objeto, por lo que cualquier cosa que pueda ordenar usando ese objeto, puede ordenar sus columnas por. Para cualquier otra cosa más complicada, necesitarás enganchar en el posts_orderby (o post_clauses) gancho, pero eso está fuera del alcance de este consejo rápido.

Nota: Si una publicación no tiene un valor almacenado para esa meta clave, entonces no aparecerá cuando ordene por esa clave. Esto es diferente de una publicación que tiene 0 almacenado como valor meta.