কাস্টম ক্ষেত্রের মান দ্বারা পোস্টগুলি ফিল্টার করতে পোস্টের (কাস্টম ধরণের) প্রশাসকের তালিকাতে ফিল্টার মেনু যুক্ত করুন


45

এই উত্তরটি আমি যা করতে চাই তার খুব কাছাকাছি, তবে পরিবর্তে আমি একটি নির্দিষ্ট কাস্টম ক্ষেত্র নির্দিষ্ট করতে এবং এর উপলব্ধ মানগুলির একটি নির্বাচনী মেনু প্রদর্শন করতে চাই। ধন্যবাদ!


1
@ সোলসেকাহ স্টাফ চেষ্টা করার আগে দিকনির্দেশ জিজ্ঞাসা করা আইনী নয়?
frnhr

উত্তর:


73

সহজ কাজ, প্রথমে আপনার পছন্দসই মেটা মানগুলির সাথে ড্রপডাউন তৈরি করুন এবং তারপরে ফিল্টারটি জমা দিন, কেবল POST_TYPEআপনার পোস্টের META_KEYনাম এবং আপনার মেটা কী এর নাম পরিবর্তন করুন:

<?php
/*
Plugin Name: Admin Filter BY Custom Fields
Plugin URI: http://en.bainternet.info
Description: answer to http://wordpress.stackexchange.com/q/45436/2487
Version: 1.0
Author: Bainternet
Author URI: http://en.bainternet.info
*/

add_action( 'restrict_manage_posts', 'wpse45436_admin_posts_filter_restrict_manage_posts' );
/**
 * First create the dropdown
 * make sure to change POST_TYPE to the name of your custom post type
 * 
 * @author Ohad Raz
 * 
 * @return void
 */
function wpse45436_admin_posts_filter_restrict_manage_posts(){
    $type = 'post';
    if (isset($_GET['post_type'])) {
        $type = $_GET['post_type'];
    }

    //only add filter to post type you want
    if ('POST_TYPE' == $type){
        //change this to the list of values you want to show
        //in 'label' => 'value' format
        $values = array(
            'label' => 'value', 
            'label1' => 'value1',
            'label2' => 'value2',
        );
        ?>
        <select name="ADMIN_FILTER_FIELD_VALUE">
        <option value=""><?php _e('Filter By ', 'wose45436'); ?></option>
        <?php
            $current_v = isset($_GET['ADMIN_FILTER_FIELD_VALUE'])? $_GET['ADMIN_FILTER_FIELD_VALUE']:'';
            foreach ($values as $label => $value) {
                printf
                    (
                        '<option value="%s"%s>%s</option>',
                        $value,
                        $value == $current_v? ' selected="selected"':'',
                        $label
                    );
                }
        ?>
        </select>
        <?php
    }
}


add_filter( 'parse_query', 'wpse45436_posts_filter' );
/**
 * if submitted filter by post meta
 * 
 * make sure to change META_KEY to the actual meta key
 * and POST_TYPE to the name of your custom post type
 * @author Ohad Raz
 * @param  (wp_query object) $query
 * 
 * @return Void
 */
function wpse45436_posts_filter( $query ){
    global $pagenow;
    $type = 'post';
    if (isset($_GET['post_type'])) {
        $type = $_GET['post_type'];
    }
    if ( 'POST_TYPE' == $type && is_admin() && $pagenow=='edit.php' && isset($_GET['ADMIN_FILTER_FIELD_VALUE']) && $_GET['ADMIN_FILTER_FIELD_VALUE'] != '') {
        $query->query_vars['meta_key'] = 'META_KEY';
        $query->query_vars['meta_value'] = $_GET['ADMIN_FILTER_FIELD_VALUE'];
    }
}

অসাধারণ! আমার কাস্টম টাইপ পোস্ট পৃষ্ঠায় এটি প্রকাশ করতে সমস্যা হচ্ছে (টাইপ = প্রতিযোগিতা)। আপনি কি আমার ফাংশন.এফপি কোড চেক করতে পারেন দয়া করে? এটি কি কোনও বিদ্যমান প্লাগইন থেকে নেওয়া হয়েছে? পেস্টবিন.বি.বি.এম.আউআআউআউএনএইচ
adam5280

আপনি POST_TYPEএখানে চেষ্টা করে
দেখেননি

কাজ করে! ধন্যবাদ @ বেনটারনেট! $ প্রকার = 'পোস্ট'; লাইনে 65 পরিবর্তন করতে হবে। আবার ধন্যবাদ!
adam5280

:) কেবলমাত্র আপনাকে বদলাতে হবে না, এটি সেখানে ডিফল্ট, তবে এটিও ঠিক।
বাইনারনেট

2
এই উত্তরটি ওয়ার্ডপ্রেস ৪.৯.৫ এ ব্যবহার করে! এটি খুব সুন্দরভাবে বয়স্ক, আপনাকে ধন্যবাদ!
ডেভি

2

আপনি যদি ভিতরে অন্য কোনও ক্যোয়ারী ব্যবহার করে থাকেন restrict_manage_postsতবে নিশ্চিত হয়ে নিন যে আপনি && $query->is_main_query()বিবৃতিতে যদি আপনার পার্স- ক্যোয়ারিতে যুক্ত করেছেন, তা না হলে পার্স_কিউয়ের ফিল্টারটি সেই দ্বিতীয় ক্যোয়ারিতে হস্তক্ষেপ করবে।

if ( 'POST_TYPE' == $type
      && is_admin()
      && $pagenow=='edit.php'
      && isset($_GET['ADMIN_FILTER_FIELD_VALUE'])
      && $_GET['ADMIN_FILTER_FIELD_VALUE'] != ''
      && $query->is_main_query()
) {
      $query->query_vars['meta_key'] = 'META_KEY';
      $query->query_vars['meta_value'] = $_GET['ADMIN_FILTER_FIELD_VALUE'];
}

0

আপনাকে যদি অনেকগুলি ক্ষেত্র যুক্ত করতে হয় তবে আপনাকে ক্যোয়ারিতে যুক্ত করতে হবে

$query->query_vars['meta_query'][] = array(
    'key'     => 'KEY',
    'value'   => $_GET['FIELD'],
    'compare' => 'LIKE'
);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.