2016-09-15 3 views
4

I einem WooCommerce verwenden und ich habe eine Auswahlbox in dem Admin-Panel gebaut. Ich fülle die Informationen in der Auswahlbox über eine flache Datei. Alles funktioniert gut (fast).WooCommerce - Abrufen des korrekten Datenwertes für Auswahlbox nach

Der Teil steckte ich bin eingeschaltet ist, nachdem ich die „Wahl“ wählen Ich will und das speichern Ich erhalte die Array $key Position und nicht die tatsächliche $value. Ich bin nah dran, aber ich kann es nicht genau sagen.

Update: Hier ist meine vollständige Code:

function woo_add_custom_admin_product_tab() { 
?> 
    <li class="custom_tab"><a href="#custom_tab_data"><?php _e('Additional Information', 'woocommerce'); ?></a></li> 
<?php 
} 
add_action('woocommerce_product_write_panel_tabs', 'woo_add_custom_admin_product_tab'); 


function woo_add_custom_admin_fields() {  
    global $woocommerce, $post; 

    echo '<div id="custom_tab_data" class="panel woocommerce_options_panel">'; 
    echo '<div class="options_group">'; 

    // Select - Breed1 
    if (file_exists (plugin_dir_path(__FILE__) .'breed.txt')) { 
     $breedData = file_get_contents (plugin_dir_path(__FILE__) .'breed.txt'); 
     $breedArray = explode ("\n", $breedData); 
    } 

    woocommerce_wp_select(array(
     'id'  => '_select_breed1', 
     'label' => __('Select Primary Breed', 'woocommerce'), 
     'desc_tip' => 'true', 
     'description' => __('Select the primary breed of the pet.', 'woocommerce'), 
     'options' => $breedArray 
    )); 
    echo '</div>'; 
    echo '</div>'; 
} 
add_action('woocommerce_product_write_panels', 'woo_add_custom_admin_fields'); 


// Save Fields; 
function woo_add_custom_general_fields_save($post_id){ 
    // Text Field - Pet Name 
    $woocommerce_text_field = $_POST['_pet_name']; 
    if(!empty($woocommerce_text_field)) 
     update_post_meta($post_id, '_pet_name', esc_attr($woocommerce_text_field)); 

    // Select Field - Breed 
    $woocommerce_select = $_POST['_select_breed1']; 
    if(!empty($woocommerce_select)) 
     update_post_meta($post_id, '_select_breed1', esc_attr($woocommerce_select)); 
} 
add_action('woocommerce_process_product_meta', 'woo_add_custom_general_fields_save'); 

Meine breed.txt Datei enthält 3 Zeilen (Artikel):

Please Select a breed... 
Abyssinian 
Affenpinscher 

Und das erzeugte Array sieht wie folgt aus:

Array ( 
    [0] => Please Select a breed... 
    [1] => Abyssinian 
    [2] => Affenpinscher 
) 

Also, wenn ich "Affenpinscher" zum Beispiel wählen, I erhalten als Wert "2" statt "Affenpinscher".

Was mache ich falsch? Wie kann ich dieses Problem lösen?

Dank

+0

Ihr Array nichts mit einer flachen Datei zu tun hat, sollten Sie diese Frage umbenennen. – Devon

Antwort

1

- Aktualisiert - (getestet und funktioniert)

Das ist absolut ein normales Verhalten für ein Drop-Down-Wähler <select>. Sie müssen nur ein paar kleine Dinge in Ihrem Code hinzufügen, um es auf eine andere Weise zu arbeiten.

Die Änderungen sind:
- erstens, wenn die Anordnung von Werten aus der externen Textdatei verfügbar ist, speichere ich es in Wordpress Optionen.
- Zweitens In der letzten Sparfunktion, erhalte ich die gespeicherten Array und mit den ausgewählten key, die ich von $_POST['_select_breed_key1']; erhalten, rufe ich den entsprechenden Wert, den ich in einem neuen Eintrag speichern (neue Zeile in wp_postmeta Tabelle.

//Create the fields 
function woo_add_custom_admin_fields() {  
    global $woocommerce, $post; 

    echo '<div id="custom_tab_data" class="panel woocommerce_options_panel">'; 
    echo '<div class="options_group">'; 

    // Select - Breed1 
    if (file_exists (plugin_dir_path(__FILE__) .'breed.txt')) { 
     $breedData = file_get_contents (plugin_dir_path(__FILE__) .'breed.txt'); 
     $breedArray = explode ("\n", $breedData); 

     //Storing the array in wp_options table 
     if(get_option('wc_product_add_info_tab')) 
      update_option('wc_product_add_info_tab', $breedArray); 
     else 
      add_option('wc_product_add_info_tab', $breedArray); 
    } 

    woocommerce_wp_select(array(
     'id'  => '_select_breed_key1', 
     'label' => __('Select Primary Breed', 'woocommerce'), 
     'desc_tip' => 'true', 
     'description' => __('Select the primary breed of the pet.', 'woocommerce'), 
     'options' => $breedArray 
    )); 

    echo '</div>'; 
    echo '</div>'; 
} 
add_action('woocommerce_product_write_panels', 'woo_add_custom_admin_fields'); 


// Save Created Fields; 
function woo_add_custom_general_fields_save($post_id){ 

    // Select Field - Breed 
    $wc_select = $_POST['_select_breed_key1']; 
    if(!empty($wc_select)) 
     update_post_meta($post_id, '_select_breed_key1', esc_attr($wc_select)); 

    // Saving the corresponding value (from "$wc_select" selected key) to database 
    if(get_option('wc_product_add_info_tab')) { 

     // Getting the array 
     $breed_arr = get_option('wc_product_add_info_tab'); 

     // Saving the corresponding value 
     update_post_meta($post_id, '_select_breed_value1', $breed_arr[$wc_select]); 
    } 
} 
add_action('woocommerce_process_product_meta', 'woo_add_custom_general_fields_save'); 

Sie haben jetzt in in wp_postmeta Tabelle für eine Produkt-ID (post_id), 2 meta_keys:
- '_select_breed_key1', die die ausgewählten Schlüssel
speichert - '_select_breed_value1' dass Geschäfte der entsprechende Wert

Verwendung zum Beispiel (diesen Wert erhalten):

<?php 

// Third parameter is set to "true" as it is a string (Not an array) 
$breed_value1 = get_post_meta($post_id, '_select_breed_value1', true); 
echo $breed_value1; 

?> 
+0

Vielen Dank Loic! Es sieht so aus, als würde ich in die richtige Richtung gehen und ich musste den [$ Wert] des Arrays bekommen. Leider funktioniert es nicht so, wie ich es erwarten würde. Wenn ich auf das Update klicke, wird der Wert nicht in der Datenbank gespeichert. Nur ein FYI, ich benutze auch Funktionen, um dies zu erreichen, hier ist mein vollständiger Code: – JoeDostie

+0

Woo Hoo! Es funktionierte! Nur eine Korrektur musste ich machen ... In der // Feld auswählen - Rasse musste ich nur aktualisieren: if (! Empty ($ woocommerce_select)) zu if (! Leer ($ wc_select)) Aber ansonsten hat es funktioniert! Ich muss immer noch das Array lernen und Box-Eigenschaften auswählen. Aber danke, es hat funktioniert .... Ich denke, ich werde versuchen, ziehen aus der Datenbank als nächstes! – JoeDostie

+0

Oh ja Entschuldigung ... wenn das Umbenennen dieses vergessen hat. aktualisiert. – LoicTheAztec

Verwandte Themen