কাস্টম ফিল্ড দ্বারা কোনও ওয়ার্ডপ্রেস কাস্টম পোস্ট প্রকারের প্রশাসক অঞ্চলকে কীভাবে সাজানো যায়


52

আমার কাস্টম পোস্ট ধরণের একটি সম্পাদনা করার সময় আমি কাস্টম ফিল্ডের দ্বারা সমস্ত এন্ট্রি প্রকাশের তারিখের পরিবর্তে কাস্টম ফিল্ড দ্বারা তালিকাবদ্ধ করতে সক্ষম হতে চাই (যা কোনও কাস্টম পোস্টের জন্য সম্ভবত প্রাসঙ্গিক নয়)। আমি কাস্টম পোস্টের ধরণের সম্পর্কে একটি ব্লগ পোস্টের মন্তব্যে নেতৃত্ব পেয়েছি এবং লেখক বলেছিলেন যে এটি সম্ভব এবং তিনি এমনকি এটি তৈরি করেছেন যাতে আপনি কাস্টম সাজানোর জন্য কলামের নামগুলিতে ক্লিক করতে পারেন। তিনি posts_orderbyআমার নিজের মন্তব্যে যে ফাংশনটি উল্লেখ করেছিলেন তা উল্লেখ করেছিলেন তবে এখন আমি ব্লগ পোস্টটি আর খুঁজে পেতে পারি। কোনও পরামর্শ? আমি একটি সমাধান ব্যবহার করে দেখেছি

add_action('wp', 'check_page');

এবং check_pageফাংশনটি add_filterক্যোয়ারীটি পরিবর্তন করতে ব্যবহৃত হয়েছিল তবে আমি নিশ্চিত যে এটি কেবল থিম ফাইলগুলিতে কাজ করবে, অ্যাডমিন অঞ্চলে নয়।


1
এখানে আরও দরকারী উত্তর, পোস্টগুলি বাছাই করার জন্য .... <br/> ওয়ার্ডপ্রেস.স্ট্যাকেক্সেঞ্জার
প্রশ্নস

উত্তর:


66

আপনি যেমন উত্তর প্রদানের অভাব দ্বারা কল্পনা করতে পারেন, সমাধানটি একেবারে তুচ্ছ নয়। আমি যা করেছি তা হ'ল কিছুটা স্ব-অন্তর্ভুক্ত উদাহরণ তৈরি করুন যা movie" জেনার " এর একটি কাস্টম পোস্ট ধরণের " " এবং কাস্টম ফিল্ড কী ধরে নেয় ।

দাবি অস্বীকার: এটি WP3.0 এর সাথে কাজ করে তবে আমি নিশ্চিত হতে পারি না এটি পূর্ববর্তী সংস্করণগুলির সাথে কাজ করবে।

এটিকে সুস্পষ্ট এবং কার্যকর করার জন্য আপনাকে মূলত দুটি (2) হুক এবং অন্য দুটি (2) হুক করা দরকার।

প্রথম হুকটি ' restrict_manage_posts' যা আপনাকে <select>" বাল্ক অ্যাকশনস " এবং " তারিখগুলি দেখান " ফিল্টারগুলির পোস্টের তালিকার উপরে অবস্থিত একটি HTML নির্গত করতে দেয় । প্রদত্ত কোডটি "এই অনুসারে বাছাই করুন: " কার্যকারিতাটি এই স্ক্রিনের স্নিপেটে দেখা হিসাবে তৈরি করবে :

ওয়ার্ডপ্রেস অ্যাডমিনে একটি কাস্টম পোস্ট প্রকারের জন্য কার্যকারিতা অনুসারে বাছাই কিভাবে করবেন
(সূত্র: মাইকসচিনেল.কম )

কারণ একটি পোস্ট ধরনের জন্য সব meta_keys তালিকা প্রদান একটি ওয়ার্ডপ্রেস এপিআই ফাংশন নয় সেখানে কোড সরাসরি SQL এর ব্যবহার (ভবিষ্যতে মত শোনাচ্ছে TRAC আমাকে টিকেট ...) যাই হোক, এখানে কোড আছে। নোট করুন যে এটি পোস্টের ধরণটি গ্রাহক করে $_GETএবং এটি উভয়ই বৈধ পোস্ট প্রকারের post_type_exists()পাশাপাশি movieপোস্ট টাইপ হওয়ার বিষয়টি নিশ্চিত করে যাচাই করে (এই দুটি চেককে ওভারকিল করা হয় তবে আমি আপনাকে দেখানোর জন্য এটি করেছি যাতে আপনি কী করতে চান না- । কোড পোস্টে টাইপ) সর্বশেষে আমি ব্যবহার sortbyযেমন ওয়ার্ডপ্রেস অন্য কিছু দিয়ে বিরোধ সৃষ্টি না হওয়া URL মাপদণ্ড:

add_action('restrict_manage_posts','restrict_manage_movie_sort_by_genre');
function restrict_manage_movie_sort_by_genre() {
    if (isset($_GET['post_type'])) {
        $post_type = $_GET['post_type'];
        if (post_type_exists($post_type) && $post_type=='movie') {
            global $wpdb;
            $sql=<<<SQL
SELECT pm.meta_key FROM {$wpdb->postmeta} pm
INNER JOIN {$wpdb->posts} p ON p.ID=pm.post_id
WHERE p.post_type='movie' AND pm.meta_key='Genre'
GROUP BY pm.meta_key
ORDER BY pm.meta_key
SQL;
            $results = $wpdb->get_results($sql);
            $html = array();
            $html[] = "<select id=\"sortby\" name=\"sortby\">";
            $html[] = "<option value=\"None\">No Sort</option>";
            $this_sort = $_GET['sortby'];
            foreach($results as $meta_key) {
                $default = ($this_sort==$meta_key->meta_key ? ' selected="selected"' : '');
                $value = esc_attr($meta_key->meta_key);
                $html[] = "<option value=\"{$meta_key->meta_key}\"$default>{$value}</option>";
            }
            $html[] = "</select>";
            echo "Sort by: " . implode("\n",$html);
        }
    }
}

দ্বিতীয় প্রয়োজনীয় পদক্ষেপটি parse_queryহুক ব্যবহার করা হয় যা ওয়ার্ডপ্রেসের পরে ডাকা হয় যা কোয়েরিটি চালানো উচিত তা স্থির করে তবে কোয়েরি চালানোর আগে। এখানে আমরা মান সেট পেতে orderbyএবং meta_keyকোয়েরি এর query_varঅ্যারে যা করছে কোডেক্স মধ্যে নথিভুক্ত মধ্যে orderbyজন্য প্যারামিটার query_posts()। আমরা তা নিশ্চিত করার জন্য পরীক্ষা করি:

  1. আমরা অ্যাডমিনে ( is_admin()),
  2. আমরা সেই পৃষ্ঠাতে রয়েছি যা প্রশাসকের পোস্টগুলিকে তালিকাভুক্ত করে ( $pagenow=='edit.php'),
  3. পৃষ্ঠাটি post_typeসমান movie, এবং এর সাথে একটি URL প্যারামিটার সহ কল ​​করা হয়েছে
  4. পৃষ্ঠাটি একটি sortbyইউআরএল প্যারামিটার সহ আহ্বান করা হয়েছিল এবং এটি ' কিছুই নয় ' এর মান পাস করা হয়নি

যদি এই সমস্ত পরীক্ষা পাস হয় তবে আমরা ' জেনার' -এর জন্য query_vars( এখানে ডকুমেন্টেড হিসাবে ) meta_valueএবং আমাদের sortbyমান সেট করি :

add_filter( 'parse_query', 'sort_movie_by_meta_value' );
function sort_movie_by_meta_value($query) {
    global $pagenow;
    if (is_admin() && $pagenow=='edit.php' &&
        isset($_GET['post_type']) && $_GET['post_type']=='movie' && 
        isset($_GET['sortby'])  && $_GET['sortby'] !='None')  {
        $query->query_vars['orderby'] = 'meta_value';
        $query->query_vars['meta_key'] = $_GET['sortby'];
    }
}

এবং আপনার যা করা দরকার তা হ'ল; কোন " posts_order" বা " wp" হুক প্রয়োজন! অবশ্যই আপনার আরও কিছু করা দরকার; আপনার পৃষ্ঠায় এমন কিছু কলাম যুক্ত করতে হবে যা পোস্টগুলি তালিকাভুক্ত করে যাতে আপনি প্রকৃতপক্ষে যে মানগুলি বাছাই করে তা দেখতে পান অন্যথায় ব্যবহারকারীরা বিভ্রান্ত হয়ে পড়বে। সুতরাং manage_{$post_type}_posts_columnsএই ক্ষেত্রে একটি হুক যোগ করুন manage_movie_posts_columns। এই হুকটি কলামের ডিফল্ট অ্যারে পাস করেছে এবং সরলতার জন্য আমি কেবল দুটি স্ট্যান্ডার্ড কলাম দিয়ে এটি প্রতিস্থাপন করেছি; একটি চেকবক্স ( cb) এবং একটি পোস্টের নাম ( title)। (আপনি পরিদর্শন করতে পারেন posts_columnsএকটি সঙ্গে print_r()দেখতে আর কি ডিফল্টরূপে পাওয়া যায়।)

আমি যখন " ইউআরএল প্যারামিটার " থাকি এবং কখন এটি না হয় তার জন্য একটি " সাজানো দ্বারা: " যুক্ত করার সিদ্ধান্ত নিয়েছি :sortbyNone

add_action('manage_movie_posts_columns', 'manage_movie_posts_columns');
function manage_movie_posts_columns($posts_columns) {
    $posts_columns = array(
        'cb' => $posts_columns['cb'],
        'title' => 'Movie Name',
        );
    if (isset($_GET['sortby']) && $_GET['sortby'] !='None') 
        $posts_columns['meta_value'] = 'Sorted By';

    return $posts_columns;
}

অবশেষে আমরা ব্যবহার manage_pages_custom_columnআসলে মান প্রদর্শন করে উপযুক্ত পোস্টের প্রকারের একটি পোস্ট আছে যখন এবং জন্য সম্ভবত অপ্রয়োজনীয় পরীক্ষা দিয়ে হুক is_admin()এবং $pagenow=='edit.php'। যখন কোনও sortbyইউআরএল প্যারামিটার থাকে আমরা কাস্টম ক্ষেত্রের মানটি বের করি যা এটি আমাদের তালিকায় প্রদর্শিত একটি ডিসপ্লে অনুসারে বাছাই করা হয়। এটি দেখতে কেমন দেখাচ্ছে তা এখানে (মনে রাখবেন, এটি পরীক্ষার ডেটা তাই চলচ্চিত্রের শ্রেণিবিন্যাসে চিনাবাদাম গ্যালারী থেকে কোনও মন্তব্য নেই! :):

ওয়ার্ডপ্রেস প্রশাসনে একটি কাস্টম পোস্ট প্রকারের জন্য কাস্টম কলামগুলি যুক্ত করা হয়েছে
(সূত্র: মাইকসচিনেল.কম )

এবং এখানে কোড:

add_action('manage_pages_custom_column', 'manage_movie_pages_custom_column',10,2);
function manage_movie_pages_custom_column($column_name,$post_id) {
    global $pagenow;
    $post = get_post($post_id);
    if ($post->post_type=='movie' && is_admin() && $pagenow=='edit.php')  {
        switch ($column_name) {
            case 'meta_value':
                if (isset($_GET['sortby']) && $_GET['sortby'] !='None') {
                    echo get_post_meta($post_id,$_GET['sortby'],true);
                }
                break;
        }
    }
}

নোট করুন যে এটি কেবল একটির জন্য প্রথম " জেনার " তুলে movieধরেছে, যেমন প্রদত্ত কীটির জন্য একাধিক মানের ক্ষেত্রে প্রথম মেটা_ভ্যালু। তবে তখন আমি নিশ্চিত নই যে এটি অন্যথায় কীভাবে কাজ করবে!

এবং এই কোডটি কোথায় রাখবেন তার সাথে অপরিচিতদের জন্য আপনি এটিকে একটি প্লাগিনে রাখতে পারেন বা functions.phpআপনার বর্তমান থিমের নবাগত ক্ষেত্রে ফাইলের সম্ভাবনা বেশি ।

এটি কীভাবে সহায়তা করে।


2
+1, কেবল চেষ্টা করার জন্য। তবে আরও ভাল হবে যদি চেনাশোনাগুলি হাতে
আঁকানো

সমস্ত দেখানোর ফিল্টার সম্পূর্ণরূপে কীভাবে সরিয়ে ফেলতে হয় তার কোনও ধারণা যাতে কেবলমাত্র আমার কাস্টম ফিল্টার কোনও প্রদত্ত পোস্টের ধরণের জন্য প্রদর্শিত হয়?
রেইলসওয়েটার

@ রেলটুইটার আপনি যে কৌশলটি এখানে দেখিয়েছেন সেগুলি ব্যবহার করুন যেখানে এইচটিএমএল প্রজন্মের বন্ধনী দুটি হুক 'months_dropdown_results'এবং 'restrict_manage_posts'। পিএস উপভোটস সর্বদা প্রশংসিত হয়। :)
মাইকচিনকেল

@ মাইকস্কিঙ্কেল, এখন একটি ডাব্লুপিআই এপিআই রয়েছে, এটি কি আপনার কোডটি কিছুটা আপডেট করবে?
সামজকো

@ সামজকো নিশ্চিত নয় দুর্ভাগ্যক্রমে আমার এই মুহূর্তে এটি সংশোধন করার সময় নেই।
মাইকচিন্কেল

8

ওয়ার্ডপ্রেস ৩.১ হিসাবে (আমি বিটা ব্যবহার করছি) কলামগুলি এখন তাদের শিরোনামগুলির মাধ্যমে বাছাইযোগ্য হতে পারে।

সেগুলি কীভাবে বাস্তবায়ন করা যায় তার নিচের পোস্টে বিশদ

http://scribu.net/wordpress/custom-sortable-columns.html


-1

এখানে একটি সহজ সমাধান:

/* --------Sortable Events on Dashboard - show start date, time, venue--------- */

/*-------------------------------------------------------------------------------
    Custom Columns
-------------------------------------------------------------------------------*/

function my_*YOUR POST TYPE*_columns($columns)
{
    $columns = array(
        'cb'        => '<input type="checkbox" />',
        'title'     => 'Title',
        'your_custom_field'     => 'Custom Field Name',          
        'date'      =>  'Date',
    );
    return $columns;
}

function my_custom_columns($column)
{
    global $post;
    if($column == 'your_custom_field')
    {
        if(get_post_meta($post->ID, 'your_custom_field', true);)
        {
            echo get_post_meta($post->ID, 'your_custom_field', true);
        }
    }

}

add_action("manage_posts_custom_column", "my_custom_columns");
add_filter("manage_edit-*YOUR POST TYPE*_columns", "my_events_columns");

/*-------------------------------------------------------------------------------
    Sortable Columns
-------------------------------------------------------------------------------*/

function my_column_register_sortable( $columns )
{
    $columns['your_custom_field'] = 'your_custom_field';
    return $columns;
}

add_filter("manage_edit-*YOUR POST TYPE*_sortable_columns", "my_column_register_sortable" );

কেবলমাত্র আপনার পোষ্ট টাইপ এবং 'আপনার_কাস্টম_ফিল্ড' প্রতিস্থাপন করুন

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