Al editar uno de mis tipos de publicaciones personalizadas, quiero poder enumerar todas las entradas por un campo personalizado en lugar de la fecha en que se publican (que, para un tipo de publicación personalizada, probablemente no sea relevante). Obtuve una ventaja de los comentarios de una publicación de blog sobre tipos de publicaciones personalizadas y el autor dijo que era posible y que incluso lo hizo para que pudiera hacer clic en los nombres de las columnas para una clasificación personalizada. Mencionó la posts_orderby
función que noté en mis propios comentarios, pero ahora ya puedo encontrar la publicación del blog. ¿Alguna sugerencia? Vi una solución que usaba
add_action('wp', 'check_page');
Y la check_page
función solía add_filter
cambiar la consulta, pero estoy bastante seguro de que solo funcionaría en los archivos de tema, no en el área de administración.
fuente
Respuestas:
Como probablemente pueda imaginar por la falta de respuestas proporcionadas, la solución no es exactamente trivial. Lo que he hecho es crear un ejemplo algo autónomo que asume un tipo de publicación personalizado de "
movie
" y una clave de campo personalizada de " Género ".Descargo de responsabilidad : esto funciona con WP3.0 pero no puedo estar seguro de que funcionará con versiones anteriores.
Básicamente, necesita enganchar dos (2) ganchos para que funcione y otros dos (2) para que sea obvio y útil.
El primer enlace es '
restrict_manage_posts
' que le permite emitir un HTML<select>
en el área sobre la lista de publicaciones donde se filtran las " Acciones masivas " y " Mostrar fechas ". El código proporcionado generará la funcionalidad " Ordenar por: " como se ve en este fragmento de pantalla:(fuente: mikeschinkel.com )
El código usa SQL directo porque no hay una función API de WordPress para proporcionar la lista de todas las meta_keys para un tipo de publicación (me parece un boleto de tráfico futuro ...) De todos modos, aquí está el código. Tenga en cuenta que toma el tipo de publicación
$_GET
y lo valida para asegurarse de que sea tanto un tipo de publicación válidopost_type_exists()
como unmovie
tipo de publicación (esas dos comprobaciones son excesivas, pero lo hice para mostrarle cómo, si no quiere hacerlo) codifique el tipo de publicación.) Por último, uso elsortby
parámetro URL ya que no entra en conflicto con nada más en WordPress:El segundo paso requerido es usar el
parse_query
gancho que se llama después de que WordPress decida qué consulta debe ejecutarse pero antes de ejecutarla. Aquí podemos establecer valores deorderby
ymeta_key
en laquery_var
matriz de la consulta que están documentados en el Codex en elorderby
parámetro paraquery_posts()
. Probamos para asegurarnos de que:is_admin()
),$pagenow=='edit.php'
),post_type
parámetro de URL igual amovie
, ysortby
parámetro de URL y no se le ha pasado el valor ' Ninguno 'Si todas esas pruebas pasan, configuramos
query_vars
(como se documenta aquí )meta_value
y nuestrosortby
valor para ' Género ':Y eso es todo lo que necesitas hacer; ¡no se requieren ganchos "
posts_order
" o "wp
"! Por supuesto que realmente necesitas hacer más; necesita agregar algunas columnas en su página que enumeren las publicaciones para que pueda ver los valores por los que está ordenando, de lo contrario, los usuarios se confundirán mucho. Entonces agregue unmanage_{$post_type}_posts_columns
gancho, en este casomanage_movie_posts_columns
. Este gancho pasa la matriz predeterminada de columnas y, por simplicidad, simplemente lo reemplacé con dos columnas estándar; una casilla de verificación (cb
) y un nombre de publicación (title
). (Puede inspeccionarposts_columns
con aprint_r()
para ver qué más hay disponible de forma predeterminada).Decidí agregar un " Ordenado por: " para cuando hay un
sortby
parámetro de URL y cuando no lo esNone
:Finalmente, usamos el
manage_pages_custom_column
gancho para mostrar realmente el valor cuando hay una publicación del tipo de publicación apropiado y con la prueba probablemente redundante parais_admin()
y$pagenow=='edit.php'
. Cuando hay unsortby
parámetro de URL, extraemos el valor del campo personalizado que se está ordenando por una visualización en nuestra lista. Esto es lo que parece (recuerde, estos son datos de prueba, ¡así que no hay comentarios de la galería de maní sobre las clasificaciones de películas! :):(fuente: mikeschinkel.com )
Y aquí está el código:
Tenga en cuenta que esto solo recoge el primer " Género " para a
movie
, es decir, el primer meta_valor en el caso de valores múltiples para una clave dada. Pero, de nuevo, no estoy seguro de cómo funcionaría de lo contrario.Y para aquellos que no están familiarizados con dónde colocar este código, pueden ponerlo en un complemento o más probablemente para el novato en el
functions.php
archivo en su tema actual.Cómo ayuda esto
fuente
'months_dropdown_results'
y'restrict_manage_posts'
. Los votos a favor de PS siempre son apreciados. :)A partir de WordPress 3.1 (estoy usando la versión beta) las columnas ahora se pueden ordenar a través de sus títulos.
La siguiente publicación detalla cómo implementarlos.
http://scribu.net/wordpress/custom-sortable-columns.html
fuente
Aquí hay una solución simple:
Simplemente reemplace SU TIPO DE PUBLICACIÓN y 'your_custom_field'
fuente