it-swarm.com.de

So filtern Sie Einträge (in WP Dashboard-Einträge auflisten) über ein benutzerdefiniertes Feld (Suchfunktion)?

Trotz der Tatsache, dass ich viel gegoogelt habe, habe ich keine Antwort auf eine sehr einfache Frage gefunden:

Ich habe einige Posts mit einem benutzerdefinierten Feld (d. H. Lieferantenname). Ich möchte in der Lage sein, meine Beiträge nach diesem benutzerdefinierten Feld zu suchen und zu filtern. Mit anderen Worten, in der Liste der Admin-Posts möchte ich ein Suchfeld (mit dem Namen "Lieferantenname") haben, in das ich einen Wert (z. B. "IBM") eingeben und dann auf eine Suchschaltfläche klicken kann, die angezeigt wird Senden Sie mir alle Beiträge zurück, die ein benutzerdefiniertes Feld mit dem Namen "Lieferantenname" haben. In diesem Fall lautet der Wert des benutzerdefinierten Felds "IBM".

Wie kann ich das machen ?

37
jean04

Ich habe ein Plugin dafür programmiert und bin nie dazu gekommen, es zu veröffentlichen:

enter image description here

Verwendungszweck:

In der Dropdown-Liste finden Sie eine Liste aller benutzerdefinierten Felder. Wählen Sie also einfach das Feld aus, nach dem Sie filtern möchten, und klicken Sie auf Filter. Wenn Sie nach einem bestimmten Wert eines benutzerdefinierten Felds filtern möchten, wählen Sie den Namen des Felds aus, geben Sie den gewünschten Wert ein 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
}
45
Bainternet