按自定义元值对帖子进行分组

时间:2014-05-20 作者:johnevanofski

我试图输出一个日期列表,这些日期保存在一个名为event\\u dates的元键中,没有重复项。我也试过wp_query 使用meta_compare 但我也无法做到这一点。任何帮助都将不胜感激。谢谢

<?php 
    $args1 = array(
        \'post_type\'=>\'cw_events\',
        \'showposts\'=>-1,
        \'order\'=>\'ASC\',                
    ); 

    $archive = get_posts( $args1 ); 

    foreach( $archive as $post ) : 
        setup_postdata($post);
        global $wpdb;

        $metatable = $wpdb->prefix."postmeta";   
        $post_id = $post->ID;    
        $cal_dates = $wpdb->get_results(
            $wpdb->prepare(
                "SELECT meta_value 
                FROM $metatable 
                WHERE post_id=%d 
                AND meta_key=\'event_date\'",$post_id
        ) );

        //output posts -- trying to use array_unique(), but it\'s not working    
        $cal_dates = array_unique($cal_dates);  
        foreach ($cal_dates as $cal_date) {      
            echo var_dump($cal_date);
            echo $cal_date->meta_value.\'<br />\';         
        } 
    endforeach; 
?>
我看到了这个帖子,但这个方法似乎不起作用。没有这样的功能get() 在wp中。。。。Group posts by meta_key

PS对不起,代码太乱了,SE似乎在处理退货时遇到了一些问题。。。

2 个回复
最合适的回答,由SO网友:aj-adl 整理而成

felipelavinz的回答假设每个帖子的post\\u meta中都存储了一个日期数组,但我阅读问题和示例代码的方式似乎是每个帖子都指定了一个日期?如果这是真的(每个帖子一个日期)

那么以下内容更适合您

<?php
// this is the correct equivalent to the get_posts call
// Don\'t use get_posts.
// you should also specify some "orderby" parameter
$entries = new WP_Query(array(
    \'post_type\' => \'cw_events\',
    \'posts_per_page\' => -1,
    \'order\' => \'ASC\'
));

dates = array(); //we will fill this up with dates in the loop

if ( $entries->have_posts() ) : while ( $entries->have_posts() ) : $entries->the_post();

    //WP_Post magic methods allow us to access meta values like so

    $dates[] = $post->event_date;

endwhile; endif;

$dates = array_unique( $dates );

// always user wp_reset_postdata() UNLESS interacting with the main query
wp_reset_postdata();

SO网友:felipelavinz

好的,您可以使用$wpdb直接查询,也可以只使用WordPress直接查询。

一般来说,如果使用WordPress,请使用WordPress的方式。

我假设所有日期都使用相同的格式存储;如果不是,你可能需要先解决这个问题。

代码的问题在于您正在使用array_unique 在一组对象上;如果你只是对日期感兴趣,那么解决方法就简单多了。

<?php
// this is equivalent to the get_posts call
// you should also specify some "orderby" parameter
$entries = new WP_Query(array(
    \'post_type\' => \'cw_events\',
    \'posts_per_page\' => -1,
    \'order\' => \'ASC\'
));

if ( $entries->have_posts() ) : while ( $entries->have_posts() ) : $entries->the_post();
    // the "false" param will make the function return an array
    $dates = get_post_meta( get_the_ID(), \'event_date\', false);
    // ... and now they\'re unique
    $dates = array_unique( $dates );
endwhile; endif;

// return globals $post and $wp_query to it\'s prior state
wp_reset_query();

结束

相关推荐

相当于公共页面的admin.php

我对Wordpress API很陌生,似乎找不到我需要的东西。我一直在寻找一种创建公共页面的方法(用户无需管理员许可即可访问),类似于在管理员上创建页面时使用的方法。php。基本上,我有一个在仪表板中创建调查的应用程序,但现在我想向用户显示实际情况。我计划使用shortcode, 这将打开一个窗口,其中包含使用javascript的window.open(). 但是,如果调用插件目录中的空页面,我将无法再连接到数据库。在管理中。php我也可以$.post 到ajaxurl, 但这只能在管理标头中访问。我可