当前位置: 首页 > 知识库问答 >
问题:

用Ajax更新Woocommerce产品库

樊熠彤
2023-03-14

我正在尝试做一个动态的产品画廊基于颜色在woocommerce产品页面。当我点击一种颜色,例如红色,我应该看到红色画廊的照片。为此,我用ajax创建的一个新的库块替换了所有的woocommerce库块(它们具有与旧库块相同的类)。

新照片的加载工作很好,我得到基于颜色的画廊照片。但是当ajax加载新的gallery时,滑块不起作用,我想因为创建滑块的woocommere js在页面加载时是只读的。

我想我应该重新加载一些Woocommerce JS函数来用他的功能重新创建slider,但我不知道怎么做。

这是php文件,我创建了一个新的图库,从Ajax调用:

global $product;

$current_id = "";
if(isset($_POST['prodid']) && $_POST['prodid'] != "" ) {
    $current_id = $_POST['prodid'];
    $product = new WC_Product($current_id);
}


$columns           = apply_filters( 'woocommerce_product_thumbnails_columns', 4 );
$post_thumbnail_id = $product->get_image_id();
$wrapper_classes   = apply_filters( 'woocommerce_single_product_image_gallery_classes', array(
    'woocommerce-product-gallery',
    'woocommerce-product-gallery--' . ( $product->get_image_id() ? 'with-images' : 'without-images' ),
    'woocommerce-product-gallery--columns-' . absint( $columns ),
    'images',
) );
?>

    <figure class="woocommerce-product-gallery__wrapper">
        <?php
        if ( $product->get_image_id() ) {
            $html = wc_get_gallery_image_html( $post_thumbnail_id, true );
        } else {
            $html  = '<div class="woocommerce-product-gallery__image--placeholder">';
            $html .= sprintf( '<img src="%s" alt="%s" class="wp-post-image" />', esc_url( wc_placeholder_img_src( 'woocommerce_single' ) ), esc_html__( 'Awaiting product image', 'woocommerce' ) );
            $html .= '</div>';
        }

        echo apply_filters( 'woocommerce_single_product_image_thumbnail_html', $html, $post_thumbnail_id ); // phpcs:disable WordPress.XSS.EscapeOutput.OutputNotEscaped

        do_action( 'woocommerce_product_thumbnails' );
        ?>
    </figure>

这是在框颜色单击时调用的ajax函数

    function changeGallery(selected_gallery, productID) {
        jQuery(function($) {
            var select_color = selected_gallery;

            var xhttp;
            $.ajax({
                url : 'https://mysite.it/wp-admin/admin-ajax.php', // AJAX handler
                data : { action : 'load_gallery', gallery : select_color, prodid : productID },
                type : 'POST',
                beforeSend: function() {
                },
                success : function( result ){
                    if( result ) {
                        $('.woocommerce-product-gallery').html(result);
                        //Reload here some woocommerce JS funcions?
                    }
                }
            });
        });
    }

共有1个答案

索曾琪
2023-03-14

解决这类问题的方法是看看WooCommerce源代码,看看插件是如何初始化图库的。基于此,我认为你需要做一些类似的事情:

jQuery( '.woocommerce-product-gallery' ).each( function() {
    jQuery( this ).wc_product_gallery();
} );

请参阅github:single-product.js。

 类似资料:
  • 我正在重写AJAX函数,以便使用WooCommerce添加产品,这样我也可以将属性发送到购物车(这不是开箱即用的)。 在通过AJAX添加变量产品后,我按照更新WooCommerce购物车的说明进行了操作——这正是我想要的——但它并不完全有效。 当我注销时,一切都很好。但是,当我登录Wordpress时,PHP覆盖不起作用/被忽略。我没有收到任何错误,也没有向购物车添加任何产品。我尝试了许多不同的方

  • 我正在使用一个自定义产品,客户可以在其中键入他们的自定义文本,这些文本将添加到购物车中。根据文本的大小,将设置一个不同的价格,逻辑完成了,我可以在product对象中看到新的价格。 看起来我可以用新的价格更改product对象,但是当我执行$Woocommerce->setup_product_data($PRODUCT_ID)时,我从admin-ajax.php返回状态500。 我已经找到了几个

  • 问题内容: 我已经组装好了将链接添加到购物车中的可变产品的链接,就像这样,但是我对如何“刷新”购物车而不重新加载页面感到困惑。我的猜测是,我没有正确地向购物车请求中添加此AJAX,因此未调用woocommerce_add_to_cart_fragments(我相信我的购物车HTML会在此处放置刷新)。 如果有人能指出我正确的方向,我将不胜感激。Variable / AJAX / WooCommer

  • 我已经组装了一个链接,像这样将一个可变产品添加到我的购物车,但是我不知道如何在不重新加载页面的情况下“刷新”购物车。我的猜测是,我没有正确地将此AJAX添加到购物车请求,因此,woocommerce_add_to_cart_fragments(我相信我的购物车超文本标记语言将被放置以供刷新)没有被调用。 如果有人能给我指出正确的方向,我将不胜感激。Variable/AJAX/WooCommerce

  • 我试图通过WooCommerce REST API更新产品变化。我可以用这种结构创建更新endpoint: /products//变化/我不想使用parent_id。有什么方法可以更新产品只有variation_id?Variation_id和其他product_ids一样重要

  • 我有大约10个产品和接近200个变体每一个。我需要更新特定产品的销售价格,包括它的所有变化。 问题是: 所有的变种都有不同的价格。未输入销售价格-所有销售价格输入框均为空。 我需要一个SQL解决方案运行和更新所有特定产品的销售价格,采取常规价格并从中扣除350,或 任何其他方式,我不知道在这个阶段,因为我已经尝试了许多解决方案,包括Woocommerce内置的解决方案“设置销售价格”,再次不工作,