¿Cómo filtrar el listado de entradas (en el panel de WordPress) usando un campo personalizado (funcionalidad de búsqueda)?
A pesar de que he buscado mucho en Google, no he encontrado la respuesta a una pregunta muy simple:
Tengo algunas entradas con un campo personalizado (por ejemplo, supplier_name). Me gustaría poder buscar y filtrar mis entradas de acuerdo con este campo personalizado. En otras palabras, en el listado de entradas del administrador, me gustaría tener una caja de búsqueda (llamada "Nombre del proveedor") donde pueda escribir un valor (por ejemplo, "IBM") y luego, hacer clic en un botón de búsqueda que me devuelva todas las entradas que tienen un campo personalizado llamado "supplier_name" y, si es así, el valor del campo personalizado será "IBM".
¿Cómo puedo hacer esto?

Codifiqué un plugin solo para eso y nunca me decidí a publicarlo:
Uso:
En el menú desplegable tienes una lista de todos los campos personalizados, solo selecciona el campo por el que deseas filtrar y haz clic en filtrar. Si deseas filtrar por un valor específico de un campo personalizado, entonces selecciona el nombre del campo, ingresa el valor deseado y haz clic en filtrar.
<?php
/*
Plugin Name: Admin Filter BY Custom Fields
Plugin URI: http://en.bainternet.info
Description: Filter posts or pages in admin by custom fields (post meta)
Version: 1.0
Author: Bainternet
Author URI: http://en.bainternet.info
*/
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('Filtrar por Campos Personalizados', '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('Valor:', 'baapf'); ?><input type="TEXT" name="ADMIN_FILTER_FIELD_VALUE" value="<?php echo $current_v; ?>" />
<?php
}

¿Por qué no usar la función helper para tu cuadro de selección? Es decir, reemplazar $field[0] == $current? ' selected="selected"':'',
con selected( $field[0] == $current, true, false ),
... :)

¿Hay alguna forma de hacer que funcione en las versiones más recientes de WordPress?

Tengo una tabla personalizada (Nombre de la tabla: ssl_transaction_cus) en la base de datos que se utiliza para almacenar información de donaciones. Obtuve todos los datos de esta tabla en la 'página de menú de administración' con una tabla (usando la etiqueta Table). Me gustaría poder filtrar esos datos según el 'Nombre del Evento'.
Estoy intentando hacerlo según esta respuesta. Pero, hay código para custom post o post. Sin embargo, no tengo CPT para esos datos, solo datos personalizados. Llevo mucho tiempo intentándolo pero no he tenido éxito. Por favor echa un vistazo https://wordpress.stackexchange.com/questions/408599/how-to-filter-with-dropdown-in-backend-for-custom-data
