2017-09-24 3 views
0

Dans Woocommerce, j'ai été en mesure d'ajouter un bouton de soumission personnalisé sur la page d'édition de commande dans une métabox personnalisée.WooCommerce Commandes metabox: Exécuter le code php sur l'action de soumission personnalisée

Voici mon code (ajouté dans function.php thème Wordpress):

add_action('add_meta_boxes', 'MY_order_meta_boxes'); 
function MY_order_meta_boxes() { 

    add_meta_box(
     'woocommerce-order-verifyemail', 
     __('Trusted List'), 
     'order_meta_box_content', 
     'shop_order', 
     'side', 
     'default' 
    ); 
} 

function order_meta_box_content($order_id) { 
    global $woocommerce, $table_prefix, $wpdb; 
    $order = new WC_Order($order_id); 
    $customeremail = $order->get_billing_email(); 
    ?> 

     <form method="post" action="CURRENT_FILE_URL"> 
      <input type="submit" name="submit" value="submit"/> 
     </form> 

    <?php 
    if(isset($submit)) {$order->add_order_note(sprintf("test2"));} 
    ?> 

    <?php 
    return $order_id; 
} 

Mais je ne sais pas pourquoi, le code ne fonctionne pas lorsque le bouton est cliqué (soumis).

Comment puis-je exécuter du code personnalisé, lorsque le bouton Envoyer est cliqué sur cette métabox personnalisée?

Répondre

1

Pour faire ce travail que vous vous attendez besoin de quelques autres choses. J'ai également supprimé le code inutile et quelques erreurs. Également <imput>"submit" ID est trop générique et peut faire des erreurs inattendues.

Vous pourrez faire une action (ou sauvegarde) dans une fonction personnalisée accroché dans save_post crochet d'action:

// Add a custom metabox 
add_action('add_meta_boxes', 'trusted_list_order_meta_boxes'); 
function trusted_list_order_meta_boxes() { 

    add_meta_box(
     'woocommerce-order-verifyemail', 
     __('Trusted List'), 
     'trusted_list_order_meta_box_content', 
     'shop_order', 
     'side', 
     'default' 
    ); 
} 

// Custom metabox content 
function trusted_list_order_meta_box_content($post){ 
    $customeremail = get_post_meta($post->ID, '_billing_email', true); 
    $button_text = __('Add Note action', 'woocommerce'); 

    echo '<form method="post" action="CURRENT_FILE_URL"> 
     <input type="submit" name="submit_trusted_list" value="' . $button_text . '"/> 
     <input type="hidden" name="trusted_list_nonce" value="' . wp_create_nonce() . '"> 
    </form>'; 
} 

// Saving or doing an action when submitting 
add_action('save_post', 'trusted_list_save_meta_box_data'); 
function trusted_list_save_meta_box_data($post_id){ 

    // Only for shop order 
    if ('shop_order' != $_POST[ 'post_type' ]) 
     return $post_id; 

    // Check if our nonce is set (and our cutom field) 
    if (! isset($_POST[ 'trusted_list_nonce' ]) && isset($_POST['submit_trusted_list'])) 
     return $post_id; 

    $nonce = $_POST[ 'trusted_list_nonce' ]; 

    // Verify that the nonce is valid. 
    if (! wp_verify_nonce($nonce)) 
     return $post_id; 

    // Checking that is not an autosave 
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) 
     return $post_id; 

    // Check the user’s permissions (for 'shop_manager' and 'administrator' user roles) 
    if (! current_user_can('edit_shop_order', $post_id) && ! current_user_can('edit_shop_orders', $post_id)) 
     return $post_id; 

    // Action to make or (saving data) 
    if(isset($_POST['submit_trusted_list'])) { 
     $order = wc_get_order($post_id); 
     // $customeremail = $order->get_billing_email(); 
     $order->add_order_note(sprintf("test2")); 
    } 
} 

Code va dans le fichier function.php de votre thème enfant actif (ou thème) ou aussi dans n'importe quel fichier plugin.

Le code est testé sur Woocommerce 3+ et fonctionne. Vous obtiendrez:

enter image description here

Dans votre mesure Metabox contenu fonction vous ne serez pas en mesure d'obtenir des données utilisant $_POST données soumises ... Ainsi, par exemple $_POST['submit'] sera toujours vide.

+0

@LoicTheAztech, merci beaucoup de travail – Mostafa

+0

@LoicTheAztech pouvez-vous fait ce bouton javascript? – Mostafa

+0

@Mostafa que voulez-vous dire: "fait ce bouton javascript?" Si vous voulez dire "ajax", c'est beaucoup plus compliqué et je n'ai pas le temps pour ça, il vaudrait peut-être mieux poser une nouvelle question pour ça ... – LoicTheAztec

1

... Je pense que vous devriez utiliser $ _POST [ « submit »] autre que $ soumettre

+0

vous avez raison. je ai changé à $ _POST ['soumettre'] mais pas de chance :( – Mostafa