Bagaimana cara memfilter daftar posting (dalam daftar posting dashboard WP) menggunakan bidang khusus (fungsi pencarian)?


37

Terlepas dari kenyataan bahwa saya sering mencari di Google, saya belum menemukan jawaban untuk pertanyaan yang sangat sederhana:

Saya memiliki beberapa posting dengan bidang khusus (mis. Supplier_name). Saya ingin dapat mencari dan memfilter posting saya sesuai dengan bidang khusus ini. Dengan kata lain, dalam daftar posting admin, saya ingin memiliki kotak pencarian (bernama "Nama pemasok") di mana saya dapat mengetikkan nilai (mis. "IBM") dan kemudian, klik tombol pencarian yang akan memberikan saya kembalikan semua pos yang memiliki bidang khusus bernama "supplier_name" dan, jika demikian, nilai bidang khusus tersebut adalah "IBM".

Bagaimana saya bisa melakukan ini?

Jawaban:


44

Saya memberi kode plugin hanya untuk itu dan tidak pernah sempat mempublikasikannya:

masukkan deskripsi gambar di sini

Pemakaian:

Di dropdown Anda memiliki daftar semua bidang khusus, jadi pilih saja bidang yang ingin Anda filter dan klik filter. jika Anda ingin memfilter ke nilai spesifik bidang khusus lalu pilih nama bidang itu, masukkan nilai yang Anda inginkan dan klik 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
}

7
Mengapa tidak menggunakan fungsi helper untuk kotak pilihan Anda? yaitu. ganti $field[0] == $current? ' selected="selected"':'', dengan selected( $field[0] == $current, true, false ),... :)
t31os

jawaban ini tidak berfungsi lagi.
Kir Mazur

Apakah ada cara untuk membuatnya berfungsi di WordPress versi terbaru?
nakkeru
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.