自定义查询:获取某个类别的所有帖子?

时间:2015-11-27 作者:Toskan

这就是我所拥有的:

global $wpdb, $month;

$months = $wpdb->get_results( "SELECT *
    FROM $wpdb->posts
    WHERE post_type = \'post\' AND post_status = \'publish\'
    AND DATE_FORMAT( post_date_gmt, \'%Y\' ) = $y
    GROUP BY DATE_FORMAT( post_date_gmt, \'%Y-%m\' )
    ORDER BY post_date_gmt DESC
");
问题是,这将返回从那时起的所有帖子,但我只想要类别11中的帖子。

有没有一种简单的方法来实现这一点?

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

这很简单:

$months = $wpdb->get_col("SELECT DATE_FORMAT(post_date_gmt, \'%m\')
                            FROM $wpdb->posts
                            LEFT JOIN  $wpdb->term_relationships  as t
                            ON ID = t.object_id
                            WHERE post_type = \'post\' AND post_status = \'publish\' AND t.term_taxonomy_id = 11
                            AND DATE_FORMAT(post_date_gmt, \'%Y\') = $y
                            GROUP BY DATE_FORMAT(post_date_gmt, \'%Y-%m\')
                            ORDER BY post_date_gmt DESC");
term\\u taxonomy\\u id是类别。我在对象ID上加入

SO网友:Aaron Lynch

从WordPress中的特定类别获取所有帖子的最佳方法是使用本机类WP_Query, 而不是$wpdb 方法

以下是使用WP\\U查询的查询示例:

<?php

    $args = array(
        // Arguments for your query.
    );

    // Custom query.
    $query = new WP_Query( $args );

    // Check that we have query results.
    if ( $query->have_posts() ) {

        // Start looping over the query results.
        while ( $query->have_posts() ) {

            $query->the_post();

            // Contents of the queried post results go here.

        }

    }

    // Restore original post data.
    wp_reset_postdata();

?>
在您的场景中,我们现在需要做的就是在查询参数中指定category参数cat 以及您想要的类别ID, 像这样:

$args = array(
    \'cat\' => \'11\',
    \'post_type\' => \'post\',
    \'post_status\' => \'publish\'
);
many more parameters and values 您可以输入查询的参数。

希望这有帮助!

SO网友:Gyanendra Giri

显示类别ID中的所有帖子11。使用以下循环。它将显示类别ID 11中的所有帖子。

// WP_Query arguments for category Id 11
 $args = array (
     \'cat\'                    => \'11\',
 );

// The Query $query = new WP_Query( $args ); // The Loop if ( $query->have_posts() ) { while ( $query->have_posts() ) { $query->the_post(); // rest of loop code } } else { // no posts found }

// Restore post data loop wp_reset_postdata();