WooCommerce внешний продукт на новую вкладку - PullRequest
0 голосов
/ 26 мая 2019

Я бы хотел, чтобы внешние / аффилированные продукты WooCommerce открывались в новой вкладке. Это будет касаться всех аспектов продукта: изображения, заголовка, кнопки «Купить сейчас» и страниц архива (категория продукта / теги). Все, что мне удалось найти, - это способ изменить кнопку «Купить сейчас», но никаких других решений для других областей, упомянутых ранее, нет. Другие решения предлагают внешнюю ссылку во всех нужных местах (изображение товара, название, кнопка «Купить сейчас», страницы архива), но ее нельзя открыть в новой вкладке.

Я пробовал кучу разных кодов, как уже упоминалось выше, все приводят к частичным решениям. Я верю, что если они могут быть объединены, это может работать. Но я не добился успеха.

add_action( 'template_redirect', 'redirect_external_products' );
function redirect_external_products() {
    global $post;
    if ( is_singular( 'product' ) && ! empty( $post ) && ( $product = wc_get_product( $post ) ) && $product->is_type( 'external' ) ) {
        wp_redirect( $product->get_product_url() );
        exit;
    }
}
function custom_redirect() {
  global $post;
   if( is_single() ){
      $external_link =  get_post_meta( $post->ID, 'external_link', true );
      if($external_link) {  
         echo "<script> window.open(".$external_link.", '_blank') </script>";
         exit;
      }
   }
}

Я бы хотел, чтобы все партнерские / внешние ссылки открывались в новой вкладке. Это будет включать: изображение товара, название товара, кнопку «Купить сейчас», архив списка страниц (категория товара / теги).

Все предыдущие попытки будут открывать ссылки «Купить сейчас» только на новой вкладке, но изображение и заголовок по-прежнему будут перенаправлены на страницу отдельного продукта. Первый приведенный выше код делает свое дело, но не открывается в новой вкладке. Мои исследования показывают, что при использовании функции template_redirect таргетинг на ссылки невозможен.

1 Ответ

0 голосов
/ 26 мая 2019

удалите предыдущий код и давайте добавим этот код в файл functions.php темы.

add_filter( 'woocommerce_loop_product_link', 'filter_external_product_permalink', 10, 2 );

if ( ! function_exists( 'filter_external_product_permalink' ) ) {
/**
 * Insert the external url for products in the loop.
 */
function filter_external_product_permalink( $the_permalink, $product ){
    global $product;

    if( $product->is_type( 'external' ) ) {
        $external_link =  $product->get_product_url();
        return $external_link;
    }

    return $the_permalink;
}
}


if ( ! function_exists( 'woocommerce_template_loop_product_link_open' ) ) {
/**
 * Insert the opening anchor tag for products in the loop.
 */
function woocommerce_template_loop_product_link_open() {
    global $product;

    $link = apply_filters( 'woocommerce_loop_product_link', get_the_permalink(), $product );

    $link_target = $product->is_type( 'external' ) ? '_blank' : '_self';

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

add_filter( 'woocommerce_loop_add_to_cart_link', 'custom_external_add_product_link' , 10, 2 );

if ( ! function_exists( 'custom_external_add_product_link' ) ) {

function custom_external_add_product_link( $permalink ) {
    global $product;

    if ( $product->is_type( 'external' ) ) {

        $permalink = sprintf( '<a rel="nofollow" href="%s" data-quantity="%s" data-product_id="%s" data-product_sku="%s" class="%s" target="_blank">%s</a>',
            esc_url( $product->add_to_cart_url() ),
            esc_attr( isset( $quantity ) ? $quantity : 1 ),
            esc_attr( $product->id ),
            esc_attr( $product->get_sku() ),
            esc_attr( isset( $class ) ? $class : 'button product_type_external add_to_cart_button' ),
            esc_html( $product->add_to_cart_text() )
        );
    }

    return $permalink;
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...