Wie bekomme ich_template_part mit AJAX?

Ich bin derzeit auf der Woocommerce archive-product.php Vorlagendatei (sagen Shop-Seite oder Produktkategorie Seite). Beim Klicken auf den Post (oder das Produkt) wird eine GET-Abfrage zum Titel derselben Seite hinzugefügt, wobei die Seite in einen Schieberegler anstelle einer Postliste geändert wird. Ich muss den Inhalt der Seite mit AJAX ändern, anstatt eine GET-Abfrage zu aktualisieren und hinzuzufügen. Ich habe versucht, den Template-Teil einzubinden, aber es sagt immer wieder, dass keine Posts gefunden wurden.

Ich lese weiter, dass ich wp-load.php oder eine andere Methode laden muss. Was ist die effizienteste Methode, dies zu tun? Ich möchte lernen, wie get_template_part () zu mir zurückkehrt, was es bei einer bestimmten URL zurückgeben würde. (Ich muss später die single-product.php mit einer ähnlichen Methode abrufen).

Hier ist mein serverseitiges Skript für den AJAX:

// AJAX function to show slider on product archive function cienna_show_slider_callback() { define('WP_USE_THEMES', false); require_once($_SERVER['DOCUMENT_ROOT'].'/wp/wp-load.php'); get_template_part( 'woocommerce/archive', 'product' ); wp_die(); } add_action( 'wp_ajax_cienna_show_slider', 'cienna_show_slider_callback' ); add_action( 'wp_ajax_nopriv_cienna_show_slider', 'cienna_show_slider_callback' ); 

Hier ist mein clientseitiges Skript für den AJAX (ich nehme die zusätzliche GET-Variable nicht auf, um niemanden zu verwirren; ich möchte nur, dass die Vorlagenseite so natürlich funktioniert, als wenn ihre Seite besucht würde):

 // JavaScript to be fired on the product archive page $('ul.products li.product a').on('click', function(event) { // AJAX get content of page event.preventDefault(); $.get( ajax_object.ajax_url, { action: "cienna_show_slider" }, function( data ) { console.log(data); }) }); 

Falls jemand fragt, hier ist die Archiv-Produkt Vorlage:

  woocommerce_product_loop_start( false ), 'after' => woocommerce_product_loop_end( false ) ) ) ) { wc_get_template( 'loop/no-products-found.php' ); } /** * woocommerce_after_main_content hook * * @hooked woocommerce_output_content_wrapper_end - 10 (outputs closing divs for the content) */ do_action('woocommerce_after_main_content'); ?> 

UPDATE: Also, da ich den AJAX-Aufruf von $ .ajax zu $ ​​.get aktualisiert habe und wp-load eingeschlossen habe, läuft es gut, außer dass es weiterhin sagt, dass keine Posts gefunden werden.

Solutions Collecting From Web of "Wie bekomme ich_template_part mit AJAX?"

Ihre Callback-function muss so aussehen:

 function cienna_show_slider_callback() { global $post, $product, $woocommerce; // just in case if your template file need this ob_start(); ?> < ?php woocommerce_get_template( 'archive-product.php'); ?> < ?php $output = ob_get_contents(); ob_end_clean(); echo $output; die(); }