2017-11-18 73 views
1

我正在寻找将电话号码字段添加到Woocommerce设置页面。我可以将该字段添加到设置列表中,但它会附加到整个选项卡的底部。理想情况下,我想在常规标签上的店铺地址部分添加该字段。在商店地址部分添加自定义字段到Woocommerce常规设置

下面是我使用的是什么现在(下调):

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但不能与它是行不通的。

任何意见将不胜感激。

回答

2

这可以以简单的方式针对woocommerce_store_postcode场ID在正确的位置插入这个常规设置的商店手机自定义字段来实现:

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; 
} 

代码放在功能。你的活动儿童主题(或主题)的php文件或任何插件文件。

测试和工作......你会得到这样的:

enter image description here

+1

这个工作一种享受!感谢您提供简单而彻底的答案。 – Chris

0

此代码会将您的电话号码添加到商店地址部分的邮政编码元素之后。我借用了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; 
    } 
} 
相关问题