প্রথমে তারপরে স্ট্রিং সংখ্যার অর্ডার করতে অর্ডারবাই এবং মেটা_ভ্যালু_নাম ব্যবহার করে


16

আমার কাছে পণ্যগুলির একটি তালিকা রয়েছে, প্রতিটি "2.50" বা "5.00" এর মতো পাঠ্য হিসাবে সঞ্চিত কাস্টম ক্ষেত্রের দামের সাথে এবং আমি পৃষ্ঠাতে একটি কাস্টম ক্যোয়ারী দিয়ে দামটি অনুসারে প্রদর্শন করছি:

    if(!$wp_query) {
        global $wp_query;
    }

    $args = array(
        'meta_key' => 'price',
        'orderby' => 'meta_value_num',
        'order' => 'ASC'
    );

    query_posts( array_merge( $args , $wp_query->query ) );

দামগুলির জন্য এটি দুর্দান্ত কাজ করে তবে কিছু দাম "পিওএ" হয় এবং আমি এগুলি শেষ দেখাতে চাই, তবে উপরোক্ত আদেশগুলি এমনভাবে যাতে "পিওএ" প্রথমে প্রদর্শিত হয়।

এটি পরিবর্তন করার কোনও উপায় আছে কি না, বা তড়িৎ হ্যাক আমি পরে অ্যারেটি বাছাই করতে এবং কোনও "পিওএ" দাম সর্বশেষে রাখার জন্য ব্যবহার করতে পারি?


পরিবর্তনের চেষ্টা 'orderby' => 'meta_value_num', করতে'orderby' => 'meta_value_num meta_value',
Bainternet

ধন্যবাদ তবে এটি কার্যকর হয় না :(
শন

আহা! কিন্তু অন্য উপায় কাজ করে না meta_value meta_value_num! ধন্যবাদ! আপনি কি একটি উত্তর লিখতে চান যাতে আমি এটিতে ভোট দিতে পারি?
শান

1
যারা মন্তব্য পড়েন না তাদের উত্তর হিসাবে পোস্ট করেছেন।
বেন্টারনেট

কেনা একটি তালিকা ব্যাখ্যা মানে হলো "জিজ্ঞাসা মূল্য" en.wikipedia.org/wiki/Price_on_application
সুদীপ

উত্তর:


23

OrderByযুক্তি আরও তারপর এক পরামিতি গ্রহণ করতে পারেন, যাতে সমাধান পরিবর্তনের ছিল:

'orderby' => 'meta_value_num',

প্রতি:

'orderby' => 'meta_value meta_value_num',

3
এটি কেবল বর্ণমালা অনুসারে বাছাই করে, কারণ দ্বিতীয় প্যারামিটারটি কোনও অন-অপশন, একই ক্ষেত্রটিতে কোনও প্রভাব ছাড়াই বাছাই করে। এটি করার জন্য যাতে সংখ্যাগুলি সংখ্যা অনুসারে এবং বর্ণমালা বর্ণমালা অনুসারে বাছাই করা হয় তবে আপনি কোনও ফিল্টার ব্যবহার করতে পারেন যাতে অর্ডারবাইকে কিছু ধরণের এসকিউএল কেসিং ব্যবহার করতে হয়, যেমনORDER BY CASE WHEN wp_postmeta.meta_value RLIKE '^[0-9]' THEN '' ELSE wp_postmeta.meta_value END ASC, wp_postmeta.meta_value+0 ASC
বোনজার

@ ব্রোঞ্জার ধন্যবাদ! আপনার সমাধান এই সমস্যার সম্পূর্ণ সমাধান। এবং এখানে আপনার কোয়েরিটি রাখা হয়েছে এমন কোডের বাকি অংশ। আমি নতুন দর্শকদের উত্তর হিসাবে এটি পোস্ট করতে যাচ্ছি।
গাঙ্গেশ

2

আমি @ ব্রোজার এবং /programming/18084199/wordpress-query-order-by- কেস- দ্বারা কোড সংযুক্ত করে এই সমাধানটি পেয়েছি

এবং এটি ভাল কাজ করে।

ক্রিয়া

function filter_case($orderby = '') {
  $orderby .= "CASE WHEN wp_postmeta.meta_value RLIKE '^[0-9]' THEN '' ELSE wp_postmeta.meta_value END ASC, wp_postmeta.meta_value+0 ASC";
  return $orderby;
}

প্রশ্নের আগে

add_filter( 'posts_orderby', 'filter_case' );

$wp_query = new WP_Query($args);

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