कस्टम फ़ील्ड (खोज कार्यक्षमता) का उपयोग करके पोस्ट लिस्टिंग (WP डैशबोर्ड पोस्ट लिस्टिंग में) फ़िल्टर कैसे करें?


37

इस तथ्य के बावजूद कि मैंने बहुत कुछ किया, मुझे एक बहुत ही सरल प्रश्न का उत्तर नहीं मिला:

मेरे पास एक कस्टम फ़ील्ड (यानी आपूर्तिकर्ता_नाम) के साथ कुछ पोस्ट हैं। मैं इस कस्टम फ़ील्ड के अनुसार अपने पोस्ट खोजना और फ़िल्टर करना चाहूंगा। दूसरे शब्दों में, व्यवस्थापक पोस्ट लिस्टिंग में, मैं एक खोज बॉक्स ("आपूर्तिकर्ता नाम" नाम) रखना चाहूंगा, जहां मैं एक मान (उदा। "आईबीएम") टाइप कर सकता हूं और फिर, एक खोज बटन पर क्लिक करें जो कि देगा। मुझे उन सभी पोस्टों को वापस करना होगा जिनके पास "आपूर्तिकर्ता_नाम" नाम का एक कस्टम फ़ील्ड है और, यदि हां, तो कस्टम फ़ील्ड का मूल्य "आईबीएम" होगा।

मैं यह कैसे कर सकता हूँ ?

जवाबों:


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

यह जवाब अब काम नहीं करता है।
किरण मजूर

क्या यह वर्डप्रेस के नवीनतम संस्करणों में काम करने का एक तरीका है?
नकेरु
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.