【问题标题】:Add a custom field to Woocommerce general setting in store address section在商店地址部分的 Woocommerce 常规设置中添加自定义字段
【发布时间】:2018-05-01 22:56:42
【问题描述】:

我希望将电话号码字段添加到 Woocommerce 设置页面。我可以将字段添加到设置列表中,但它会附加到整个选项卡的底部。理想情况下,我想在常规选项卡的 Store Address 部分中添加该字段。

这是我现在使用的(精简版):

add_filter('woocommerce_general_settings', 'woocommerce_add_phone');

function woocommerce_add_phone($settings) {

    $settings[] = array(
        'title'    => 'Phone Number',
        'type'     => 'text',
    );

    $sections[] = array( 'type' => 'sectionend', 'id' => 'store_address' );

    return $settings;

}

我尝试使用array_splice,但无法使用它。

任何建议将不胜感激。

【问题讨论】:

    标签: php wordpress woocommerce settings custom-fields


    【解决方案1】:

    这可以通过一个简单的方法来完成

    add_filter('woocommerce_general_settings', 'general_settings_shop_phone');
    function general_settings_shop_phone($settings) {
        $key = 0;
    
        foreach( $settings as $values ){
            $new_settings[$key] = $values;
            $key++;
    
            // Inserting array just after the post code in "Store Address" section
            if($values['id'] == 'woocommerce_store_postcode'){
                $new_settings[$key] = array(
                    'title'    => __('Phone Number'),
                    'desc'     => __('Optional phone number of your business office'),
                    'id'       => 'woocommerce_store_phone', // <= The field ID (important)
                    'default'  => '',
                    'type'     => 'text',
                    'desc_tip' => true, // or false
                );
                $key++;
            }
        }
        return $new_settings;
    }
    

    代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件中。

    经过测试并且可以工作......你会得到类似的东西:

    【讨论】:

    • 这很奏效!感谢您的简单而彻底的回答。
    【解决方案2】:

    LoicTheAztec 代码工作正常,但我想找到一个不循环的解决方案。这是我的版本:

    function add_phone_number_settings($settings) {
        // Search array for the id you want
        $key              = array_search('woocommerce_store_postcode', array_column($settings, 'id')) + 1;
        $custom_setting[] = array(
            'title'    => __('Phone Number'),
            'desc'     => __("Enter shop phone number"),
            'id'       => 'woocommerce_store_phone_number',
            'default'  => '',
            'type'     => 'text',
            'desc_tip' => true,
        );
    
        // Merge with existing settings at the specified index
        $new_settings = array_merge(array_slice($settings, 0, $key), $custom_setting, array_slice($settings, $key));
        return $new_settings;
    }
    add_filter('woocommerce_general_settings', 'add_phone_number_settings');
    
    

    【讨论】:

      【解决方案3】:

      此代码会将您的电话号码添加到“商店地址”部分的邮政编码元素之后。我借用了here的拼接函数。

      add_filter('woocommerce_general_settings', 'woocommerce_general_settings_add_phone_number');
      
      function woocommerce_general_settings_add_phone_number($settings) {
      
          $phone_number = array(
              'title'    => __( 'Phone Number', 'woocommerce' ),
              'desc'     => __( 'Add your phone number.', 'woocommerce' ),
              'id'       => 'woocommerce_store_phone_number',
              'default'  => '',
              'type'     => 'text',
              'desc_tip' => false,
          );
      
          $array_pos = 0;
      
          foreach ($settings as $key => $value) {
             if ( $value['id'] == 'woocommerce_store_postcode' ) {
                  $array_pos = $key;
                  break;
             }
          }
      
          $settings = array_insert( $settings, $phone_number, $array_pos + 1 );
      
          return $settings;
      }
      
      /*
          Array insert
          @array      the array to add an element to
          @element    the element to add to the array
          @position   the position in the array to add the element
       */
      if(!function_exists('array_insert')) {
          function array_insert($array, $element, $position) {
              // if the array is empty just add the element to it
              if(empty($array)) {
                  $array[] = $element;
              // if the position is a negative number
              } elseif(is_numeric($position) && $position < 0) {
                  // if negative position after count
                  if(count($array) + $position < 0) {
                      $position = 0;
                  } else {
                      $position = count($array) + $position;
                  }
                  // try again with a positive position
                  $array = array_insert($array, $element, $position);
              // if array position already set
              } elseif(isset($array[$position])) {
                  // split array into two parts
                  $split1 = array_slice($array, 0, $position, true);
                  $split2 = array_slice($array, $position, null, true);
                  // add new array element at between two parts
                  $array = array_merge($split1, array($position => $element), $split2);
              // if position not set add to end of array
              } elseif(is_null($position)) {
                  $array[] = $element;
              // if the position is not set
              } elseif(!isset($array[$position])) {
                  $array[$position] = $element;
              }
              // clean up indexes
              $array = array_values($array);
              return $array;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-29
        • 1970-01-01
        • 1970-01-01
        • 2016-04-22
        • 1970-01-01
        • 2019-05-05
        相关资源
        最近更新 更多