Come filtrare l'elenco dei post (nell'elenco dei post della dashboard di WP) utilizzando un campo personalizzato (funzionalità di ricerca)?
1 risposta
- voti
-
- 2011-05-07
Ho codificato unpluginproprioper questoe non sonomai riuscito apubblicarlo:
Utilizzo:
Nelmenu a discesa èpresente unelenco dituttii campipersonalizzati,quindi seleziona semplicementeil campoin base al qualefiltraree fai clic sufiltro. se desiderifiltrarein base a un valore specifico di un campopersonalizzato,selezionailnome del campo,inserisciil valore desideratoe fai clic sufiltro.
<?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('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 }
I coded a plugin just for that and never got around to publish it :
Usage:
In the dropdown you have a list of all custom fields, so just select the field you want to filter by and click filter. if you want to filter to a specific value of a custom field then select the field's name , enter the value you want and click filter.
<?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('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 }
-
Perchénon utilizzare lafunzione di supportoper la casella di selezione?cioè.sostituire `$ campo [0]==$ corrente?'selected="selected"': '', `con` selezionato ($ campo [0]==$ corrente,vero,falso),`... :)Why not use the helper function for your selection box? ie. replace `$field[0] == $current? ' selected="selected"':'', ` with `selected( $field[0] == $current, true, false ),` ... :)
- 7
- 2011-07-18
- t31os
-
questa rispostanonfunzionapiù.this answer doesn't work anymore.
- 0
- 2018-07-09
- Kir Mazur
-
C'è unmodoperfarlofunzionarenelle versionipiù recenti di WordPress?Is there a way to make it work in newest versions of WordPress?
- 0
- 2018-11-27
- nakkeru
Nonostante abbia cercatomolto su Google,non hotrovato la risposta a una domandamolto semplice:
Ho alcunipost con un campopersonalizzato (ades.nome_fornitore).Vorreipoter cercaree filtrarei mieipostin base a questo campopersonalizzato.In altreparole,nell'elenco deipost dell'amministratore,vorrei avere una casella di ricerca (denominata "Nomefornitore")in cuiposso digitare un valore (es. "IBM")e quindifare clic su unpulsante di ricerca che daràrestituiscotuttii post che hanno un campopersonalizzato denominato "nome_offerente"e,in tal caso,il valore del campopersonalizzato sarà "IBM".
Comepossofarlo?