You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从WordPress HivePress复选框字符串提取独立变量

问题:HivePress社交APP选择结果变量匹配错位

我使用WordPress和HivePress插件搭建广告目录,用户可在表单中选择用于联系的APP——social_apps字段下设有Telegram、Viber、WhatsApp三个复选框。通过代码$apps = $listing->display_social_apps();可获取用户选择结果,返回值为逗号分隔的字符串(例如仅选Viber和WhatsApp时返回“Viber, WhatsApp”,全选时返回“Telegram, Viber, WhatsApp”)。

尝试用explode拆分字符串并赋值给三个独立变量,但仅当用户全选三个复选框时变量对应正确;若仅选择部分APP(如Viber和WhatsApp),变量会出现错位(如$telegram变量会输出Viber)。需要让每个变量始终对应正确的APP(如$viber仅在用户选择Viber时输出Viber)。

原代码如下:

add_filter(
    'hivepress/v1/templates/listing_view_page/blocks',
    function( $blocks, $template ) {
        $listing = $template->get_context('listing');
        
        if(!$listing){
            return $blocks;
        }
        
        $apps = $listing->display_social_apps();
        
        $results = explode(',', $apps);
          $telegram = $results[0];
          $viber = $results[1];
          $whatsapp = $results[2];
    

        return hivepress()->template->merge_blocks(
                    $blocks,
                    [
                        'page_sidebar' => [
                                'blocks' => [
                                    'custom_text_apps' => [
                            'type' => 'content',
        'content' => '<p><strong>'.$telegram.' and '.$viber.' and '.$whatsapp.'</strong></p>',
                                        '_order' => 12,
                                    ],
                                ],
                            ],
                ]
                );
        },
    
    1000,
    2
);

表单字段代码:

<div class="hp-form__field hp-form__field--checkboxes"><label class="hp-field__label hp-form__label"><span>Apps</span> <small>(optional)</small></label><div class="hp-field__description">Select the apps you can be contacted on.</div><div class="hp-field hp-field--checkboxes"><ul><li><label for="social_apps_6475ffa0ec27c" class="hp-field hp-field--checkbox"><input type="checkbox" name="social_apps[]" id="social_apps_6475ffa0ec27c" value="46"  ><span>Telegram</span></label></li><li><label for="social_apps_6475ffa0ec377" class="hp-field hp-field--checkbox"><input type="checkbox" name="social_apps[]" id="social_apps_6475ffa0ec377" value="45"  checked='checked' ><span>Viber</span></label></li><li><label for="social_apps_6475ffa0ec46f" class="hp-field hp-field--checkbox"><input type="checkbox" name="social_apps[]" id="social_apps_6475ffa0ec46f" value="35"  checked='checked' ><span>WhatsApp</span></label></li></ul></div></div>

解决方法

核心思路是不依赖数组索引赋值,而是先把返回的字符串处理成干净的APP名称数组,再逐个判断每个APP是否存在于数组中,确保变量与APP一一对应。

修改后的代码:

add_filter(
    'hivepress/v1/templates/listing_view_page/blocks',
    function( $blocks, $template ) {
        $listing = $template->get_context('listing');
        
        if(!$listing){
            return $blocks;
        }
        
        $apps = $listing->display_social_apps();
        
        // 处理字符串:拆分、去空白、过滤空元素
        $selected_apps = array_filter(array_map('trim', explode(',', $apps)));
        
        // 逐个判断APP是否被选中,赋值对应名称或空字符串
        $telegram = in_array('Telegram', $selected_apps) ? 'Telegram' : '';
        $viber = in_array('Viber', $selected_apps) ? 'Viber' : '';
        $whatsapp = in_array('WhatsApp', $selected_apps) ? 'WhatsApp' : '';
        
        // 收集非空的APP名称,避免多余的"and"
        $display_apps = array_filter([$telegram, $viber, $whatsapp]);
        $display_text = !empty($display_apps) ? implode(' and ', $display_apps) : 'No contact apps selected';

        return hivepress()->template->merge_blocks(
            $blocks,
            [
                'page_sidebar' => [
                    'blocks' => [
                        'custom_text_apps' => [
                            'type' => 'content',
                            'content' => '&lt;p&gt;&lt;strong&gt;'.$display_text.'&lt;/strong&gt;&lt;/p&gt;',
                            '_order' => 12,
                        ],
                    ],
                ],
            ]
        );
    },
    1000,
    2
);

关键说明

  1. 字符串处理:用array_map('trim', ...)去掉每个APP名称前后的空格,再用array_filter过滤掉拆分后可能出现的空元素(比如用户全不选时,explode会得到一个包含空字符串的数组)。
  2. 精准匹配:通过in_array判断每个预设的APP名称是否在选中列表里,确保变量只在对应APP被选中时才赋值。
  3. 友好输出:收集非空的APP名称,用implode拼接成自然的文本,避免出现类似“ and and WhatsApp”的错误格式,同时处理了用户未选任何APP的情况。

内容的提问来源于stack exchange,提问作者Instig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 14:14:55