¿Cómo filtrar la lista de publicaciones (en la lista de publicaciones del panel de control de WP) usando un campo personalizado (funcionalidad de búsqueda)?

37

A pesar del hecho de que busqué mucho en Google, no he encontrado la respuesta a una pregunta muy simple:

Tengo algunas publicaciones con un campo personalizado (es decir, supplier_name). Me gustaría poder buscar y filtrar mis publicaciones de acuerdo con este campo personalizado. En otras palabras, en la lista de publicaciones del administrador, me gustaría tener un cuadro de búsqueda (llamado "Nombre del proveedor") donde puedo escribir un valor (ej. "IBM") y luego, hacer clic en el botón de búsqueda que le dará Devuelva todas las publicaciones que tengan un campo personalizado llamado "supplier_name" y, de ser así, el valor del campo personalizado será "IBM".

¿Cómo puedo hacer esto?

    
pregunta jean04 07.05.2011 - 13:41

1 respuesta

45

Codifiqué un complemento solo para eso y nunca pude publicarlo:

Uso:

Enelmenúdesplegabletieneunalistadetodosloscampospersonalizados,asíquesoloseleccioneelcampoporelquedeseafiltraryhagaclicenfiltrar.Sideseafiltraraunvalorespecíficodeuncampopersonalizado,seleccioneelnombredelcampo,ingreseelvalorquedeseeyhagaclicenfiltrar.

<?php/*PluginName:AdminFilterBYCustomFieldsPluginURI:http://en.bainternet.infoDescription:Filterpostsorpagesinadminbycustomfields(postmeta)Version:1.0Author:BainternetAuthorURI:http://en.bainternet.info*/add_filter('parse_query','ba_admin_posts_filter');add_action('restrict_manage_posts','ba_admin_posts_filter_restrict_manage_posts');functionba_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'];}}functionba_admin_posts_filter_restrict_manage_posts(){global$wpdb;$sql='SELECTDISTINCTmeta_keyFROM'.$wpdb->postmeta.'ORDERBY1';$fields=$wpdb->get_results($sql,ARRAY_N);?><selectname="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
}
    
respondido por el Bainternet 07.05.2011 - 17:06

Lea otras preguntas en las etiquetas