在另一个自定义帖子中查询自定义帖子

时间:2016-09-14 18:11:51

标签: php wordpress

我在wordpress开发中有两种类型的自定义帖子。一个是Restaurant Listings,另一个是Reviews。在Restaurant listings的单个页面中,我还想显示Reviews

我试过了

<?php if( have_posts() ) : ?>
    <?php while( have_posts() ) : the_post();?>
    // Post content for restaurant listings

    //Post content for "reviews" 
    global $wpdb;
        $title = get_the_title(get_the_ID());
        $sql = "SELECT * FROM {$wpdb->prefix}posts WHERE post_title = " . $title;
        $results = $wpdb->get_results( $sql, "ARRAY_A" );
        print_r($results);

    <?php endwhile; ?>
<?php endif; ?>         

但它没有为$results显示任何内容,尽管我有两个帖子需要审核

2 个答案:

答案 0 :(得分:0)

您的查询不会返回所需的结果,因为SQL字符串包含错误:您需要在SQL字符串中将$ title包装在引号中。

$sql = "SELECT * FROM {$wpdb->prefix}posts WHERE post_title = '" . esc_sql($title) . "'";

请注意准备$ title变量的esc_sql()函数,以便在SQL查询字符串中使用。

更好的是,您可以使用$wpdb->prepare()方法:

$sql = $wpdb->prepare("SELECT * FROM {$wpdb->prefix}posts WHERE post_title = %s", $title);

答案 1 :(得分:0)

您永远不应该直接查询数据库以查找帖子列表。 WordPress有多种方法可以使流程更好,更清晰。整个平台基于帖子,因此有很多功能可以让您的生活轻松。

这是如何满足您需求的一个非常基本的例子:

$reviews = get_posts( array(
    'post_type'   => 'reviews'
) );

if ( $reviews ) {
    foreach ( $reviews as $post )
    {
        setup_postdata( $post );
?>
        <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
        <?php the_content(); ?>
<?php
    }
    wp_reset_postdata();
}

您可以使用许多其他属性来选择要查询的特定评论。您还可以查询元值和分类法。

进一步阅读:https://codex.wordpress.org/Template_Tags/get_posts