将query_posts与自定义字段一起使用

时间:2017-10-02 10:53:43

标签: php wordpress

我有一个名为" books"。

的自定义帖子类型

此帖子类型有一个自定义字段,名为" release-date"包含unix时间戳。

我正在使用WordPress archive.php页面获取图书清单,而我正在尝试更改主要查询。

我需要的是只有具有发布日期>的书籍。今天按发布日期排序。

这是我尝试对它进行排序的:

global $query_string;
query_posts( $query_string . "&meta_key=release-date&orderby=meta_value_num&order=ASC&posts_per_page=9" );

排序似乎没有按预期工作。

2 个答案:

答案 0 :(得分:1)

我认为现在你应该使用WP_Query类:

$args = array(
    'post_type' => 'books',
    'meta_query' => array (
        'key' => 'release-date',
        'value' => date('d/m/Y',strtotime("today")),
        'type' => 'DATE',
        'compare' => '>='
    ),
    'meta_key' => 'release-date',
    'orderby' => 'meta_value_num',
    'order' => 'DESC'
);

然后,只是

$your_query = new WP_Query( $args );
if ($your_query->have_posts()) {
    while ( $jobs_query->have_posts() ) {
        $your_query->the_post();
        var_dump($post)
    }
}

更多信息here

答案 1 :(得分:0)

因此,如果你只想要发布日期比今天更大的帖子你可以做一个简单的wp查询来获取所有帖子:

function getPostsByQuery(WP_Query $query)
{
$posts = array();
if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        $posts[] = $query->post;
    }
    wp_reset_postdata();
}

return $posts;
}

function getPostsByCustomemField($name, $limit = -1)
{
    return getPostsByQuery(new WP_Query(array('post_type'=>'books','meta_key' => $name, 'posts_per_page' => $limit)));
}

function getBooks() {
    $posts = getPostsByCustomemField('release-date');
    $books = [];
    foreach ($posts as $post) {
    if (get_post_meta($post->ID,'release-date',true) > date('d/m/Y',strtotime("today"))) {
        $books[] = $post;
    }
}
    return $books;
}