Woocommerce 中的 Switch 语句和自定义简码问题
Switch statement and custom shortcode issue in Woocommerce
我在一家 Woocommerce 商店工作,在产品页面上,我希望能够通过在文本编辑器中放置一个短代码来显示多个图像。图像是有条件的,只有在调用的属性包含特定值时才会显示。我能够创建这样一个函数,使用 switch 语句查找值并显示图像(如果该值存在)。
这是代码 - 它位于我的 child 主题中的 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');
它的工作方式与预期的差不多,并根据值显示所有图像,但出于某种原因,无论我将 short-code 放在哪里。它出现在页面的顶部,就在标题之后,无论我把短代码放在哪里。我有另一个 short-code 可以做其他事情,这个我可以选择位置,我把简码放在哪里。
注意:
如果我将 echo 更改为 return,short-code 会出现在我希望它出现的位置。
但由于某种原因它只显示第一种情况,而不显示其他也包含值的情况。我也尝试在每个案例后删除 "break;" 。
如果有人有时间愿意帮助我找出为什么 short-code 位于页面顶部,而不是 short-code 所在的位置,我将非常高兴放置.
因为它在 returning 时工作,这意味着框架在它想要的地方调用函数,并希望您 return 将它的值放在适当的位置。如果您调用 echo
,它会立即将值发送到输出,但不会起作用。
您可以将您想要的所有 HTML 追加到一个变量中,然后将 return 添加到变量中,它应该可以解决问题。所以像这样:
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;
}
对于短代码,所有内容都需要始终返回,但从不回显(或打印)…
此外,自 WordPress 4.5.0 使用 get_terms()
函数以来,分类应始终通过 $args 数组中的 'taxonomy' 参数传递。
所以你可以做的是 打开缓冲 使用 php ob_start()
函数这样:
function display_colors_pic_sp() {
ob_start(); // Start buffering
$path = content_url('/uploads/2019/04/');
foreach( get_terms( array('taxonomy' => 'pa_color') ) as $term) {
switch ($term->name) {
case "Blue RAL 5003":
echo '<img src="'.$path.'RAL_5003_1024x1024-1.jpg">';
break;
case "Blue RAL 5010":
echo '<img src="'.$path.'RAL_5003_1024x1024-1.jpg">';
break;
case "Blue RAL 5013":
echo '<img src="'.$path.'RAL_5013_e5005376-6410-479a-b526-f23ca5f13cb3_1024x1024.jpg">';
break;
case "Green RAL 6007":
echo '<img src="'.$path.'RAL_6007_1024x1024.jpg">';
break;
case "Grey RAL 7021":
echo '<img src="'.$path.'RAL_7032_1024x1024.jpg">';
break;
case "Grey RAL 7035":
echo '<img src="'.$path.'RAL_7035_f0d32a8d-7aac-45a8-97ec-cd46c8e35daf_1024x1024.jpg">';
break;
case "Black RAL 9005":
echo '<img src="'.$path.'RAL_9005_61462eeb-8b3d-4792-909b-fdb549d47e80_1024x1024.jpg">';
break;
case "White RAL 9010":
echo '<img src="'.$path.'RAL_9010_f80b4432-ba58-4377-821a-8ee8832a8610_1024x1024.jpg">';
break;
}
}
return ob_get_clean(); // Return buffered content
}
add_shortcode('colorpic', 'display_colors_pic_sp');
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。
我在一家 Woocommerce 商店工作,在产品页面上,我希望能够通过在文本编辑器中放置一个短代码来显示多个图像。图像是有条件的,只有在调用的属性包含特定值时才会显示。我能够创建这样一个函数,使用 switch 语句查找值并显示图像(如果该值存在)。
这是代码 - 它位于我的 child 主题中的 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');
它的工作方式与预期的差不多,并根据值显示所有图像,但出于某种原因,无论我将 short-code 放在哪里。它出现在页面的顶部,就在标题之后,无论我把短代码放在哪里。我有另一个 short-code 可以做其他事情,这个我可以选择位置,我把简码放在哪里。
注意: 如果我将 echo 更改为 return,short-code 会出现在我希望它出现的位置。 但由于某种原因它只显示第一种情况,而不显示其他也包含值的情况。我也尝试在每个案例后删除 "break;" 。
如果有人有时间愿意帮助我找出为什么 short-code 位于页面顶部,而不是 short-code 所在的位置,我将非常高兴放置.
因为它在 returning 时工作,这意味着框架在它想要的地方调用函数,并希望您 return 将它的值放在适当的位置。如果您调用 echo
,它会立即将值发送到输出,但不会起作用。
您可以将您想要的所有 HTML 追加到一个变量中,然后将 return 添加到变量中,它应该可以解决问题。所以像这样:
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;
}
对于短代码,所有内容都需要始终返回,但从不回显(或打印)…
此外,自 WordPress 4.5.0 使用 get_terms()
函数以来,分类应始终通过 $args 数组中的 'taxonomy' 参数传递。
所以你可以做的是 打开缓冲 使用 php ob_start()
函数这样:
function display_colors_pic_sp() {
ob_start(); // Start buffering
$path = content_url('/uploads/2019/04/');
foreach( get_terms( array('taxonomy' => 'pa_color') ) as $term) {
switch ($term->name) {
case "Blue RAL 5003":
echo '<img src="'.$path.'RAL_5003_1024x1024-1.jpg">';
break;
case "Blue RAL 5010":
echo '<img src="'.$path.'RAL_5003_1024x1024-1.jpg">';
break;
case "Blue RAL 5013":
echo '<img src="'.$path.'RAL_5013_e5005376-6410-479a-b526-f23ca5f13cb3_1024x1024.jpg">';
break;
case "Green RAL 6007":
echo '<img src="'.$path.'RAL_6007_1024x1024.jpg">';
break;
case "Grey RAL 7021":
echo '<img src="'.$path.'RAL_7032_1024x1024.jpg">';
break;
case "Grey RAL 7035":
echo '<img src="'.$path.'RAL_7035_f0d32a8d-7aac-45a8-97ec-cd46c8e35daf_1024x1024.jpg">';
break;
case "Black RAL 9005":
echo '<img src="'.$path.'RAL_9005_61462eeb-8b3d-4792-909b-fdb549d47e80_1024x1024.jpg">';
break;
case "White RAL 9010":
echo '<img src="'.$path.'RAL_9010_f80b4432-ba58-4377-821a-8ee8832a8610_1024x1024.jpg">';
break;
}
}
return ob_get_clean(); // Return buffered content
}
add_shortcode('colorpic', 'display_colors_pic_sp');
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。