¿Buscas filtrar tus publicaciones por campo personalizado en el administrador de WordPress? Este fragmento agregará un nuevo menú desplegable de campo personalizado a tus listados de publicaciones y páginas de WordPress. El menú mostrará una lista de todos los campos personalizados. Para filtrar las publicaciones y páginas, solo necesitas seleccionar el campo por el que deseas filtrar.
![]()
Instrucciones:
Todo lo que tienes que hacer es agregar este código al archivo functions.php de tu tema o a un plugin específico del sitio:
add_filter( 'parse_query', 'ba_admin_posts_filter' );
add_action( 'restrict_manage_posts', 'ba_admin_posts_filter_restrict_manage_posts' );
function ba_admin_posts_filter( $query )
{
global $pagenow;
if ( is_admin() && $pagenow=='edit.php' && isset($_GET['ADMIN_FILTER_FIELD_NAME']) && $_GET['ADMIN_FILTER_FIELD_NAME'] != '') {
$query->query_vars['meta_key'] = $_GET['ADMIN_FILTER_FIELD_NAME'];
if (isset($_GET['ADMIN_FILTER_FIELD_VALUE']) && $_GET['ADMIN_FILTER_FIELD_VALUE'] != '')
$query->query_vars['meta_value'] = $_GET['ADMIN_FILTER_FIELD_VALUE'];
}
}
function ba_admin_posts_filter_restrict_manage_posts()
{
global $wpdb;
$sql = 'SELECT DISTINCT meta_key FROM '.$wpdb->postmeta.' ORDER BY 1';
$fields = $wpdb->get_results($sql, ARRAY_N);
?>
<select name="ADMIN_FILTER_FIELD_NAME">
<option value=""><?php _e('Filter By Custom Fields', 'baapf'); ?></option>
<?php
$current = isset($_GET['ADMIN_FILTER_FIELD_NAME'])? $_GET['ADMIN_FILTER_FIELD_NAME']:'';
$current_v = isset($_GET['ADMIN_FILTER_FIELD_VALUE'])? $_GET['ADMIN_FILTER_FIELD_VALUE']:'';
foreach ($fields as $field) {
if (substr($field[0],0,1) != "_"){
printf
(
'<option value="%s"%s>%s</option>',
$field[0],
$field[0] == $current? ' selected="selected"':'',
$field[0]
);
}
}
?>
</select> <?php _e('Value:', 'baapf'); ?><input type="TEXT" name="ADMIN_FILTER_FIELD_VALUE" value="<?php echo $current_v; ?>" />
<?php
}
Nota: Si es la primera vez que agregas fragmentos de código en WordPress, consulta nuestra guía sobre cómo copiar / pegar fragmentos de código correctamente en WordPress, para que no rompas accidentalmente tu sitio.
Si te gustó este fragmento de código, considera echar un vistazo a nuestros otros artículos en el sitio como: 62 mejores temas gratuitos de WordPress para blogs o 7 mejores plugins de formularios de contacto de WordPress.
Hola, ¿es posible ver esto solo en un cierto tipo de publicación? Gracias
Hola, gracias por el código, pero desafortunadamente no me funciona. El menú desplegable de selección aparece encima de la lista de publicaciones y tiene los campos personalizados correctos, pero si escribo un valor, no muestra ningún resultado, a pesar de que hay varias publicaciones que tienen este valor en este campo personalizado.
hola, quiero usar esto para publicaciones personalizadas de Usuarios, ¿cómo cambiará el código? ¡¡alguien puede ayudarme!!
Sigue funcionando sin problemas. ¡Gracias, gran fragmento!
Excelente. La publicación es algo antigua, pero acabo de copiar y pegar el código en mi archivo functions y funciona perfectamente. (OK, no "perfectamente" en cuanto a la visualización, ¡pero el ajuste es mi problema! Funcionalmente parece estar en el punto.) [WP 4.2.2] He querido esta funcionalidad durante años... y encontrarla fue muy fácil una vez que decidí hacer algo al respecto. ¡¡Muchas gracias!! 🙂
Estaba buscando algo así. No tan fácil, y útil. Gracias 🙂
Hola a todos, ¿alguien puede ayudarme a crear una función personalizada para ordenar las publicaciones sin un plugin? Me gustaría incluir la capacidad de ordenar las publicaciones como las páginas...
Tengo algo de código como add_filter( ‘parse_query’, ‘my_custom_post_sort’ );
pero no sé cómo continuar...
Hola,
Acabo de encontrar tu fragmento de filtro de campo personalizado.
¿Es posible filtrar también las etiquetas? ¿Alguna idea de qué necesito cambiar?
Saludos
Hola, parece realmente muy interesante...
Pero desafortunadamente no es exactamente lo que he estado buscando.
Realmente odio la búsqueda en la Biblioteca de Medios. ¿Cuál es el propósito de una búsqueda que no puede encontrar algunos archivos adjuntos ni por (sub)cadena en los NOMBRES DE ARCHIVO, ni por ID, las cadenas en ALT o CAPTION, CAMPOS PERSONALIZADOS, ETIQUETAS, etc. Cada CMS tiene esta capacidad de búsqueda estándar, excepto WP. Muy extraño. ¿Tienes alguna idea de cómo agregar algo así a la Biblioteca de Medios “upload.php” y “media-upload.php” (ventana emergente para insertar archivos adjuntos en Página/Publicación)?
Me temo que no soy capaz de hacerlo yo mismo, está por encima de mis conocimientos de PHP. ¡Pero parece que tienes el código listo para lanzar! En cualquier caso, este ejemplo es una inspiración para mí.
:-))
Si no agregas información o palabras clave a tus registros de medios, ¿cómo deberías encontrarlos?
Claro que la búsqueda de WP es muy limitada, pero para los medios funciona bien si agregas buenas etiquetas ALT a cada imagen 😉
¿POR QUÉ agregarlo a los metadatos? En general, NOMBRE DE ARCHIVO, ID, Autor, etc. – toda la información está presente en la base de datos. Una consulta SQL inteligente puede devolver los datos. Sin mencionar las columnas problemáticas de orden ASC/DESC – me refiero a las nuevas columnas agregadas a través de function.php (Tamaño de archivo, ID, etc.) Creo que el problema es evidente.
Gran publicación, ¡gracias!
Esto es asombroso.
¿Hay alguna forma de mostrar el filtro solo en una página de edición de tipo de publicación personalizado?
Intenté poner un
if (isset($_GET[‘post_type’]) && $_GET[‘post_type’] == ‘product’)
en el filtro pero no parece funcionar.
¡Excelente publicación, gracias Kevin! ¡Implementando ahora en mis sitios!
Genial, me alegra escucharlo.
¡Hola Kevin! ¡Buen fragmento!
pero tengo un problema con él… no me es posible filtrar la lista de administradores de publicaciones por múltiples filtros.
Si filtro por mi campo personalizado y categoría, entonces… no me trae resultados (de hecho, los hay).
¿Qué puede estar pasando?
Estoy seguro de que los valores múltiples serían posibles, solo que no es algo que haya investigado. Profundizaré un poco más y veré si puedo hacer algo como esto en un fragmento futuro.
Implementé tu código y funciona muy bien para el propósito indicado. Con tu código puedo ver rápidamente qué publicaciones tienen una entrada para un campo personalizado en particular, sin embargo, espero que haya una manera de mostrar qué publicaciones no tienen una entrada para ese mismo campo personalizado, para que me sea más fácil revisar y agregar la entrada faltante en lugar de tener que abrir cada publicación individualmente para ver si tiene datos en ese campo personalizado en particular. Cualquier idea será muy apreciada. ¡Gracias!
Bueno, la mejor manera sería agregar el valor del campo personalizado a la lista de publicaciones del administrador, podrías modificar este fragmento para hacer algo así.
http://wpsnipp.com/index.php/functions-php/add-featured-thumbnail-to-admin-post-columns/
Terminé encontrando un plugin llamado “Mass Custom Fields Manager” que me permitió identificar todas mis publicaciones que no tenían el campo personalizado que quería y agregar automáticamente el campo con un valor de mi elección. Pude usar su funcionalidad con éxito para filtrar ahora por ese nuevo valor. Funciona fantástico. Eso me ahorró tener que revisar manualmente casi 2,000 publicaciones. ¡¡Gracias!!
Genial, me alegra saber que lograste que todo funcionara, 2000 publicaciones ciertamente sería mucho para actualizar a mano. ¡De nada, me alegra haber podido ayudar!
Buen fragmento, gracias.
Lo cambiaré para que funcione en la sección de páginas.
Me alegra saber que te gusta el fragmento. Si haces algún cambio, enviarlo de vuelta a wpsnipp.com a través de nuestro formulario de contribución http://wpsnipp.com/index.php/contribute/ sería genial para nuestros visitantes. ¡Disfruta del fragmento!
Hola Finalwebsites, ¿has cambiado el código? ¿Puedes ayudarme?
Hola,
sí, lo hice funcionar, prueba la función en esta página:
http://www.finalwebsites.com/blog/wordpress/add-a-parent-pages-filter-function-your-wordpress-admin-section/
Gracias por publicar la actualización del fragmento,
¡Gracias! ¡Pero el enlace me da tiempo de espera!
Kevin,
gracias por el fragmento. Funciona perfectamente. Tengo curiosidad, ¿el 'ba' en ba_admin_posts_filter() significa blog admin?
El nombre de la función ba_admin_posts_filter() es solo una función personalizada, podría ser cualquier cosa realmente. Sin embargo, en este caso, el autor del fragmento incluyó parte del nombre de su dominio, en.bainternet.info, como ba_
Kevin, aquí tienes un fragmento que escribí para que el filtro pueda tener comodines '%' y '_', en caso de que alguien quiera algo así:
function ba_admin_where_filter($where){ if (strpos($where, ‘meta_value’) !== FALSE) { $where = preg_replace(‘/(.meta_value[^=]*)=(.*)$/U’, “$1 LIKE $2″, $where); } return $where;}add_filter( ‘posts_where_request’, ‘ba_admin_where_filter’ );FYI, si especificas 0 como filtro, devuelve todas las publicaciones. Esto es cierto de tu código original también. Pensé que era porque$_GET[‘ADMIN_FILTER_FIELD_VALUE’] != ”
se evalúa como falso, así que probé
strval($_GET[‘ADMIN_FILTER_FIELD_VALUE’]) != ”
pero todavía devolvió todas las publicaciones. Bueno.
Kevin, ¿hay alguna forma de mostrar también los campos ocultos (es decir, los que empiezan con guion bajo)? Gracias.
¿Hay alguna forma de crear una búsqueda en el front-end, basada en campos personalizados o taxonomías personalizadas?
Bueno, este fragmento específico es para filtrar en el administrador, podrías agregar la capacidad de que WordPress busque también campos personalizados. Sin embargo, con todo eso dicho, te recomiendo echar un vistazo al plugin search everything. http://wordpress.org/extend/plugins/search-everything/
Sí, he visto ese y otros. Solo me preguntaba si tenías algo diferente/mejor, especialmente buscando una forma de sincronizar las opciones de búsqueda.
Por ejemplo: Si la ciudad = Tulsa, entonces limita el estado a solo 1 opción = Oklahoma. O si eliges Oklahoma primero, entonces cambia el menú desplegable de ciudades para que solo muestre ciudades en Oklahoma… Luego presiona “Buscar”.
Gracias de nuevo.
Nada de lo que he publicado hasta ahora, sin embargo, puedes agregar la selección de categorías a la búsqueda. Yo uso esa opción en el cuadro de búsqueda de wpsnipp.com, podría configurar las ciudades como categorías.
http://wpsnipp.com/index.php/cat/search-category-with-dropdown/