我希望在新标签中打开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函数时,无法进行链接定位。
答案 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;
}
}