php - 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;” 在每个案例之后。
如果有人有时间并且愿意帮助我并找出为什么短代码位于页面顶部而不是短代码放置的位置,我将非常高兴。
解决方案
由于它在返回时起作用,这意味着框架调用它想要的函数并期望您返回值以将其放置在适当的位置。如果您调用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;
}
推荐阅读
- flutter - 在 Flutter 中进行电子邮件验证后,如何将用户详细信息添加到 Firestore DB?
- chef-infra - 错误:报告处理程序 Chef::Handler::AuditReport 引发 #
- javascript - jQuery acme newsticker 重新启动标记位置
- javascript - 谷歌表格的前端技术是什么?
- android - 向 docker daemon 发送构建上下文对于 android 来说大于 250 GB
- opencv - OpenCV:如何将遮罩外的所有像素转换为透明?
- vue.js - Vue:css.extract:false时不显示图标
- grep - 如何使用 grep 输出 2 个关键字之间的任何内容?用于 grep 的正则表达式
- ssis - 使用字符串“NULL”值更改 SSIS 平面文件数据的数据类型
- c# - 如何将公司区域的 url 写入主仪表板登录?