Woocommerce открыть ссылку на продукт в новой вкладке после "бесконечной прокрутки" с помощью AJAX - PullRequest
0 голосов
/ 14 сентября 2018

Мне удалось открыть все вкладки продуктов на моем сайте Woocommerce в новой вкладке, однако я использую бесконечную прокрутку с помощью ajax для загрузки большего количества продуктов, и продукты, загружаемые с помощью бесконечной прокрутки, не открываются в новой вкладка при нажатии на них.

Вот мой текущий код для открытия товаров в новой вкладке;

remove_action( 'woocommerce_before_shop_loop_item','woocommerce_template_loop_product_link_open', 10 );
add_action ( 'woocommerce_before_shop_loop_item', 'chr_function_open_new_tab', 10 );
function chr_function_open_new_tab() {
echo '<a target="_blank" href="' . get_the_permalink() . '" class="woocommerce-LoopProduct-link">';
}

Любая помощь с этим высоко ценится. Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Вместо этого попробуйте использовать этот специальный фильтр для кнопки добавления в корзину:

// Change loop add to cart ajax button to a linked button to single product pages
add_filter( 'woocommerce_loop_add_to_cart_link', 'replace_loop_add_to_cart', 20, 2 );
function replace_loop_add_to_cart( $html, $product ) {
    $link = $product->get_permalink();
    $text = __("Read More", "woocommerce");
    return '<a href="' . $link . '" target="_blank" class="button alt add_to_cart_button">' . $text . '</a>';
}

А здесь для ссылки на продукт:

add_filter( 'woocommerce_before_shop_loop_item', 'replace_template_loop_product_link_open', 1 );
function replace_loop_product_link() {
    remove_action( 'woocommerce_before_shop_loop_item','woocommerce_template_loop_product_link_open', 10 );
    add_action ( 'woocommerce_before_shop_loop_item', 'new_loop_product_link_open', 10 );
}

function new_loop_product_link_open() {
    global $product;

    echo '<a href="' . esc_url( $product->get_permalink() ) . '" target="_blank" class="woocommerce-LoopProduct-link woocommerce-loop-product__link">';
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.

Но в вашем случае он может работать не так, как ожидалось, в зависимости от того, как реализована ваша пользовательская функциональность ajax. Поскольку проблема остается для продуктов, загружаемых через ajax, target="_blank" необходимо также реализовать в соответствующем скрипте.

На данный момент никто не может помочь вам больше, поскольку мы не можем догадаться, как эта функциональность построена.

0 голосов
/ 14 сентября 2018

Я думаю, что ваша remove_action не может предпринять действия. Вот почему это доставляет неприятности. Попробуйте этот код:

add_action('init',function(){ remove_action( 'woocommerce_before_shop_loop_item', 'woocommerce_template_loop_product_link_open', 10 ); } ,0);
function chr_function_open_new_tab() {
    echo '<a target="_blank" href="' . get_the_permalink() . '" class="woocommerce-LoopProduct-link">';
}

Второе другое решение, вы можете сделать это с помощью простого jQuery

add_action('wp_footer',function(){
if ( has_term( 'stone', 'product_cat' ) ) {
echo '<script>

//for existing content
jQuery(".woocommerce-LoopProduct-link").attr("target","_blank");

//for content part which comes from AJAX
jQuery( document ).ajaxComplete(function() {
jQuery(".woocommerce-LoopProduct-link").attr("target","_blank");
});
</script>';
}
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...