我在wordpress中进行开发,但出现错误。 我用这一行创建一个模板文件,以显示所有类型为“ Flash”的广告
<?php
$sql = "
SELECT distinct p.*
FROM $wpdb->posts p, ".$wpdb->prefix."p2p pp
WHERE p.ID = pp.p2p_to
AND exists (select meta_id from ".$wpdb->prefix."p2pmeta m where m.p2p_id = pp.p2p_id and m.meta_key='type' and m.meta_value like '%flash%')
AND exists (select meta_value from $wpdb->postmeta g where g.post_id = p.ID and g.meta_key='cp_sys_expire_date' and g.meta_value >= now())
AND p.post_status = 'publish'
AND p.post_type = 'ad_listing'
ORDER BY p.post_date DESC";
$flash_ads = $wpdb->get_results($sql, OBJECT);
$result = '';
?>
<div id="primary" class="content-area row">
<div class="columns">
<?php get_template_part( 'parts/breadcrumbs', app_template_base() ); ?>
</div>
<main id="main" class="site-main small-12 columns" role="main">
<?php if ( $flash_ads->have_posts() ) : ?>
<div class="row entry-wrap small-up-1 medium-up-2 large-up-3">
<?php while ( $flash_ads->have_posts() ): $flash_ads->the_post(); ?>
<div class="column">
<?php get_template_part( 'parts/content-item', APP_POST_TYPE ); ?>
</div> <!-- .column -->
<?php endwhile; ?>
</div> <!-- .row -->
<?php cp_do_pagination(); ?>
<?php else : ?>
<?php appthemes_loop_else( get_post_type() ); ?>
<?php get_template_part( 'parts/content-none', get_post_type() ); ?>
<?php endif; ?>
<?php appthemes_after_loop( get_post_type() ); ?>
我不知道我的错误在哪里... 非常感谢你的帮助。 塞伯姆
答案 0 :(得分:0)
您不使用WP_Query,而是使用自定义SQL查询:
$flash_ads = $wpdb->get_results($sql, OBJECT);
get_results
返回一个行数组。但是稍后在您的代码中您将执行以下操作:
<?php if ( $flash_ads->have_posts() ) : ?>
因此,您将该数组视为WP_Query实例...这就是问题所在。
因此,有两种方法可以解决此问题:
您可以使用WP_Query代替自定义SQL查询。
$flash_ads = new WP_Query( array(
'post_type' => 'ad_listing',
'post_status' => 'publish',
...
) );
然后您可以像在代码中一样使用它。
或者您仍然可以使用自定义SQL查询(我不建议这样做),但是在这种情况下,您必须重新构建循环。
此:
<?php if ( $flash_ads->have_posts() ) : ?>
应该变成这样:
<?php if ( ! empty($flash_ads) ) : ?>
这:
<?php while ( $flash_ads->have_posts() ): $flash_ads->the_post(); ?>
应该变成这个:
<?php foreach ( $flash_ads as $row ) : ?>
但是在这种情况下,您将无法再使用模板标签来打印值,因为未设置全局$post
。