আমি pre_get_posts
ফিল্টারটি ব্যবহার করে বিল্ট-ইন ডাব্লুপি অনুসন্ধানটি সংশোধন করছি , ব্যবহারকারীকে বিভিন্ন ক্ষেত্র দ্বারা পোস্টগুলি (কাস্টম পোস্টের ধরণ সহ) বাছাই করার অনুমতি দিয়েছি ।
আমার সমস্যাটি হ'ল আমি যখন ডাব্লুপিপিকে একটি মেটা মান অনুসারে বাছাই করতে বলি তখন সেই সমস্ত মেটাও বাদ দেওয়া হবে যা মেটা মান সেট করে না। যদি আপনি "দাম" থেকে "তারিখ" হিসাবে বাছাই করে পরিবর্তনগুলি পরিবর্তন করেন তবে "পোস্টস" এর "মূল্য" সেট নেই তবে "আইটেম" রয়েছে results
এটি আমি যা চাই তা নয়, তাই আমি জানতে চাই যে সমস্ত পোস্ট অন্তর্ভুক্ত করার কোনও উপায় আছে কিনা - এমনকি আমি যে মেটা মানটি বাছাই করছি তারও অভাব আছে - এবং মানটি ছাড়াই নিজের পোস্টটি রাখি।
আমি একাধিক ক্ষেত্রে কীভাবে বাছাই করতে জানি তা কিন্তু কার্যকর হয় না।
ধন্যবাদ
মনে হচ্ছে এই প্রশ্নটির সাথে আমিই একমাত্র নই: ডাব্লুপি_কোয়ারির জন্য যুক্তিগুলিতে নির্দিষ্ট মেটা_কি ছাড়া এবং উভয়ই পোস্ট যুক্ত করার উপায়? কিন্তু সেখানে কোন সমাধান নেই।
হালনাগাদ
আমি উত্তরটি চেষ্টা করেছি তবে আমি সঠিকভাবে বুঝতে পেরেছি কিনা তা নিশ্চিত নই, আমার এখনই যা আছে তা এখানে:
<?php
function my_stuff ($qry) {
$qry->set('meta_query', array(array(
'key' => 'item_price',
'value' => '',
'compare' => 'NOT EXISTS'
)));
$qry->set('orderby', 'meta_value date'); # Sorting works with meta_value as well as meta_value_num - I've tried both
$qry->set('order', 'ASC DESC');
$qry->set('meta_key', 'item_price');
}
মেটা মান হ'ল একটি সংখ্যা (এটি নাম অনুসারে দাম সঞ্চয় করতে ব্যবহৃত হয়)
আপডেট 2
আমি অর্ডার-স্টাফ মন্তব্য করেছি এবং আমার এখন যা আছে তা হ'ল:
<?php
$qry->set('meta_query', array(array(
'key' => 'item_price',
'value' => '',
'compare' => 'NOT EXISTS'
)));
এই কোডটি দিয়ে ক্যোরিয়াকে এমন সমস্ত পোস্ট ফেরত দেওয়া হবে যাতে item_price
কী নেই এবং যে পোস্টগুলি নেই সেগুলির কোনওই নেই। IE সমস্যা এখন বিপরীত।
যদি আমি পাশাপাশি অর্ডার-কোড যুক্ত করি তবে আমি 0 টি ফলাফল পেয়েছি।
সম্পাদনা: ... তিন বছর পরে ... : পিআই আবার এই সমস্যা ছিল। আমি প্রদত্ত সমস্ত উত্তর চেষ্টা করেছিলাম এবং কোনওটিই কাজ করে না। কিছু লোকের মনে হয় কেন তারা কাজ করে বলে মনে হয় তবে তারা আমার পক্ষে কমপক্ষে কাজ করে না।
আমি যে সমাধানটি দিয়ে শেষ করেছিলাম তা হ'ল save_post
ফিল্টারটি ব্যবহার করে - তা নিশ্চিত করে যে সমস্ত পোস্টের কাস্টম ক্ষেত্রটি আমার বাছাই করতে চায়। এটি কিছুটা বিরক্তিকর আমার করতে হবে, তবে যতক্ষণ না আপনি তা তাড়াতাড়ি করবেন আপনার সম্ভবত কোনও সমস্যা হবে না।
এই ক্ষেত্রে আমি পোস্টগুলিতে একটি "ভিউ কাউন্টার" তৈরি করেছিলাম এবং ব্যবহারকারীরা সর্বাধিক পঠিত পোস্টগুলিতে বাছাই করতে সক্ষম হতে চেয়েছিলেন। আবার, যে পোস্টগুলি কখনও দেখা যায় নি (আমার ধারণা এটি সম্ভবত অসম্ভব - তবে এখনও) ভিউ কাউন্ট অনুসারে বাছাই করার পরে অদৃশ্য হয়ে গেছে। সমস্ত পোস্টের একটি ভিউ গণনা আছে তা নিশ্চিত করতে আমি এই বিট কোডটি যুক্ত করেছি:
add_action('save_post', function ($postId) {
add_post_meta($postId, '_sleek_view_count', 0, true);
});
meta_query
এবং tax_query
হয় সবসময় একটি array( array() )
হিসাবে তারা একাধিক অ্যারে একত্র করি। দ্বিতীয় - আমার উত্তর হিসাবে উল্লিখিত - আপনি meta_value_num
সংখ্যা জন্য ব্যবহার করা প্রয়োজন । এটির পাশাপাশি প্রকৃতপক্ষে সংজ্ঞা দেওয়ার meta_value_num
জন্য WP_Query
এটিও প্রয়োজন হতে পারে (দেখুন কোডেক্স পৃষ্ঠাটি প্রবেশ করুন)। সর্বশেষ, এটি জানার জন্য না order
যে ASC
ও DESC
দিক। এটা সম্ভব না. স্পেস ডিলিমিটার কেবল তার জন্য কাজ করে orderby
এবং আপনি এটি প্রথম ASC
এবং দ্বিতীয়টি বাছাই করতে বলতে পারবেন না DESC
। যে কি posts_clauses
ফিল্টার জন্য।
meta_value_num
এন্ট্রিগুলি আসল সংখ্যা। এটি প্রায়শই দেখা গেছে যে কেউ বলেছেন যে এটি একটি সংখ্যা, তবে বাস্তবে এটি ডাটাবেসের একটি স্ট্রিং হিসাবে সংরক্ষণ করছে।
ASC DESC
এটি উপর প্রকারের তাই meta_value
এ ASC
এবং date
এ DESC
, যতটা আমি বলতে পারেন এটি কাজ করে।