Трудный вопрос - Wordpress плохо фильтрует посты по дате - PullRequest
0 голосов
/ 03 октября 2019

Я заявляю, что речь идет о бронировании мероприятия, поэтому каждое событие по умолчанию имеет две функции:

  • Дата. который заключен в значение meta_value, заданное мета-ключом: metakey_AMC_data

  • Пользовательская таксономия

Теперь код, который я собираюсь вставитьотносится к странице таксономии x, где отображаются все события, имеющие эту таксономию, и отсортированы по дате, которая записана в формате db (dmy), и я преобразовал в (ymd) формат

Код для отображения всех событий с текущей датой:

<?php
/*MOSTRA EVENTI CON DATA CORRENTE*/

$args = array (
    'post_type' => get_option('customer_postquery'),
    'order' => 'ASC',
    'meta_query' => array(
        array(
            'key'       => 'metakey_AMC_data',
        )
    ),
    'tax_query' => array(
        array(
            'taxonomy' => 'categoria',
            'field' => 'slug',
            'terms' => $queried_object,
        )
    )
);
$custom_query = new WP_Query( $args );
?>

<?php if ($custom_query->have_posts()) : while ($custom_query->have_posts()) : $custom_query->the_post(); ?>

    <?php
    $var = get_post_meta(get_the_ID(),'metakey_AMC_data',true);
    $data_dell_evento = date("Y-m-d", strtotime( $var ));

    /*PRENDERE LA DATA CORRENTE IN FORMATO Y-m-d DIRETTAMENTE DA MYSQL*/
    $data_di_oggi = date( 'Y-m-d', current_time( 'timestamp', 0 ) );

    // You can eliminate comparison here as we are fetching only future events by query.
    if ($data_di_oggi === $data_dell_evento  ): ?>
        <div style="padding-top: 25px;" class="col-md-4"><!-- Card -->
            <?php include('content/home_page/card.php');  ?>
        </div>
    <?php  else: ?>

    <?php  endif; ?>


<?php
endwhile;
else :
    ?>

<?php
endif;
wp_reset_postdata();
/*MOSTRA EVENTI CON DATA CORRENTE*/
?>

Где: 'post_type' => get_option('customer_postquery'), можно будет динамически восстанавливать все созданные пользователем типы записей.

Код для отображения всех событий, которые имеют текущую дату в будущем:

<!-- MOSTRA EVENTI CON DATA FUTURA A QUELLA CORRENTE -->
<?php
$v_args = array(
    'post_type' => get_option('customer_postquery'),
    'posts_per_page'    => -1,
    'order' => 'ASC',
    'meta_query' => array(
        array (
            'key'       => 'metakey_AMC_data',

        ),
    ),
    'tax_query' => array(
        array(
            'taxonomy' => 'categoria',
            'field' => 'slug',
            'terms' => $queried_object,
        )
    )

);
$vehicleSearchQuery = new WP_Query( $v_args );


if( $vehicleSearchQuery->have_posts() ) :
    while( $vehicleSearchQuery->have_posts() ) : $vehicleSearchQuery->the_post();
        ?>
        <?php
        $var = get_post_meta(get_the_ID(),'metakey_AMC_data',true);
        $data_dell_evento = date("Y-m-d", strtotime( $var ));

        /*PRENDERE LA DATA CORRENTE IN FORMATO Y-m-d DIRETTAMENTE DA MYSQL*/
        $data_di_oggi = date( 'Y-m-d', current_time( 'timestamp', 0 ) );

        if ($data_dell_evento > $data_di_oggi   ): ?>

            <div style="padding-top: 25px;" class="col-md-4"><!-- Card -->
                <?php include('content/home_page/card.php');  ?>
            </div>
        <?php  endif; ?>

    <?php
    endwhile;
else :
    ?>

<?php
endif;
wp_reset_postdata();
?>

В чем проблема?

Проблема в том, что покапользовательский тип записи внутри Wordpress, и поэтому в запросе мы будем иметь, например: post_type' => ('NAMECUSTOMPOSTTYPE'),

Все созданные сообщения отсортированы идеально, поэтому, если у меня есть 4 сообщения:

  • Два с текущей датой

  • Один 08/10/2019

  • Один 10/10 / 2019

Они показаны в порядке и безупречно.

Но, как я уже сказал, используя: 'post_type' => get_option('customer_postquery'),

, который динамически восстанавливает все пользовательские типы записей, которые имеютбыла создана неприятная ситуация, где:

Cpt 1:

  • сообщение с текущей датой (10/03/2019)

  • сообщение с датой (10.10.2009)

Cpt 2:

  • сообщение с датой (10/4/2019)

заказ, который у меня есть,

03/10

10/10

08/10

и это не хорошо

как я могу это исправить?

...