Задать вопрос
@trenton

Как правильно реализовать, чтобы через самописную модалку товар добавлялся в корзину, а не редиректил на карточку товара?

Давно юзаю самописную модалку, но не свою, я ее только усовершенствую. Она лучше подобных плагинов подходит мне под нужды, но есть нюанс - при выборе нужной вариации и при нажатии после этого "добавить в корзину" оно редиректит на страницу товара, а не добавляет в корзину. В чем ошибка и как пофиксить?
Я думаю, что скорее всего как-то связано с фильтром woocommerce_add_to_cart_redirect(), но как правильно его использовать?
Хочу именно свою довести до идеала, а не "просто поставить плагин и не париться", не писал бы эту строчку. если бы как только я ее не напишу, не сыпались сразу же эти "советы", проверено много раз.
Сам ее вывод.
add_action( 'wp_ajax_ajax_quick_view', 'themename_quick_view_product_callback' );
add_action( 'wp_ajax_nopriv_ajax_quick_view', 'themename_quick_view_product_callback' );
function themename_quick_view_product_callback(){
	if ( ! wp_verify_nonce( $_POST['nonce'], 'quick-nonce' ) ) {
		wp_die( 'Данные отправлены с левого адреса' );
	}
	global $post, $woocommerce, $product;
	$product = wc_get_product(esc_attr($_POST['id']));
	ob_start();	
	?>
	<div class="modal-body row">
		<div class="modal-body-left col-md-5">
			<?php 
			$attachment_id = get_post_thumbnail_id( $product->get_id() );
			$product_thub = wp_get_attachment_image_url($attachment_id, 'shop_single'); ?>
			<img src="<?php echo $product_thub;?>" >

			<div class="modal-gal d-flex">
				<?php 
				$attachment_ids = $product->get_gallery_attachment_ids();
				  
				foreach( $attachment_ids as $attachment_id ) {
				  echo wp_get_attachment_image( $attachment_id, 'woocommerce_gallery_thumbnail' );
				}
 				?>
			</div>

		</div>
		<div class="modal-body-right col-md-7">
			<h2><?php echo $product->get_name();?></h2>			
			<p><?php $rating  = $product->get_average_rating();
					$count   = $product->get_rating_count();
					echo wc_get_rating_html( $rating, $count ); ?></p>	
			<div class="modal-price mb-20">
				<?php echo $product->get_price_html();?></div>
			<p class="mb-20"><?php echo $product->get_short_description(); ?></p>	
			<p class="mb-20 cat-popup"><?php echo $product->get_categories($separator = ' '); ?></p>
			<div class="modal-buttons">
				<?php
				if ( $product->is_type( 'variation' ) ) {
				?>
              <form class="cart" action="<?php echo esc_url( apply_filters( 'woocommerce_add_to_cart_form_action', $product->get_permalink() ) ); ?>" method="post" enctype='multipart/form-data'>
                <?php woocommerce_single_variation_add_to_cart_button(); ?>
             </form>
              <?php
            } else {
              woocommerce_template_single_add_to_cart();
            }?>				
			</div>			
		</div>
	</div>
	<?php  
	$data['product'] = ob_get_clean();
	wp_send_json( $data);
	wp_die();
}

JS-часть
jQuery(document).ready(function ($) {
    $(document).on('click', 'a.modal-product-link', function () {
        var productId = $(this).attr('data-product-id');
        console.log(productId);
        var data = {
            id:productId,
            action:'ajax_quick_view',
            nonce: ajax_quick.nonce
        };
        $.ajax({
            url:ajax_quick.url,
            data:data,
            type: 'POST',
            dataType: 'json',
            beforeSend:function(xhr){
               $('#modal-product .modal-body').text('Загрузка');
            },
            success:function(data){
                console.log(data);
                $('#modal-product .modal-content section').html(data.product);
            }
        });
    })
});


Вывод модалки в теме, если важно
add_action( 'woocommerce_before_shop_loop_item_title', 'themename_loop_product_div_image_close', 30);
function themename_loop_product_div_image_close(){  
  global $product;
  ?>
  <div class="loop-product_bottom">
        <a href="#" data-toggle="modal" data-target="#modal-product" data-product-id="<?php echo $product->get_id();?>" class="modal-product-link">
         <span class="fa-eye"></span>          
        </a>
 </div>

<?php }


/*MODAL*/
 add_action( 'wp_footer', 'themename_modal_window');
 function themename_modal_window(){
  ?>
    <div class="modal video-modal fade" id="modal-product" tabindex="-1" role="dialog" aria-labelledby="modal-product">
        <div class="modal-dialog modal-dialog-product-review" role="document">
          <div class="modal-content">
            <div class="modal-header">
              <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
            </div>
            <section class="modal-section mb-20">
            <div class="modal-body">              
            </div>
            </section>
          </div>
        </div>
      </div>
 <?php 
 }

Я уже ее много раз постил, надеюсь и в этой последней детали, что еще отделяет ее от идеала, мне помогут.
  • Вопрос задан
  • 60 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы