首页 > 解决方案 > Woocommerce 中的 Switch 语句和自定义简码问题

问题描述

我正在一家 Woocommerce 商店工作,在产品页面上,我希望能够通过在文本编辑器中放置短代码来显示多个图像。图像是有条件的,只有在调用的属性包含特定值时才会显示。我能够创建这样的函数,如果值存在,则使用 switch 语句查找值并显示图像。

这是代码 - 它位于我的子主题中的 functions.php 中。

   function display_colors_pic_sp() {
        $product = wc_get_product();
        $terms = get_terms("pa_color");
        foreach($terms as $term)
            switch ($term->name) {
                case "Blue RAL 5003":
                    echo '<img src="https://example.dk/wp-content/uploads/2019/04/RAL_5003_1024x1024-1.jpg">';
                break;

                case "Blue RAL 5010":
                    echo '<img src="example.dk/wp-content/uploads/2019/04/RAL_5003_1024x1024-1.jpg">';
                break;

                case "Blue RAL 5013":
                    echo '<img src="https:example.dk/wp-content/uploads/2019/04/RAL_5013_e5005376-6410-479a-b526-f23ca5f13cb3_1024x1024.jpg">';
                break;

                case "Green RAL 6007":
                    echo '<img src="https://example.dk/wp-content/uploads/2019/04/RAL_6007_1024x1024.jpg">';
                break;

                case "Grey RAL 7021":
                    echo '<img src="https://example.dk/wp-content/uploads/2019/04/RAL_7032_1024x1024.jpg">';
                break;

                case "Grey RAL 7035":
                    echo '<img src="https://example.dk/wp-content/uploads/2019/04/RAL_7035_f0d32a8d-7aac-45a8-97ec-cd46c8e35daf_1024x1024.jpg">';
                break;

                case "Black RAL 9005":
                    echo '<img src="https://example.dk/wp-content/uploads/2019/04/RAL_9005_61462eeb-8b3d-4792-909b-fdb549d47e80_1024x1024.jpg">';
                break;

                case "White RAL 9010":
                    echo '<img src="https://example.dk/wp-content/uploads/2019/04/RAL_9010_f80b4432-ba58-4377-821a-8ee8832a8610_1024x1024.jpg">';
                break;

            }


        }

    add_shortcode('colorpic', 'display_colors_pic_sp');

它几乎按照预期的方式工作,并根据值显示所有图像,但出于某种原因,无论我将短代码放在哪里。它出现在页面顶部,就在标题之后,无论我将短代码放在哪里。我有另一个短代码可以做其他事情,这个我可以通过放置短代码的位置来选择位置。

注意:如果我将 echo 更改为返回,短代码会出现在我希望它出现的位置。但是由于某种原因它只显示第一种情况,而不是其他也包含值的情况。我也试过删除“break;” 在每个案例之后。

如果有人有时间并且愿意帮助我并找出为什么短代码位于页面顶部而不是短代码放置的位置,我将非常高兴。

标签: phpwordpresswoocommerceswitch-statementshortcode

解决方案


由于它在返回时起作用,这意味着框架调用它想要的函数并期望您返回值以将其放置在适当的位置。如果您调用echo它,它将立即将值发送到输出,这将不起作用。

您可以将您想要的所有 HTML 附加到一个变量中并返回它,它应该可以解决问题。所以是这样的:

function display_colors_pic_sp() {
    $ret = "";
    $product = wc_get_product();
    $terms = get_terms("pa_color");
    foreach($terms as $term)
        switch ($term->name) {
          case "Blue RAL 5003":
             $ret .= '<img src="https://example.dk/wp-content/uploads/2019/04/RAL_5003_1024x1024-1.jpg">';
             break;
          case "Blue RAL 5010":
             $ret .= '<img src="example.dk/wp-content/uploads/2019/04/RAL_5003_1024x1024-1.jpg">';
             break;
      ...
    return $ret;
}

推荐阅读