WP_Query post__not_in不起作用。忽略数组

时间:2018-08-09 10:39:32

标签: wordpress

我曾经在这里和其他地方浏览过其他文章,并将我的代码与以前所做的工作示例进行了比较,但是我找不到问题所在。我正在使用以下查询来获取特色文章并存储其ID:

<?php
            $args = array(
                'post_type'         => 'post',
                'posts_per_page'    => 1,
                'orderby'           => 'date',
                'order'             => 'desc',
                'post_status'       => 'publish',
                'cat'               => 564,
            );

            $featured_latest = new WP_Query($args);

            $fid = array();

            if( $featured_latest->have_posts() ) : while( $featured_latest->have_posts() ) : $featured_latest->the_post(); ?>

                <?php $fid[] = get_the_ID(); ?>

                <div class="top-featured">
                    <?php if( has_post_thumbnail() ) { ?>
                        <?php $image = get_the_post_thumbnail_url(get_the_ID(),'large'); ?>
                    <?php } else { ?>
                        <?php $image = get_stylesheet_directory_uri() . '/assets/images/blog/no-article-image.jpg'; ?>
                    <?php } ?>
                    <a class="article-link lazy" href="<?php the_permalink(); ?>" data-src="<?php echo $image; ?>">
                        <div class="text">
                            <h2><?php the_title(); ?></h2>
                            <?php
                            $date = get_the_date();
                            $cdate = date( 'c', strtotime($date) );
                            ?>
                            <time datetime="<?php echo $cdate; ?>"><?php echo $date; ?></time>
                            <div class="excerpt">
                                <?php echo get_excerpt(140); ?>
                            </div>
                            <span class="fake-link">Read article</span>
                        </div>
                    </a>
                </div>

            <?php endwhile; wp_reset_postdata(); endif; ?>

然后下移我使用此查询的页面:

<?php
            if( !empty( $fid ) ){
                $fid = $fid;
            } else {
                $fid = array();
            }

            $args = array(
                'post_type'         => 'post',
                'posts_per_page'    => 3,
                'orderby'           => 'date',
                'order'             => 'desc',
                'post_status'       => 'publish',
                'cat'               => 399,
                'post__not_in'      => $fid,
            );

            $top_reviews = new WP_Query($args);

            if( $top_reviews->have_posts() ) : ?>

                <div class="top-articles top-reviews">
                    <h2>Top product reviews</h2>
                    <div class="row">

                    <?php while( $top_reviews->have_posts() ) : $top_reviews->the_post(); ?>

                        <div class="col-12 col-md-4">
                            <?php if( has_post_thumbnail() ) { ?>
                                <?php $image = get_the_post_thumbnail_url(get_the_ID(),'large'); ?>
                                <?php $imgid = get_post_thumbnail_id( get_the_ID() ); ?>
                                <?php $alt = get_post_meta( $imgid, '_wp_attachment_image_alt', true); ?>
                            <?php } else { ?>
                                <?php $image = get_stylesheet_directory_uri() . '/assets/images/blog/no-article-image.jpg'; ?>
                                <?php $alt = 'No article image'; ?>
                            <?php } ?>
                            <a class="article-link" href="<?php the_permalink(); ?>" data-src="<?php echo $image; ?>">
                                <img class="lazy" data-src="<?php echo $image; ?>" alt="<?php echo $alt; ?>">
                                <div class="text">
                                    <h3><?php the_title(); ?></h3>
                                    <?php
                                    $date = get_the_date();
                                    $cdate = date( 'c', strtotime($date) );
                                    ?>
                                    <time datetime="<?php echo $cdate; ?>"><?php echo $date; ?></time>
                                    <div class="excerpt">
                                        <?php echo get_excerpt(140); ?>
                                    </div>
                                    <span class="fake-link">Read article</span>
                                </div>
                            </a>
                        </div><!-- col -->

                    <?php endwhile; wp_reset_postdata(); ?>

                    </div><!-- row -->
                </div>

            <?php endif; ?>

$ fid打印为一个数组,其中包含一项,但第二个查询不排除该ID的帖子。我敢肯定我很想念一些明显的东西,但是我无法终生找到它!

4 个答案:

答案 0 :(得分:0)

您需要以array('162','3074')

格式传递数组
$args = array(
'post_type'         => 'post',
'posts_per_page'    => -1,
'orderby'           => 'date',
'order'             => 'desc',
'post_status'       => 'publish',
'post__not_in'      => array('162','3074')
);
$top_reviews = new WP_Query($args);

它对我来说很好。.您可以以相同的方式尝试。

答案 1 :(得分:0)

post__not_in(数组)-使用帖子ID。指定不检索的帖子。如果在与post__in相同的查询中使用了此查询,它将被忽略。

将post__not_in值更改为Array。

        $args = array(
            'post_type'         => 'post',
            'posts_per_page'    => 3,
            'orderby'           => 'date',
            'order'             => 'desc',
            'post_status'       => 'publish',
            'cat'               => 399,
            'post__not_in'      => array('YOUR_POST_ID1','YOUR_POST_ID2'),
        ); 

有关更多帮助,请参见以下链接:Click Here

答案 2 :(得分:0)

打印出WP_Query结果时,我发现正在发生以下情况:

WP_Query Object ( [query] => Array ( [post_type] => post [posts_per_page] => 3 [orderby] => date [order] => desc [post_status] => publish [cat] => 399 [post__not_in] =>数组([0] => 8117) ) [query_vars] => Array ( [post_type] => post [posts_per_page] => 3 [orderby] => date [order] => DESC [post_status] => publish [cat] => 399 [post__not_in] =>数组([0] => 7990 )

dineshkashera向我建议,可能是pre_get_posts()过滤器引起的。由于我自己没有使用此功能,因此我通过停用所有非常规的插件来解决插件冲突。一次重新激活它们后,我发现罪魁祸首是Woocommerce销售点插件。我目前已停用此插件,并将向开发人员寻求解决方案。

答案 3 :(得分:0)

将来是否有其他插件或主题可以覆盖该数组? var_dump,然后尝试使用WP_Query对象中的query_vars。然后您可以识别它。或者只是停用所有插件,然后逐个激活它。那么您就可以确定!

如果任何插件将其覆盖,则应使用钩子来实现。因此搜索并查看挂钩的优先级。然后用高优先级的钩子覆盖它。下面的示例。

    import axios from 'axios';
    import vueAxios from 'vue-axios';
    Vue.use(vueAxios,axios); //add Vue.use(axios)

仅此而已。只需将这些函数和变量重命名即可。