Ich arbeite an einer Website, die es Benutzern ermöglicht, Produkte von der Startseite aus in den Einkaufswagen zu legen. Ich habe einige Ressourcen online von ihrer Website und anderen SO-Fragen verfolgt, die es mir ermöglichen, Produkte über Ajax in den Warenkorb zu legen, aber die Gesamtsumme des Warenkorbs wird nicht aktualisiert, ohne dass die Seite neu geladen wird.
WooCommerce-Dokumentation ist wo die cpp_header_add_to_cart_fragment
Funktion kam und es scheint überhaupt nicht zu funktionieren. Ursprünglich benutzte ich add_to_cart_fragments
aber ich fand heraus, dass das veraltet war und ich verwenden sollte woocommerce_add_to_cart_fragments
aber diese Änderung hilft auch nicht.
Je mehr ich den Code lese … Ich bemerke, dass die Fragmente vom Ajax-Aufruf zurückgegeben werden, also fange ich an zu denken, dass ich den HTML-Code, der die Gesamtsumme des Einkaufswagens anzeigt, durch das ersetzen muss, was vom Javascript zurückgegeben wird?
page_home.php
<!-- Cart link to be updated when products are added -->
<a class="cart-contents" href="<?php echo WC()->cart->get_cart_url(); ?>" title="<?php _e( 'View your shopping cart' ); ?>">
<?php echo WC()->cart->get_cart_total(); ?>
</a>
Funktionen.php
add_action('wp_enqueue_scripts', 'cpp_enqueue_scripts');
function cpp_enqueue_scripts() {
/* Other enqueue/registers */
wp_register_script('diy_kits', get_template_directory_uri().'/js/diy_kit.js');
wp_enqueue_script('diy_kits');
wp_localize_script(
'diy_kits',
'cpp_ajax',
array(
'ajaxurl' => admin_url('admin-ajax.php'),
'diy_product_nonce' => wp_create_nonce('diy_product_nonce')
)
);
}
add_action('wp_ajax_nopriv_cpp_ajax-submit', 'cpp_ajax_submit');
add_action('wp_ajax_cpp_ajax-submit', 'cpp_ajax_submit');
function cpp_ajax_submit() {
global $woocommerce;
$nonce = $_POST['nonce'];
if(!wp_verify_nonce($nonce, 'diy_product_nonce')) {
wp_die('Busted!');
}
// Add product to cart... this works
$product_id = $_POST['product_id'];
if( $woocommerce->cart->add_to_cart( $product_id ) ) {
$data = apply_filters('woocommerce_add_to_cart_fragments', array());
do_action('woocommerce_ajax_added_to_cart', $product_id);
} else {
$data = array( 'success' => false, 'product_id' => $product_id );
}
$response = json_encode($data);
header("Content-Type: application/json");
echo $response;
exit;
}
cpp_header_add_to_cart_fragment
// CART UPDATE AJAX this doesn't work
add_filter('woocommerce_add_to_cart_fragments', 'cpp_header_add_to_cart_fragment');
function cpp_header_add_to_cart_fragment( $fragments ) {
global $woocommerce;
ob_start(); ?>
<a class="cart-contents" href="<?php echo WC()->cart->get_cart_url(); ?>" title="<?php _e( 'View your shopping cart' ); ?>">
<?php echo WC()->cart->get_cart_total(); ?>
</a>
<?php
$fragments['a.cart-contents'] = ob_get_clean();
return $fragments;
}
diy_kits.js
// setup and other stuff...
links.click(function(e) {
/* unrelated stuff */
jQuery.post(
cpp_ajax.ajaxurl,
{
action : 'cpp_ajax-submit',
nonce : cpp_ajax.diy_product_nonce,
product_id : jQuery(this).attr('data-product-id')
},
function(response) {
console.log(response);
}
);
});
Könnte ich einen Kommentar bekommen, der die Ablehnung erklärt? Das war fast augenblicklich…
– CaldwellYSR
16. Juni 2015 um 16:28 Uhr
Ich habe der Ablehnung widersprochen, obwohl ich denke, dass Ihre Frage von einer zusätzlichen Beschreibung des auftretenden Problems und der tatsächlichen im Vergleich zu den erwarteten Ergebnissen profitieren würde. Ich kämpfe mit […] und das geht nicht kann als “debug this for me” ausgelegt werden.
– OhBeWise
16. Juni 2015 um 16:54 Uhr
@OhBeWise Danke. Ich werde die Frage bearbeiten, um ein wenig mehr zu erklären. Ich habe das Gefühl, dass dies so ausgelegt werden könnte
debug this for me
aber der einzige Grund ist, dass ich mein Wissen über das Thema erschöpft habe und keinen Grund sehe, warum dies nicht funktioniert.– CaldwellYSR
16. Juni 2015 um 16:58 Uhr
@OhBeWise Nun, neu, ich fühle mich dumm … beim Bearbeiten der Antwort auf Ihre Anfrage gelang es mir, die (ziemlich offensichtliche) Antwort zu finden. Danke fürs Helfen.
– CaldwellYSR
16. Juni 2015 um 17:23 Uhr
Ha, das ist mir schon passiert – ich habe sogar stundenlang über Probleme nachgedacht, nur um festzustellen, dass ich etwas unbeabsichtigt geändert habe. Schön, dass du es gefunden hast!
– OhBeWise
16. Juni 2015 um 17:25 Uhr