2016-11-24 5 views
0

Dort möchte ich benutzerdefinierte Meta-Box in meiner Bestellung woocommerce hinzufügen. Ich habe es schon schaffen, aber da habe ich Problem, wenn ich versuche, seine doesnt ändern mein Code hier zu sparen:Wie zu speichern Hinzufügen Meta-Box woocommerce wordpress

add_action('add_meta_boxes', 'add_meta_boxes'); 

function add_meta_boxes() 
{ 
    add_meta_box( 
     'woocommerce-order-my-custom', 
     __('Order Driver'), 
     'order_my_custom', 
     'shop_order', 
     'side', 
     'default' 
    ); 
} 
function order_my_custom() 
{ 
    $servername = "localhost"; 
    $username = "root"; 
    $password = "no_password"; 
    $dbname = "testtable"; 

    $conn = new mysqli($servername, $username, $password, $dbname); 
    // Check connection 
    if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 
    } 

    $sql = "SELECT * FROM wp_posts WHERE post_type='drivers'"; 
    $result = $conn->query($sql); 

    if ($result->num_rows > 0) { 

    echo "<select style='width:100%;' >"; 
    echo "<option> --- Select ---</option>"; 
    while($row = $result->fetch_assoc()) { 
    echo "<option value=".$row['ID'].">".$row['post_title']."</option>"; 
    } 
    echo "</select>"; 
    } else { 
    echo "0 results"; 
} 
$conn->close(); 

} 

was soll ich jetzt tun? habe jemand mir eine lösung, damit mein code funktionieren kann wie ich will?

wenn ich benutze:

echo "<option".($selected=='')?'':'selected'." value=".$row['ID'].">".$row['post_title']."</option>"; 

error

Wenn ich nur:

echo "<option value=".$row['ID'].">".$row['post_title']."</option>"; 

should

jetzt:

enter image description here

Antwort

1

Ihnen fehlt der Code, um die ID des ausgewählten Treibers in der Reihenfolge Meta zu speichern, während die Bestellung nach der Auswahl des Treibers gespeichert wird.

Ich habe den Code nicht getestet, hoffe aber, es hilft.

add_action('add_meta_boxes', 'add_meta_boxes'); 

function add_meta_boxes() 
{ 
    add_meta_box( 
     'woocommerce-order-my-custom', 
     __('Order Driver'), 
     'order_my_custom', 
     'shop_order', 
     'side', 
     'default' 
    ); 
} 
function order_my_custom() 
{ 
    global $woocommerce, $post; 
    $order_id =$post->ID; 
    $servername = "localhost"; 
    $username = "root"; 
    $password = "no_password"; 
    $dbname = "testtable"; 

    $conn = new mysqli($servername, $username, $password, $dbname); 
    // Check connection 
    if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 
    } 

    $sql = "SELECT * FROM wp_posts WHERE post_type='drivers'"; 
    $result = $conn->query($sql); 

    if ($result->num_rows > 0) { 
    ob_start();?> 
    <select name='order_driver' style='width:100%;' > 
    <option value=""> --- Select ---</option> 
    <?php 
    while($row = $result->fetch_assoc()) { 
     $order_driver = get_post_meta($order_id,'order_driver',true); 
    ?> 
    <option <?php echo ($row['ID']==$order_driver)?'selected':''?> value="<?php echo $row['ID']?>"><?php echo $row['post_title']?></option> 

    <?php } ?> 
    </select> 
    <?php } else {?> 
    <option value="">0 Results</option> 
    <?php } 
    echo ob_get_clean(); 
$conn->close(); 

} 

function save_drivers_meta($post_id, $post, $update) { 

    $post_type = get_post_type($post_id); 

    /* 
    * Make sure we are updating post meta only for shop orders 
    */ 
    if ("shop_order" != $post_type) return; 

    // - Update the post's order_driver value if it's set. 

    if (isset($_POST['order_driver'])) { 
     update_post_meta($post_id, 'order_driver', sanitize_text_field($_POST['order_driver'])); 
    } 
} 
add_action('save_post', 'save_drivers_meta', 10, 3); 
+0

oke, das hilft mir. Aber da war es ein kleines Problem, wenn ich folgendes benutze: 'echo" "; ' Wenn ich diesen Code benutze, möchte ich alle Daten anzeigen lassen. haben Sie eine Lösung für mich? –

+0

Sorry, ich habe Probleme zu verstehen :(. Könnten Sie var_dump ($ Zeile) in der While-Schleife und zeigen, was in $ Zeile kommt und Screenshot der Auftragsseite, die das Meta-Feld zeigt. – Yamu

+0

Sehen Sie, ob das jetzt funktioniert – Yamu

Verwandte Themen