2013-09-02 3 views
1

Для тех, кто знаком с плагином ACF ...WordPress продвинутые пользовательские поля заказа сообщения по дате-подборщика

У меня есть некоторые события сообщения, которые в настоящее время отображения в почтовом порядке (см код ниже). Я бы хотел, чтобы они отображались в порядке, указанном при выборе даты.

Может ли кто-нибудь сказать мне, что изменить в следующем - я пробовал документацию на сайте, но мой PHP является основным.

Он говорит, что нужно добавить

'orderby' => 'meta_value_num', 

Но не радость.

<?php function le_whatson_aside() { 

//THis loop is for the CPT 
$args = array(
    'post_type' => 'events', // enter your custom post type 
    'orderby' => 'menu_order', 
    'order' => 'ASC', 
    'posts_per_page'=> '10', // overrides posts per page in theme settings 
     'tax_query' => array(
     array(
      'taxonomy' => 'audience', //name of custom taxonomy 
      'field' => 'slug', 
      'terms' => 'everyone' //name of category 
     ) 
    ) 

    ); 

$loop = new WP_Query($args); 
if($loop->have_posts()): 
    ?> 

    <div> 
     <h2>What's On</h2> 
    </div> 
    <div class="whatson entry-content"> 
     <?php 
     while($loop->have_posts()): $loop->the_post(); global $post; 
      ?> 
      <p class="whatson-date"><?php echo date("dS F Y",strtotime(get_field('date')));?></p> 
      <a href="<?php echo get_permalink() ?>"><h4 class="whatson-title"><?php echo get_the_title(); ?></h4></a> 

      <?php 
     endwhile; 
     ?> 
    </div> 

<?php 
endif; } 

Спасибо всем.

ответ

0

Попробуйте

orderby=date or `post_date` 

Если не самый простой способ, чтобы сохранить пользовательские поля «STARTDATE» как метку времени Unix. Чтобы сделать это, добавьте следующую строку в файл functions.php вашей темы

// CREATE UNIX TIME STAMP FROM DATE PICKER 
function custom_unixtimesamp ($post_id) { 
if (get_post_type($post_id) == 'events') { 
$startdate = get_post_meta($post_id, 'startdate', true); 

    if($startdate) { 
     $dateparts = explode('/', $startdate); 
     $newdate1 = strtotime(date('d.m.Y H:i:s', strtotime($dateparts[1].'/'.$dateparts[0].'/'.$dateparts[2]))); 
     update_post_meta($post_id, 'unixstartdate', $newdate1 ); 
    } 
} 
} 
    add_action('save_post', 'custom_unixtimesamp', 100, 2); 

Д.О.:

$today = time(); 

$args = array(
'post_type' => 'events', 
'posts_per_page' => 5, 

'meta_query' => array(
    array(
     'key' => 'unixstartdate', 
     'compare' => '>=', 
     'value' => $today, 
    ) 
), 

'meta_key' => 'startdate', 
'orderby' => 'meta_value', 
'order' => 'ASC', 
); 

$query = new WP_Query($args); 
$events = $query->posts; 

Got it from here

0

Я провел часы, глядя на это, и я могу подтвердить это работает. См. Мой код ниже.

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

$today = time(); 

    $the_query = new WP_Query(array(
    'post_type' => 'events', 
    'posts_per_page' => 3, 
    'meta_query' => array(
     array(
      'key' => 'start', 
      'value' => $today, 
      'compare' => '>=', 
     ) 
    ), 

    'tax_query' => array(
     array (
     'taxonomy' => 'the_taxonomy', 
     'field' => 'slug', 
     'terms' => 'the-name' 
     ) 
    ), 
    'meta_key' => 'start', 
    'orderby' => 'meta_value', 
    'order' => 'ASC', 
    )); 
while ($the_query->have_posts()) : 
    $the_query->the_post(); 
     get_template_part('content-events'); 
endwhile; 
wp_reset_postdata(); 

Конечно, вы должны заранее включить функцию Unix.

function custom_unixtimesamp ($post_id) { 
if (get_post_type($post_id) == 'events') { 
$startdate = get_post_meta($post_id, 'start', true); 
    if($startdate) { 
     $dateparts = explode('_', $startdate); 
     $newdate1 = strtotime(date('d.m.Y H:i:s', strtotime($dateparts[1].'/'.$dateparts[0].'/'.$dateparts[2]))); 
     update_post_meta($post_id, 'unixstartdate', $newdate1 ); 
    } 
} 
} 
add_action('save_post', 'custom_unixtimesamp', 100, 2); 
Смежные вопросы