ডাব্লুপি কোয়েরি_পোস্টগুলি মেটা_কোয়রিতে তারিখের তুলনা করার সঠিক উপায় কী?


32

আমার একটি ডাব্লুপি টেমপ্লেটে একটি ক্যুরি_পোস্ট কল রয়েছে call মোর ফিল্ডস প্লাগইন ব্যবহারের মাধ্যমে আমি সাইট প্রশাসককে একটি ইভেন্ট (কাস্টম পোস্টের ধরণ) তৈরি করতে এবং তারপরে একটি ফর্ম্যাট করা তারিখটি প্রবেশ করতে সক্ষম করতে পারি: YYYY / মিমি / ডিডি।

মূল প্রশ্নটি হ'ল; মেটা_কোয়ারির অ্যারেতে মান বিকল্পটিতে আমার কী মানটি পাঠানো উচিত? আমি বর্তমানে "তারিখ (" ওয়াই / এম / ডিএইচ: আই এ ")" (মাইনাস কোটস) পাস করার চেষ্টা করছি, কারণ, আমি যেমন এটি বুঝতে পেরেছি, সেটাই আজকের তারিখটি মুদ্রণ করবে। আমি তারিখের সময়টির বিষয়ে চিন্তা করি না যাতে এটি অপ্রাসঙ্গিক হতে পারে। চূড়ান্তভাবে আমি এই সাইটের বিভিন্ন স্থানে আসন্ন ইভেন্টগুলি, অতীতের ইভেন্টগুলি দেখিয়ে পেরেক করার জন্য তুলনা বিকল্পটি ব্যবহার করার চেষ্টা করছি। অন্য একটি জায়গায় আমি আসলে মান বিকল্পটি এমন একটি অ্যারে পাস করতে হবে যা চলতি মাসের প্রথম এবং শেষ দিনটিকে এই মাসে ঘটে যাওয়া ইভেন্টগুলিতে সীমাবদ্ধ করে মুদ্রণ করে।

<?php 
            query_posts( array( 
              'post_type'  => 'event',        // only query events
              'meta_key'    => 'event_date',  // load up the event_date meta
              'orderby'     => 'meta_value',  // sort by the event_date
              'order'       => 'asc',         // ascending, so earlier events first
              'posts_per_page' => '2',
              'meta_query'  => array(         // restrict posts based on meta values
                  'key'     => 'event_date',  // which meta to query
                  'value'   => date("Y/m/d h:i A"),  // value for comparison
                  'compare' => '>=',          // method of comparison
                  'type'    => 'DATE'         // datatype, we don't want to compare the string values
                ) // end meta_query array
              ) // end array
            ); // close query_posts call
                 ?>

উত্তর:


44

আমি একই জিনিস নিয়ে কাজ করেছিলাম এবং এই পোস্টটি খুব সহায়ক ছিল। আমি কাস্টম ক্ষেত্রগুলি ব্যবহার করেছি এবং এখানে কোডটি আমি বর্তমান তারিখের চেয়ে বড় সমস্ত ইভেন্টের একটি তালিকা তৈরি করতে ব্যবহার করেছি । অতিরিক্ত শ্রেণীবদ্ধ ভিত্তিক ফিল্টারগুলি নোট করুন।

<?php // Let's get the data we need to loop through below

$events = new WP_Query( 
    array(
        'post_type' => 'event', // Tell WordPress which post type we want
        'orderby' => 'meta_value', // We want to organize the events by date    
        'meta_key' => 'event-start-date', // Grab the "start date" field created via "More Fields" plugin (stored in YYYY-MM-DD format)
        'order' => 'ASC', // ASC is the other option    
        'posts_per_page' => '-1', // Let's show them all.   
        'meta_query' => array( // WordPress has all the results, now, return only the events after today's date
            array(
                'key' => 'event-start-date', // Check the start date field
                'value' => date("Y-m-d"), // Set today's date (note the similar format)
                'compare' => '>=', // Return the ones greater than today's date
                'type' => 'DATE' // Let WordPress know we're working with date
                )
            ),
        'tax_query' => array( // Return only concerts (event-types) and events where "songs-of-ascent" is performing
            array(
                'taxonomy' => 'event-types',
                'field' => 'slug',
                'terms' => 'concert',
                ),
            array(
                'taxonomy' => 'speakers',
                'field' => 'slug',
                'terms' => 'songs-of-ascent',
                )
            )
        )
    );
?>

5
কেন না 'type' => 'DATE'?
ফ্রান্সিসকো

আমি @ ফ্রেঞ্চিসকো কররেলেস মোরেলেসের সন্দেহগুলি নিশ্চিত করতে পারি: আপনাকে 'তারিখ' প্রকারটি নির্দিষ্ট করতে হবে, বিশেষ করে কারণ তারিখের মেটা ক্ষেত্রগুলি সংখ্যা হিসাবে নয় তবে "ওয়াইএমডি" আকারে সংরক্ষণ করা হয়েছে (দয়া করে হাইফেনগুলি লক্ষ্য করুন)। আমি জোনাথনের উত্তর সম্পাদনা করেছি।
মার্কো পানিচি

আন্তর্জাতিকীকরণের জন্য, আপনি date_i18n()পিএইচপি নেটিভের পরিবর্তে ওয়ার্ডপ্রেস ফাংশনটি ব্যবহার করতে চাইতে পারেন date()
জেক

7

এটি আপনার তারিখটি প্রথম স্থানে মেটা মানে কীভাবে সংরক্ষণ করা হয় তার উপর নির্ভর করে। সাধারণভাবে, মাইএসকিউএলে তারিখগুলি মাইএসকিউএল তারিখ / টাইমস্ট্যাম্প হিসাবে সংরক্ষণ করা ভাল ধারণা।

মাইএসকিউএল টাইমস্ট্যাম্পগুলির ফর্ম্যাট রয়েছে Y-m-d h:i:s

তবে ডাব্লুপির নিজস্ব তারিখ ম্যাংলিং ফাংশন ব্যবহার করা সর্বদা একটি ভাল ধারণা। যেমন, মাইএসকিউএল ফর্ম্যাটে বর্তমান তারিখটি পেতে, ব্যবহার করুন current_time('mysql')

প্রদর্শনের জন্য একটি মাইএসকিউএল তারিখ ফর্ম্যাট করতে, ব্যবহার করুন mysql2date($format, $mysql_date)। এই ক্ষেত্রে সেটিংসে কনফিগার করা হিসাবে তারিখটি প্রদর্শন করা ভাল, তাই ব্যবহার করুন $format = get_option('date_format');

কোনও ব্যবহারকারী-নির্বাচিত তারিখ সঞ্চয় করতে, আপনাকে এটি একটি মাইএসকিউএল তারিখে ট্রান্সকোড করতে হবে। এটি করার জন্য, সবচেয়ে সহজ - তবে সবচেয়ে নিরাপদ নয় - উপায় date('Y-m-d h:i:s', $unix_timestamp);$unix_timestampপ্রায়শই মাধ্যমে প্রাপ্ত হতে পারে strtotime($user_input)

যাইহোক, strtotime()নিজস্বতাতে স্যানিটি চেক করবেন না, তাই আপনার নিজের কথোপকথনের ফাংশনটি লেখাই ভাল।

মাসের পরিসর পাওয়ার ক্ষেত্রে এখানে কোনও মাইএসকিউএল টাইমস্ট্যাম্পের জন্য মাসের সীমানা পেতে আমি একটি ফাংশন ব্যবহার করছি:

function get_monthrange($time) {
    $ym = date("Y-m", strtotime($time));
    $start = $ym."-01";
    $ym = explode("-", $ym);
    if ($ym[1] == 12) {
        $ym[0]++; $ym[1] = 1;
    } else {
        $ym[1]++;
    }
    $d = mktime( 0, 0, 0, $ym[1], 1, $ym[0] );
    $d -= 86400;
    $end = date("Y-m-d", $d);
    return array( $start, $end );
}

আপনি যদি সপ্তাহের সীমানা পেতে চান তবে ডাব্লুপি ইতিমধ্যে এর জন্য একটি ফাংশন নিয়ে আসে: get_weekstartend($time);এটি একটি অ্যারের হিসাবে সীমাও সরবরাহ করে।

তারপরে আপনি meta_queryদুটি পৃথক তুলনা করে আপনার যুক্তিতে এটি ব্যবহার করতে পারেন ।


আপনি কি বোঝাতে চাইছেন না যে "মাইএসকিউএল টাইমস্ট্যাম্পগুলির ফর্ম্যাট আছে Y-m-d G:i:s"? G:i:s24 ঘন্টা, h:i:sহয় 12 ঘন্টা।
adcfajn

3

আমি নিম্নলিখিত সঙ্গে যেতে ক্ষত। আমি একটি ইভেন্ট-মাঠের ক্ষেত্র সেটআপ করি এবং সেখান থেকে তুলনা করি। সাহায্যের জন্য ধন্যবাদ

<?php 
        $event_query = new WP_Query(
        array( 
          'post_type'   => 'event',        // only query events
          'meta_key'    => 'event-month',  // load up the event_date meta
          'order_by'        => 'event_date',
          'order'       => 'asc',         // ascending, so earlier events first
          'meta_query'  => array(
             array(         // restrict posts based on meta values
              'key'     => 'event-month',  // which meta to query
              'value'   => date("n"),  // value for comparison
              'compare' => '=',          // method of comparison
              'type'    => 'NUMERIC'         // datatype, we don't want to compare the string values
            ) // meta_query is an array of query ites
           ) // end meta_query array
          ) // end array
        ); // close WP_Query constructor call

 ?>
   <?php while($event_query->have_posts()): $event_query->the_post(); //loop for events ?>

1

হাই এর নীচে আমি আমার সমাধান পোস্ট করছি। যেখানে আমি Y-m-d H:iফর্ম্যাটে তারিখ সংরক্ষণ করেছি (2013-07-31 16:45 এর মতো)।

  • ইভেন্ট শুরুর তারিখ অনুসারে বাছাই করা হয়েছে।
  • আজকের পরে শেষ হওয়া ইভেন্টটি কেবলমাত্র অনুসন্ধান করা হবে meta_query

    date_default_timezone_set('Asia/Calcutta');

আমি date()ফাংশনের জন্য ডিফল্ট সময় অঞ্চল নির্ধারণ করেছি ।

$args = array(
    'posts_per_page'  => 3,
    'orderby'         => 'meta_value',
    'meta_key'    => 'event_start_date_time',
    'order'           => 'ASC',
    'post_type'       => 'events',
    'meta_query' => array(
      array(
        'key' => 'event_end_date_time',
        'value' => date("Y-m-d H:i"),
        'compare' => '>=',
        'type' => 'DATE'
        )
      )
    ); 
query_posts( $args );

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