在do_shortcode()中提供随机数组

时间:2018-07-16 12:07:33

标签: php wordpress woocommerce

基于此处找到的代码:Assign Wordpress Short code to PHP Variable?

我已创建此代码以提供5个类别的列表:

add_action( 'woocommerce_after_main_content', 'inject_shortcode', 5 );

function inject_shortcode() {
  if( is_shop() ) {
    $my_header = '<br><h2 class="head" align="center">TOP BRANDS WE STOCK</h2>';
    $my_shortcode_string = do_shortcode('[ux_product_categories style="normal" col_spacing="xsmall" columns="5" columns__sm="3" columns__md="5" animate="bounceInUp" ids="33,20,53,55,59,56,58,57,54" text_size="small" text_padding="0px 0px 0px 0px"]');

    echo $my_header;
    echo $my_shortcode_string;
  }
}

但这仅适用于列表中的前5个类别。

现在。 我想向前迈出一步,将类别列表随机化, 因此,每个页面都会刷新,它将选择5个不同的类别。

我想到了以下代码: 但这没用 我在这里想念什么?

add_action( 'woocommerce_after_main_content', 'inject_shortcode', 5 );

function inject_shortcode() {
  if( is_shop() ) {
    $random_categories = array(33,20,53,55,59,56,58,57,54);
    $random_keys = array_rand($random_categories,5);

    $my_header = '<br><h2 class="head" align="center">TOP BRANDS WE STOCK</h2>';
    $my_shortcode_string = do_shortcode('[ux_product_categories style="normal" col_spacing="xsmall" columns="5" columns__sm="3" columns__md="5" animate="bounceInUp"' && 'ids=' && $random_categories[$random_keys[0]] && 'text_size="small" text_padding="0px 0px 0px 0px"]');

    echo $my_header;
    echo $my_shortcode_string;
  }
}

谢谢你, 阿密特。

2 个答案:

答案 0 :(得分:0)

&&是逻辑与。您需要使用.进行字符串连接:

$my_shortcode_string = do_shortcode('[ux_product_categories style="normal" col_spacing="xsmall" columns="5" columns__sm="3" columns__md="5" animate="bounceInUp" ids="' . $random_categories[$random_keys[0]] . '"text_size="small" text_padding="0px 0px 0px 0px"]');

答案 1 :(得分:0)

$random_categories[$random_keys[0]]只会返回$random_keys中的第一个元素。您需要先构建ID字符串,然后才能将其回显为简码。

例如

foreach( $random_keys as $random_key ) {
    $output_ids[] = $random_categories[$random_key];
}

然后将数组implode()放入输出字符串:

$my_shortcode_string = do_shortcode('[ux_product_categories style="normal" col_spacing="xsmall" columns="5" columns__sm="3" columns__md="5" animate="bounceInUp" ids="' . implode(',', $output_ids) . '"text_size="small" text_padding="0px 0px 0px 0px"]');

(我假设您的简码要求将ID作为逗号分隔的列表,如果不将','的{​​{1}}部分更改为分隔符所需的任何内容。)< / em>