Wie filtere ich die Liste der Beiträge (in der Liste der WP-Dashboard-Beiträge) mithilfe eines benutzerdefinierten Felds (Suchfunktion)?
1 Antworten
- Stimmen
-
- 2011-05-07
Ich habenur dafürein Plugin codiert undbin nie dazugekommen,es zu veröffentlichen:
Verwendung:
In der Dropdown-Listefinden Sieeine Liste allerbenutzerdefinierten Felder. Wählen Sieeinfach das Feld aus,nach dem Siefilternmöchten,und klicken Sie auf Filter. Wenn Sienacheinem bestimmten Werteinesbenutzerdefinierten Feldsfilternmöchten,wählen Sie den Namen des Felds aus,geben Sie dengewünschten Wertein und klicken Sie auf 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 }
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 }
-
Warumnicht die Hilfsfunktionfür Ihr Auswahlfeld verwenden?dh.`$field [0]==$ currentersetzen?'selected="selected"': '', `with` selected ($field [0]==$ current,true,false),` ... :)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
-
Diese Antwortfunktioniertnichtmehr.this answer doesn't work anymore.
- 0
- 2018-07-09
- Kir Mazur
-
Gibteseine Möglichkeit,esin denneuesten Versionen von WordPress zum Laufen zubringen?Is there a way to make it work in newest versions of WordPress?
- 0
- 2018-11-27
- nakkeru
Obwohlich vielgegoogelt habe,habeich keine Antwort aufeine sehreinfache Fragegefunden:
Ich habeeinige Beiträgemit einembenutzerdefinierten Feld (d. h. Lieferantenname).Ichmöchtemeine Beiträgenach diesembenutzerdefinierten Feld suchen undfiltern können.Mit anderen Worten,in der Liste der Administratorbeiträgemöchteichein Suchfeld (mit dem Namen "Lieferantenname") haben,in dasicheinen Wert (z. B. "IBM")eingeben und dann aufeine Suchschaltfläche klicken kann,die angezeigt wirdIch unterstütze alle Beiträge,dieein benutzerdefiniertes Feldmit dem Namen "Lieferantenname" haben. In diesem Fall lautet der Wert desbenutzerdefinierten Felds "IBM".
Wie kannich dasmachen?