正确地对优惠券进行分类

时间:2015-03-04 作者:emti

我在我的网站上使用自定义帖子类型,我需要以这种方式对这些优惠券进行排序:

新优惠券于今日结束----2015年3月5日结束的新优惠券于2015年3月6日结束的新优惠券于2015年3月7日结束的新优惠券于2015年3月3日结束的旧优惠券于2015年3月3日到期的旧优惠券于2015年3月2日到期的旧优惠券于2015年3月1日到期的旧优惠券于2015年3月1日到期的旧优惠券在优惠券中有一个名为unixendet的自定义字段,其中包含unix值(告诉优惠券何时结束)-F.x.:unixendet森德特=1428271200

现在,我使用此代码在一个列表中查询两个列表:

<?php 
date_default_timezone_set(\'Europe/Berlin\'); setlocale(LC_TIME, "de_DE", "german");
$time = current_time( \'timestamp\' ); // Get current unix timestamp

$args = array(
    \'post_type\' => \'gutschein\',
    \'pagination\'             => true,
    \'posts_per_page\'         => \'10\',
    \'posts_per_archive_page\' => \'10\',
    \'ignore_sticky_posts\'    => false,
    \'post_status\' =>  \'published\',
    \'paged\' => $paged,
    \'meta_key\' => \'unixendet\',
    \'meta_value\' => $time, // Use the current time from above
    \'meta_compare\' => \'>=\', // Compare today\'s datetime with our event datetime
    \'orderby\' => \'meta_value_num\',
    \'order\' => ASC,
);

// get results
$first_query = new WP_Query( $args );

$args2 = array(
    \'post_type\' => \'gutschein\',
    \'pagination\'             => true,
    \'posts_per_page\'         => \'10\',
    \'posts_per_archive_page\' => \'10\',
    \'ignore_sticky_posts\'    => false,
    \'post_status\' =>  \'published\',
    \'paged\' => $paged,
    \'meta_key\' => \'unixendet\',
    \'meta_value\' => $time, // Use the current time from above
    \'meta_compare\' => \'<=\', // Compare today\'s datetime with our event datetime
    \'orderby\' => \'meta_value_num\',
    \'order\' => DESC,
);

$second_query = new WP_Query( $args2 );

$result = new WP_Query();
$result->posts = array_merge( $first_query->posts, $second_query->posts );
$result->post_count = count( $result->posts );

// The Loop
?>
<?php if( $result->have_posts() ): ?>
  <?php while ( $result->have_posts() ) : $result->the_post(); ?>

The big problem is how it outputs the posts:

我有48张优惠券:11张来自args1的有效优惠券和37张来自args2的过期优惠券

第一页:10张来自args1的优惠券和10张来自args2的优惠券第二页:1张来自args1的优惠券和10张来自args2的优惠券第三页:0张来自args1的优惠券和10张来自args2的优惠券问题1:在第二页上有1张有效优惠券,所以这样排序没有意义。我希望所有有效的保持在预期的之上

1 个回复
最合适的回答,由SO网友:birgire 整理而成

请注意,此部分:

    \'post_status\' =>  \'published\',
应为:

    \'post_status\' =>  \'publish\',
然后,您可以尝试以下操作:

$args = array(
    \'post_type\'              => \'gutschein\',
    \'pagination\'             => true,
    \'posts_per_page\'         => \'10\',
    \'posts_per_archive_page\' => \'10\',
    \'ignore_sticky_posts\'    => false,
    \'post_status\'            => \'publish\',
    \'paged\'                  => $paged,
    \'meta_key\'               => \'unixendet\',
);

add_filter( \'posts_orderby\', \'emti_orderby\' );
$q = new WP_Query( $args );
remove_filter( \'posts_orderby\', \'emti_orderby\' );
我们在其中设置条件排序:

/**
 * Modify the order by part:
 */

function emti_orderby( $orderby )
{     
    global $wpdb;
    $time = current_time( \'timestamp\' ); // Get current unix timestamp

    return "
        CASE
            WHEN {$wpdb->postmeta}.meta_value >= {$time} 
                THEN  {$wpdb->postmeta}.meta_value+0 - {$time}+0      
            WHEN {$wpdb->postmeta}.meta_value < {$time} 
                THEN {$wpdb->postmeta}.meta_value+0
        END
        ASC
    ";
}

结束

相关推荐

从前端删除Yoast jQuery

我想删除以下两个脚本和一个样式标记。它们似乎是由Yoast SEO插件添加的,但查看它们的插件文件并没有产生任何希望。是否有人知道这些文件在哪里排队或以其他方式删除它们?<!-- / Yoast WordPress SEO plugin. --> <script type=\"text/javascript\" src=\"http://barrjoneslegal.com/wp-includes/js/jquery/jquery.js?ver=1.11.1\"></