কাস্টম ফিল্ড (অনুসন্ধান কার্যকারিতা) ব্যবহার করে পোস্ট লিস্টিং (ডাব্লুপি ড্যাশবোর্ড পোস্টের তালিকাতে) কীভাবে ফিল্টার করবেন?


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

এই উত্তর আর কাজ করে না।
কির মাজুর

ওয়ার্ডপ্রেসের নতুন সংস্করণগুলিতে এটি কাজ করার কোনও উপায় আছে কি?
নাকেরু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.