WP - 用于查询自定义帖子类型并根据自定义元值显示的短代码

时间:2014-12-11 13:31:37

标签: php wordpress custom-post-type

我已经设置了一个插件,可以创建自定义帖子类型('程序')以及分类和一些自定义元。我有一个名为' broadcast-date'的自定义元值。我试图创建一个短代码,它只显示广播日期等于或大于今天的节目(以显示即将播出的节目的时间表)。

目前我只显示帖子,我不知道从哪里开始查询日期。这是我到目前为止所得到的:

add_shortcode('programme-schedule', 'programme_schedule_shortcode');
function programme_schedule_shortcode($atts, $content){
  extract(shortcode_atts(array( // a few default values
   'posts_per_page' => '-1',
   'post_type' => 'programmes')
   , $atts));

  global $post;

  $posts = new WP_Query($atts);
  $output = '';
    if ($posts->have_posts())
        while ($posts->have_posts()):
            $posts->the_post();
        $out = '<p>' . get_the_title() . '</p>';
    endwhile;
  else
    return;

  wp_reset_query();
  return html_entity_decode($out);
}

我可以添加什么,以便它只显示即将推出的节目?

谢谢:)

编辑:

事实证明代码也没有用,我现在正在处理这个问题(目前仍然只收到帖子,而不是过滤它们):

add_shortcode( 'hiblio-schedule', 'rmcc_post_listing_shortcode1' );
function rmcc_post_listing_shortcode1( $atts ) {
    ob_start();
    $query = new WP_Query( array(
        'post_type' => 'programmes',
    ) );
    if ( $query->have_posts() ) { ?>
        <ul class="schedule-listing">
            <?php while ( $query->have_posts() ) : $query->the_post(); ?>
            <li id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
                <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
            </li>
            <?php endwhile;
            wp_reset_postdata(); ?>
        </ul>
    <?php $myvariable = ob_get_clean();
    return $myvariable;
    }
}

非常感谢任何帮助!

EDIT2:

这是我目前的代码:

add_shortcode( 'hiblio-schedule', 'hiblio_schedule_shortcode' );
function hiblio_schedule_shortcode( $atts ) {
    $todaysDate = date("Y/m/d");
    $date = '24/12/2014';//get_post_meta( $post->ID, 'broadcast-date', true );
    $parts = explode('/',$date);
    $newDate = $parts[2]."-".$parts[1]."-".$parts[0];
    ob_start();
    $query = new WP_Query(array(
    'post_type' => 'programmes',
    'meta_query' => array(
        array(
        'key' => 'broadcast-date',
        'value' => $todaysDate  , //The date what you want...
        'compare'   => '>='
        ),
    ),
    ));
    if ( $query->have_posts() ) {
    ?>
        <ul class="schedule-listing">
            <?php while ( $query->have_posts() ) : $query->the_post(); ?>
            <li id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
                <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
            </li>
            <?php endwhile;
            wp_reset_postdata(); ?>
        </ul>
    <?php $myvariable = ob_get_clean();
    return $myvariable;
    }
}

1 个答案:

答案 0 :(得分:2)

您可以使用meta_query或键/值对。阅读 here

$query = new WP_Query(array(
    'post_type' => 'programmes',
    'meta_query' => array(
        array(
            'key' => 'broadcast-date',
            'value' => '2014-12-11', //The date what you want...
            'compare'   => '>='
        ),
    ),
));