我试图在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,只有它们会打印在屏幕上。
有人知道我如何查询和存储为变量吗?
最合适的回答,由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将使用当前的“全局”帖子,所以我们需要告诉它我们实际上想要从哪个帖子中获取数据。