在数组中查询产品和存储ID

时间:2015-05-09 作者:user1235285

我试图在WooCommerce中查询产品,并将其ID作为一个数组返回,该数组可用于有条件过滤。我使用ACF Pro向产品中添加自定义字段,然后使用条件代码。

我和我的开发人员朋友谈过,他建议采用这种方法,将数组存储在$ex_id或$inc_id变量中;

<?php 

query_posts( $args ); while ( have_posts() ) : the_post(); ?>

<?php if( in_array( \'yes\', get_field(\'exclude\') ) ) { ?>

<?php $ex_id[] = the_id() ;?>

<?php } else if( in_array( \'yes\', get_field(\'include\') ) ) { ?>

<?php $inc_id[] = the_id() ;?>

<?php } ;?>

<?php endwhile; wp_reset_query(); ?>
这不起作用,所以我简化了条件代码,发现返回id是首页的id;

<?php 

query_posts(); while ( have_posts() ) : the_post(); ?>

<?php the_id() ;?>

<?php endwhile; wp_reset_query(); ?>
如果我添加$args(特别是;\'post\\u type\'=>\'product\',\'showposts\'=>-1),则查询有效并返回正确的ID,只有它们会打印在屏幕上。

有人知道我如何查询和存储为变量吗?

1 个回复
最合适的回答,由SO网友:TheDeadMedic 整理而成

两件事-避免query_posts, 使用新的查询对象或get_posts 功能(read all about it). 和the_ID() echo是ID,使用get_the_ID() 相反

但是,您可以通过简单地迭代一组帖子(即不使用适当的“循环”并设置全局帖子)来节省一些内存和处理,只需直接获取ID即可:

$product_posts = get_posts(
    array(
        \'posts_per_page\' => -1,
        \'post_type\' => \'product\',
    )
);

$ex_id  = 
$inc_id = array();

foreach ( $product_posts as $product_post ) {
    if ( in_array( \'yes\', get_field( \'exclude\', $product_post->ID ) ) )
        $ex_id[] = $product_post->ID;
    elseif ( in_array( \'yes\', get_field( \'include\', $product_post->ID ) ) )
        $inc_id[] = $product_post->ID;
}
注意我是如何通过的$product_post-ID 作为第二个参数get_field. 这是因为默认情况下,ACF将使用当前的“全局”帖子,所以我们需要告诉它我们实际上想要从哪个帖子中获取数据。

结束

相关推荐

Wordpress global variables?

我有一个叫“某物”的metabox页面。它可以有两个值“value”和“value2”。我在这个页面上使用了一个短代码,希望它显示一些东西的值。问题是我不知道如何在短代码中访问全局变量?例如,我在第页有这个。php:if($something == \"value\") { global $one, $two; $one = 120; $two = 240; } 现在我想在shortocde(functions.php文件)中