已查询$wpdb,但未显示结果

时间:2013-06-26 作者:user715564

我试图在页面模板上显示自定义帖子类型的列表。当我查看页面时,我看到的不是不同的帖子,而是实际页面的重复。例如,如果我有5篇文章,实际页面(页眉内容页脚)将显示五次。看起来查询正在运行。。。在某种程度上,但我不确定是什么错了。以下是模板代码:

<?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>

    <div id="post-<?php the_ID(); ?>" <?php post_class(\'page\'); ?>>

        <h1><?php the_title(); ?></h1>

        <article>

            <div class="post-content page-content">
                <?php the_content(); ?>
                <?php wp_link_pages(\'before=<div class="pagination">&after=</div>\'); ?>
            </div><!--.post-content .page-content -->

        </article>

    </div><!--#post-# .post-->

<?php endwhile; ?>

<!-- Start search result code -->

<?php
//query_posts(\'post_type=listing&orderby=title&order=ASC&posts_per_page=9999\');
?>

<?php
$querystr = "
SELECT * 
FROM $wpdb->posts, $wpdb->postsmeta
WHERE wp_posts.ID = wp_postmeta.post_id
AND wp_postmeta.meta_key = \'listing_open\' 
AND wp_postmeta.meta_value = \'YES\'
AND wp_posts.post_status = \'publish\' 
AND wp_posts.post_type = \'listing\'
ORDER BY post_title
";                              
$pageposts = $wpdb->get_results($querystr, OBJECT);                         
if ($pageposts):                    
foreach ($pageposts as $postdata):
setup_postdata($postdata);
?>

<?php //if (have_posts()) : while (have_posts()) : the_post(); ?>

    <?php include_once(get_bloginfo(\'template_url\')."/layout-listings.php?id=".$postdata->ID); ?>       

<?php //endwhile; endif; rewind_posts(); wp_reset_query(); ?>

<?php
endforeach;
endif;
?>

<?php
$querystr = "
SELECT * 
FROM $wpdb->posts, $wpdb->postmeta
WHERE wp_posts.ID = wp_postmeta.post_id
AND wp_postmeta.meta_key = \'listing_open\' 
AND wp_postmeta.meta_value = \'NO\'
AND wp_posts.post_status = \'publish\' 
AND wp_posts.post_type = \'listing\'
ORDER BY post_title
";                              
$pageposts2 = $wpdb->get_results($querystr, OBJECT);                            
if ($pageposts2):                    
foreach ($pageposts2 as $postdata2):
setup_postdata($postdata2);
?>

<?php //if (have_posts()) : while (have_posts()) : the_post(); ?>

    <?php include_once(get_bloginfo(\'template_url\')."/layout-listings.php?id=".$postdata2->ID); ?>      

<?php //endwhile; endif; rewind_posts(); wp_reset_query(); ?>

<?php
endforeach;
endif;
?>

<!-- End search result code -->

2 个回复
SO网友:Milo

有关详细信息,请参阅Codex页面setup_postdata():

重要提示:必须使用全局$post变量将帖子详细信息传递到此函数中,否则像\\u title()这样的函数无法正常工作。。。

还请注意,您可以使用WP_Query 执行这些查询,而不是编写原始SQL。

SO网友:s_ha_dum

这需要消化大量代码,但看起来您正在使用整个模板include_once(get_bloginfo(\'template_url\')."/layout-listings.php?id=".$postdata2->ID);. 如果是这样的话,您可能会多次加载整个页面,尽管include_once 应该会引起麻烦。我不知道为什么。

我很确定你应该使用get_template_part 但如果没有更多的信息,很难说具体是如何做到的。

结束

相关推荐

查找并替换wp_post并忽略自定义POST类型MySQL查询

是否存在一些MYSQL查询来查找和替换wp\\U帖子,并忽略所有其他wordpress和buddypress帖子(buddypress文档)以及自定义帖子类型=公文包?我只想查找和替换wordpress博客内容,不想接触其他帖子。我使用以下MYSQL查询:UPDATE wp_posts SET post_content = REPLACE (post_content,\'Item to replace here\',\'Replacement text here\');