আপনি যেমন উত্তর প্রদানের অভাব দ্বারা কল্পনা করতে পারেন, সমাধানটি একেবারে তুচ্ছ নয়। আমি যা করেছি তা হ'ল কিছুটা স্ব-অন্তর্ভুক্ত উদাহরণ তৈরি করুন যা 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()
। আমরা তা নিশ্চিত করার জন্য পরীক্ষা করি:
- আমরা অ্যাডমিনে (
is_admin()
),
- আমরা সেই পৃষ্ঠাতে রয়েছি যা প্রশাসকের পোস্টগুলিকে তালিকাভুক্ত করে (
$pagenow=='edit.php'
),
- পৃষ্ঠাটি
post_type
সমান movie
, এবং এর সাথে একটি URL প্যারামিটার সহ কল করা হয়েছে
- পৃষ্ঠাটি একটি
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()
দেখতে আর কি ডিফল্টরূপে পাওয়া যায়।)
আমি যখন " ইউআরএল প্যারামিটার " থাকি এবং কখন এটি না হয় তার জন্য একটি " সাজানো দ্বারা: " যুক্ত করার সিদ্ধান্ত নিয়েছি :sortby
None
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
আপনার বর্তমান থিমের নবাগত ক্ষেত্রে ফাইলের সম্ভাবনা বেশি ।
এটি কীভাবে সহায়তা করে।