2017-06-12 4 views
0

Fondamentalement, je ne peux pas obtenir une redirection de travailler pour un certain nombre de raisons comme je voudrais, donc je veux ajouter une fonction qui va fonctionner sur le/mon-compte/page pour voir si l'utilisateur actuel a commandé le produit A ou B dans les 10 dernières secondes (aurait terminé le statut, en utilisant le plugin autocomplete order) et si c'est le cas, les rediriger vers une page de remerciement personnalisée spécifiée dans la fonction.Voir si l'utilisateur a effectué une commande dans les 10 dernières secondes (woocommerce)?

Je trouve beaucoup de fonctions pour tirer des commandes récentes, mais je ne suis pas sûr si je vais dans la bonne direction. Comment puis-je obtenir l'horodatage et l'ID du produit de la commande la plus récente dans la version 3.0? Y a-t-il un crochet pour attacher ceci au/my-account/page ou est-ce que je devrai pirater un javascript/php?

Répondre

0

Comment exécuter le code directement après l'achat? Vous vérifiez quel produit il était (et plus de contrôles si vous avez besoin), puis rediriger vers la page de remerciements personnalisés.

add_action('woocommerce_thankyou', 'my_custom_code'); 
function my_custom_code($order_id) { 

    // Lets grab the order 
    $order = wc_get_order($order_id); 

    // do stuff 

} 
0

Voici ce que je fini par faire:

  • ajouté une colonne personnalisée à la table « commandes » de la «page Mon compte comprenant numéro de commande (filtre utilisé pour ajouter la colonne - SKU - et alors mis à jour la logique dans la page orders.php pour ajouter l'ID de produit à la colonne SKU

    function new_orders_columns($columns = array()) { $columns['product-name'] = __('SKU', 'Text Domain'); return $columns; } add_filter('woocommerce_account_orders_columns', 'new_orders_columns');

  • .
  • ajouté un script jQuery (repris avec php via shortcode ajouté au «Mon compte page) qui rassemblerait la date actuelle, l'attribut datetime de la colonne date et le texte d'identification de produit de la SKU colonne de la première ligne - à savoir les plus récents ordre

  • utilisé Javascript pour trouver la différence entre l'heure actuelle et le temps de l'ordre et de convertir ce nombre en secondes

  • ajouté une redirection conditionnelle basée sur la valeur de ce temps différence étant inférieure à 10 (secondes) et cet identifiant de produit était un identifiant spécifique

    function mycustomorder_redirect() { if (is_user_logged_in()) { date_default_timezone_set('America/New_York'); $time_now = date('c'); echo '<script>jQuery("document").ready(function() { // //Get most recent order datetime var lastorder_td = jQuery("td.woocommerce-orders-table__cell-order-date:eq(0) time").attr("datetime"); // //Get most recent order product id var product_check = jQuery("td.woocommerce-orders-table__cell-product-name:eq(0)").text(); // //Remove whitespace product_check = product_check.replace(/(^\s+|\s+$)/g,""); // //Get current datetime var current_wrap = "' . $time_now . '"; // //Remove +00:00 or -00:00 lastorder_td = lastorder_td.substring(0, lastorder_td.length - 6); current_wrap = current_wrap.substring(0, current_wrap.length - 6); // //Convert to javascript date var column_a = new Date(current_wrap); var column_b = new Date(lastorder_td); // //Find time difference var dif = column_a - column_b; // //Convert to seconds var seconds_toredirect = dif/1000; // //Add redirect if (seconds_toredirect < 10 && (product_check == 1 || product_check == 2)) { window.location.replace("https://exampleurl.com/page/"); } }); </script>'; } } add_shortcode('order-custom', 'mycustomorder_redirect');