it-swarm-eu.dev

jaký je správný způsob, jak porovnat data v WP query_posts meta_query

Mám dotaz query_posts v šabloně WP. Díky použití více pole Plugin mohu dát webu admin možnost vytvořit událost (vlastní příspěvek typu) a pak zadejte datum, které je formátováno: RRRR/mm/dd.

Hlavní otázkou je; jakou hodnotu mám předat volbě value v poli meta_query? Já jsem v současné době snaží projít "datum (" Y/m/d h: i A ")" (mínus citace), protože, jak jsem pochopil, že bude tisk aktuální datum dnes. Nezajímá mě čas, takže to může být irelevantní. Ulitimatly Snažím se použít možnost porovnání, abych se nadchla nadcházejících událostí, minulých událostí na různých místech tohoto webu. Na jednom místě musím předat možnost hodnoty pole, které vytiskne první a poslední den aktuálního měsíce a omezí výstup na události, ke kterým dojde v tomto měsíci.

<?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
                 ?>
31
tjsherrill

Zničil jsem to s následujícími. Nastavím pole event-momth a porovnám odtud. Děkuji za pomoc

<?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 ?>
3
tjsherrill

Zlikvidoval jsem práci na stejné věci a tento příspěvek byl velmi užitečný. Použil jsem vlastní pole a zde je kód, který jsem použil k vytvoření seznamu všech událostí větší než aktuální datum. Poznámka: Další filtry založené na taxonomii.

<?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',
                )
            )
        )
    );
?>
41
Jonathan Wold

Většinou záleží na tom, jak je vaše datum uloženo v meta hodnotě. Obecně platí, že je dobré ukládat data v MySQL jako data/časová razítka MySQL.

Časová razítka MySQL mají formát Y-m-d h:i:s.

Nicméně, to je vždy dobrý nápad používat WP vlastní data mangling funkce. Chcete-li získat aktuální datum ve formátu MySQL, použijte current_time('mysql').

Pro formátování data MySQL pro zobrazení použijte mysql2date($format, $mysql_date). V tomto případě je nejvhodnější zobrazit datum v nastavení, takže použijte $format = get_option('date_format');.

Chcete-li uložit datum vybrané uživatelem, musíte jej převést do data MySQL. K tomu je nejjednodušší - ale nejbezpečnější - způsob date('Y-m-d h:i:s', $unix_timestamp);. $unix_timestamp lze často odvodit pomocí strtotime($user_input).

Nicméně strtotime() nedělá kontroly zdravého rozumu na vlastní pěst, takže je nejlepší napsat vlastní konverzní funkci.

Pokud jde o získání měsíční rozsah, zde je funkce, kterou používám získat hranice měsíce pro všechny časové razítko MySQL:

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 );
}

Pokud chcete získat hranice týdne, WP již přichází s funkcí: get_weekstartend($time);, která také dodává hranice jako pole.

Tyto argumenty pak můžete použít v argumentu meta_query pomocí dvou samostatných porovnávání.

7
wyrfel

Ahoj pod jsem vysílání mé řešení. Kde jsem uložil datum ve formátu Y-m-d H:i (jako 2013-07-31 16:45).

  • Seřazeno podle data zahájení události.
  • Událost, která končí po Today, bude dotazována pouze meta_query.

    date_default_timezone_set('Asia/Calcutta');

Pro funkci date() jsem nastavil výchozí časové pásmo.

$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();
1
Makarand Mane