WooCommerce外部产品到新选项卡

时间:2019-05-26 12:28:36

标签: javascript php wordpress woocommerce

我希望在新标签中打开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 :(得分:0)

删除先前的代码,然后将其添加到主题的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;
}
}