查询子页面时显示已删除的页面

时间:2014-06-25 作者:SPS

我使用以下代码显示相关子页面中的特色图像、post\\u标题和自定义字段数据。

<?
$child_pages = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_parent = ".$post->ID." AND post_type = \'page\' ORDER BY \'title ASC\' ", \'OBJECT\');

if ( $child_pages ) :
    foreach ( $child_pages as $pageChild ) :
        setup_postdata( $pageChild );
        $thumbnail = get_the_post_thumbnail($pageChild->ID, \'thumbnail\');
        if($thumbnail == "") continue; // Skip pages without a thumbnail
?>
        <div class="child-thumb">
          <a href="<?= get_permalink($pageChild->ID) ?>" rel="bookmark" title="<?= $pageChild->post_title ?>">
            <?= $thumbnail ?><br />
           <?php echo get_post_meta($pageChild->ID, \'textfield\', true); ?> </a><br /> <! -- Add riding-->
            <?= $pageChild->post_title ?>

        </div>
    <?
        endforeach;
    endif;
    ?>
但是,它还显示已删除的子页面。如何防止它检查垃圾和显示的已删除页面?

非常感谢。

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

您正在使用原始SQL查询进行post查询,这很糟糕,因为:

已经有这样做的API,它不再继承默认参数,它不会通过缓存系统,因此速度会变慢WP_Query.

你收到垃圾帖子的原因是你没有指定你想要的帖子状态。默认情况下WP_Query 默认为仅发布。

以下是等效的post循环:

$query = new WP_Query( array(
    \'post_type\' => \'page\',
    \'post_parent\' => $post->ID,
    \'posts_per_page\' => -1,
    \'orderby\' => \'title\',
    \'order\' => \'ASC\'
) );

if ( $query->have_posts() ) {
    while( $query->have_posts() ) {
        $query->the_post();
        // process each post
    }
}

SO网友:engelen

除非有很好的理由(通常是性能,或者,当然,核心函数无法满足您的需要)使用原始SQL请求在WordPress中获取帖子和其他数据,否则您不应该构建自己的SQL查询。相反,您可以使用WP_Query. 在您的情况下,您可以获取如下帖子:

$query = new WP_Query( array(
    \'post_type\' => \'page\',
    \'post_parent\' => $post->ID,
    \'posts_per_page\' => -1,
    \'orderby\' => \'title\',
    \'order\' => \'ASC\'
) );

$posts = $query->posts;
SQL查询的问题是它没有考虑post状态(trash 对于垃圾帖子)。WP_Query 自动排除垃圾帖子(和修订等),但最重要的是它是一个抽象层,并具有许多其他优点,如可过滤性。

SO网友:keesiemeijer

使用get_posts()WP_Query 用于辅助查询。默认情况下,他们将使用post状态“publish”。

如果仍要使用自定义查询,请将post状态添加到其中

$child_pages = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_status = \'publish\' AND post_parent = ".$post->ID." AND post_type = \'page\' ORDER BY \'title ASC\' ", \'OBJECT\');

结束

相关推荐

带有自定义发布类型的trash_post操作

我有一个自定义的帖子类型“empresa”,并希望在删除帖子类型(移动到垃圾箱)时发送电子邮件。我在下面为我的帖子提供了这个功能,我如何使用我的帖子类型“empresa”?add_action(\"trash_post\", \"my_awesome_publication_notification\"); function my_awesome_publication_notification($post_id) { $post = get_post($post_id); $au