사용자 정의 필드 (검색 기능)를 사용하여 게시물 목록 (WP 대시 보드 게시물 목록)을 필터링하는 방법은 무엇입니까?


37

내가 많이 봤다는 사실에도 불구하고 매우 간단한 질문에 대한 답을 찾지 못했습니다.

사용자 정의 필드 (예 : supplier_name)가있는 게시물이 있습니다. 이 맞춤 입력란에 따라 게시물을 검색하고 필터링 할 수 있기를 원합니다. 즉, 관리자 게시물 목록에서 값 (예 : "IBM")을 입력 할 수있는 검색 상자 ( "공급자 이름")를 만들고 싶은데 검색 버튼을 클릭하면됩니다. "supplier_name"이라는 사용자 정의 필드가있는 모든 게시물을 되돌려 받으면 사용자 정의 필드의 값은 "IBM"입니다.

어떻게해야합니까?

답변:


44

나는 단지 그것을 위해 플러그인을 코딩했고 그것을 출판하려고하지 않았다.

여기에 이미지 설명을 입력하십시오

용법:

드롭 다운에는 모든 사용자 정의 필드 목록이 있으므로 필터링하려는 필드를 선택하고 필터를 클릭하십시오. 사용자 정의 필드의 특정 값으로 필터링하려면 필드 이름을 선택하고 원하는 값을 입력 한 후 필터를 클릭하십시오.

<?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
선택 상자에 도우미 기능을 사용하지 않겠습니까? 즉. 교체 $field[0] == $current? ' selected="selected"':'', selected( $field[0] == $current, true, false ),... :)
t31os

이 답변은 더 이상 작동하지 않습니다.
Kir Mazur

최신 버전의 WordPress에서 작동하게하는 방법이 있습니까?
nakkeru
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.