2017-11-18 1 views
1

Ich möchte ein Telefonnummernfeld zur Woocommerce-Einstellungsseite hinzufügen. Ich kann das Feld zur Einstellungsliste hinzufügen, es wird jedoch an den unteren Rand der gesamten Registerkarte angehängt. Im Idealfall möchte ich das Feld in der Store Address Abschnitte auf der Registerkarte Allgemein hinzufügen.Fügen Sie ein benutzerdefiniertes Feld zur allgemeinen Einstellung von Woocommerce in der Geschäftsadresse hinzu.

Hier ist, was ich verwende jetzt (abgespeckte):

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; 

} 

ich mit array_splice einen Versuch gemacht, konnte aber nicht überall mit ihm.

Jeder Rat würde sehr geschätzt werden.

Antwort

2

Dies kann auf einfache Weise die woocommerce_store_postcode Feld ID-Targeting durchgeführt wird Store Telefon benutzerdefiniertes Feld in diesen allgemeinen Einstellungen an der richtigen Stelle einzufügen:

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

-Code geht in Funktion. PHP-Datei Ihres aktiven untergeordneten Themas (oder Themas) oder auch in einer beliebigen Plugin-Datei.

Getestet und Arbeit ... Sie werden so etwas wie erhalten:

enter image description here

+1

Das funktionierte eine Festlichkeit! Danke für die einfache und gründliche Antwort. – Chris

0

Dieser Code fügt Ihre Telefonnummer nach dem PLZ-Element im Abschnitt "Geschäftsadresse" hinzu. Ich habe die Spleißfunktion von here ausgeliehen.

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