2017-08-07 1 views
1

Ich verwende Lirox One Thema auf Wordpress mit WooCommerce. Ich möchte benutzerdefinierte Umleitungen nach der Zahlung vornehmen:
Wenn ein Kunde die Produkt-ID 333 kauft, wird er zum Produkt 444 umgeleitet (zum Beispiel).Benutzerdefinierte bedingte Weiterleitungen nach WooCommerce Kasse Zahlung

Ich habe einige benutzerdefinierte Code, aber es funktioniert nicht, bekomme ich einen Fehler 500 (und Debug ist leer).

Was mache ich falsch und wie kann ich es funktionieren lassen?

Dies ist mein Code:

add_action('woocommerce_thankyou', 'check_order_product_id', 1); 
function check_order_product_id($order_id){ 
$order = new WC_Order($order_id); 
    $items = $order->get_items(); 
    foreach ($items as $item) { 
     $product_id = $item['product_id']; 

      //* single product id 
      if ($product_id == 399) { 
      // Content Title line 
      $url = 'http://yoursite.com/custom-url1'; 
      } 
      if ($product_id == 358) { 
      $url = 'http://yoursite.com/custom-url2'; 
      } 
      if ($product_id == 398) { 
      $url = 'http://yoursite.com/custom-url3'; 
      } 

      if ($product_id == 357) { 
      $url = 'http://yoursite.com/custom-url5'; 
      } 

      if ($product_id == 356) { 
      $url = 'http://yoursite.com/custom-url6'; 
      } 

      if ($product_id == 335) { 
      $url = 'http://yoursite.com/custom-url'; 
      } 
      if ($order->status != 'failed') { 
    wp_redirect($url); 
    exit; 
} 
+0

Sie den Grund des 'foreach'loop nicht bekommen ... nach dem ersten Lauf der Schleife Sie trotzdem umleiten werden, so dass die Schleife‚gewonnen Ich werde immer ein zweites Mal ausgeführt ... – Twinfriends

Antwort

0

Für Umleitungen, eine benutzerdefinierte Funktion in Wordpress verhakt verwenden template_redirect Aktion Haken,
Fehler zu vermeiden 500 ...

Ich habe Ihren Code geändert, wie Sie sehen werden, um Ihren Anforderungen zu entsprechen. Dieser Code ist Zofe für WooCommerce Version 3+:

add_action('template_redirect', 'conditional_redirection_after_payment'); 
function conditional_redirection_after_payment(){ 
    // When "thankyou" order-received page is reached … 
    if (is_wc_endpoint_url('order-received')) { 
     global $wp; 

     // Get the order ID from the browser url 
     $order_id = intval(str_replace('checkout/order-received/', '', $wp->request)); 

     // Get an instance of the WC_Order object 
     $order = wc_get_order($order_id); 

     // If the order status is 'failed' we stop the function 
     if($order->has_status('failed')) return; 

     // HERE set in the array for each product ID the coresponding url final path 
     $product_id_url_paths = array(
      '399' => '/custom-url1', 
      '358' => '/custom-url2', 
      '398' => '/custom-url3', 
      '357' => '/custom-url4', 
      '356' => '/custom-url5', 
      '335' => '/custom-url6', 
     ); 

     // Iterating through each order items 
     foreach($order->get_items() as $item_id => $item_values){ 
      // The Product ID 
      $product_id = $item_values->get_product_id(); 

      foreach($product_id_url_paths as $key_id => $url_path){ 
       if($key_id == $product_id){ 
        // Product is found and ID match: we got our path url. We redirect 
        wp_redirect(home_url($url_path)); 
        exit(); // always exit 
       } 
      } 
     } 
    } 
} 

-Code geht in function.php Datei Ihres aktiven Kind Thema (oder Thema) oder auch in jeder Plugin-Datei.

-Code wird getestet und funktioniert auf WC 3+

0

Hinweis: in Ihrem Code Sie die exit entfernen, die Sie nach dem wp_redirect verwendet haben. Andere werden alle gut funktionieren. Einige weitere Referenzen sind unten aufgeführt, um das Konzept besser zu verstehen.

Erklärung: Dann Geben Sie Redirect nur für das jeweilige Produkt ID allein nicht für alle Produkt IDS, da es Ihnen auf den Fehler Internal Server führen kann, wie es in der foreach-Schleife ist.

Es ist fein mit wp_redirect() für die Umleitung Zweck.

Es ist richtig, was haben Sie für die Produkt-ID überprüft. Die Sache ist, dass Sie eine andere Methode folgen müssen, wenn die URL explizit übergeben werden soll.

// We don't know for sure whether this is a URL for this site, 
// so we use wp_safe_redirect() to avoid an open redirect. 
wp_safe_redirect($url); 

// We are trying to redirect to another site, using a hard-coded URL. 
wp_redirect('https://example.com/some/page'); 

Einige Mehr Referenz:

<?php wp_redirect(home_url()); exit; ?> 

Redirects can also be external, and/or use a “Moved Permanently” code : 

<?php wp_redirect('http://www.example-one.com', 301); exit; ?> 

The code below redirects to the parent post URL which can be used to redirect attachment pages back to the parent. 

<?php wp_redirect(get_permalink($post->post_parent)); exit; ?> 

Referenz:https://developer.wordpress.org/reference/functions/wp_redirect/

+0

Ich lösche exit aber 500 ist noch vorhanden – Polo195pl

+0

Das bedeutet, dass Ihr Bestellstatus möglicherweise nicht dort empfangen wird.Bitte haben Sie eine Bestätigung über diese –

+0

ich habe 500 auf der gesamten Website: D – Polo195pl

Verwandte Themen