我在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
显示任何内容,尽管我有两个帖子需要审核
答案 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();
}
您可以使用许多其他属性来选择要查询的特定评论。您还可以查询元值和分类法。