动态地将一系列产品ID传递给Woocommerce“产品”简码

时间:2018-11-13 16:21:28

标签: php wordpress woocommerce advanced-custom-fields shortcode

我正在使用主题,并且具有自定义帖子类型“卖家”。我在WooCommerce中有产品,通过“高级自定义”字段将产品分配给卖方。在我的single-seller.php中,我有:

<?php echo do_shortcode('[products]'); ?>

根据主题要求完美地退还产品。我有一个查询可以查询并显示自己的代码:

$relatedProducts = get_posts(array(
    'meta_query' => array(
        array(
            'key' => 'seller', //ACF field name
            'value' => get_the_ID(),
            'compare' => 'LIKE'
        ),
    ),
    'numposts' => -1,
    'post_status' => 'publish',
    'post_type' => 'product',
));

我可以将简码传递给ids参数,什么是最好的方法?

<?php echo do_shortcode('[products ids=""]'); ?>

全力以赴。

2 个答案:

答案 0 :(得分:1)

您已经可以使用woocommerce [products]的{​​{3}}短代码了……

get_posts()功能中,您将添加arguments数组:

'fields'     => 'ids',

获取一系列产品ID…

然后使用implode()函数将您的产品ID数组转换为ID字符串,您将可以通过以下方式将ID作为字符串包含在您的短代码中:

<?php // Your query
$related_ids = get_posts(array(
    'meta_query'  => array(
        array(
            'key'     => 'seller', //ACF field name
            'value'   => get_the_ID(),
            'compare' => 'LIKE'
        ),
    ),
    'numposts'    => -1,
    'post_status' => 'publish',
    'post_type'   => 'product',
    'fields'      => 'ids', // <==== HERE to get an array of IDs
)); ?>

<?php echo do_shortcode("[products ids='".implode(',',$related_ids)."']"); ?>

经过测试可以正常工作。

答案 1 :(得分:0)

您是自己的简码吗?以下是使用参数创建简码的方法:https://developer.wordpress.org/plugins/shortcodes/shortcodes-with-parameters/

在查询中,您必须添加

'post__in' => array(<put list of id here, separated by comma>)