我已设法将属性target="_blank"
添加到外部产品页面,但似乎无法更改父(分组产品)页面上的链接。
我可以通过修改external.php并将标记添加到实际链接本身来实现这一点。
<p class="cart">
<?php sdnetwork(); sdcondition(); parent_permalink_button(); ?><a href="<?php echo esc_url( $product_url ); ?>" target="_blank" rel="nofollow" class="single_add_to_cart_button button alt"><img src="/wp-content/themes/wootique-child/images/icons/new_tab_icon.gif" alt="Opens in New Tab"> <?php echo esc_html( $button_text ); ?></a>
</p>
如何更改分组产品的父页面上的链接以添加此属性,我的第一个想法是修改grouped.php,但链接的生成方式不同。
<?php woocommerce_template_loop_add_to_cart(); ?>
我怎样才能将我的标签添加到上面生成的链接中?我曾想过用钩子,但我需要一些帮助。
编辑:
只是想知道我是否可以这样使用jQuery…
jQuery(document).ready(function($) {
$(".button.product_type_external").each(function() {
$(this).find("a").attr("target", "_blank");
});
});
问题是大多数链接在加载页面时都是隐藏的,我担心这可能会占用大量资源,还是会?对于jQuery来说,这是一个全新的概念。
http://mobilereactor.co.uk/shop/mobile-phones/sony-xperia-z5-compact-coral-deals/
编辑由于cale_b:而得以解决
add_filter( 'woocommerce_loop_add_to_cart_link', 'add_target_blank', 10, 2 );
function add_target_blank( $link, $product ){
global $post;
$product = get_product( $post->ID );
if( $product->is_type( 'external' ) ){
// I simply added target="_blank" in the line below
$link = sprintf( '<a rel="nofollow" href="%s" target="_blank" data-quantity="%s" data-product_id="%s" data-product_sku="%s" class="%s">%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' ),
esc_html( $product->add_to_cart_text() )
);
return $link;
} else {
// I simply remove target="_blank" in the line below
$link = sprintf( '<a rel="nofollow" href="%s" data-quantity="%s" data-product_id="%s" data-product_sku="%s" class="%s">%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' ),
esc_html( $product->add_to_cart_text() )
);
return $link;
}
}
以下是将target="_blank"
添加到add_to_art链接以在新选项卡中打开它们的更干净的方法:
function ns_open_in_new_tab($args, $product)
{
if( $product->is_type('external') ) {
// Inject target="_blank" into the attributes array
$args['attributes']['target'] = '_blank';
}
return $args;
}
add_filter( 'woocommerce_loop_add_to_cart_args', 'ns_open_in_new_tab', 10, 2 );
将ns_
部分替换为您自己的命名空间缩写。
如果跟踪代码,该函数会执行一些操作,然后加载模板loop/add-to-cart.php
。
如果你打开loop/add-to-cart.php
,你会发现代码应该是这样的:
echo apply_filters( 'woocommerce_loop_add_to_cart_link',
sprintf( '<a rel="nofollow" href="%s" data-quantity="%s" data-product_id="%s" data-product_sku="%s" class="%s">%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' ),
esc_html( $product->add_to_cart_text() )
),
$product );
要修改链接,请使用筛选器(woocommerce_loop_add_to_cart_link
)。
注意:永远不要直接在插件文件夹中修改WooCommerce模板。使用他们出色的模板结构将模板复制到您的主题并在那里进行修改,否则您的更改将在下次更新WooCommerce时丢失。
最后一点:跟踪代码是简单,当你使用一个好的IDE时,做起来很有趣。我是PHPStorm的超级粉丝(https://www.jetbrains.com/phpstorm/)。
编辑
若要仅为外部产品添加它,则您将采取不同的方法。
你可以利用过滤器,正如你在评论中提到的,在functions.php中写一个函数,它可以做这样的事情:
add_filter('woocommerce_loop_add_to_cart_link', 'my_external_product_links', 10, 2);
function my_external_product_links( $link, $product ) {
// Set up the $target variable to contain the correct text depending on the product
$target = ( 'external' == $product->product_type ) ? 'target="_blank"' : '';
// Use the code from the core function here, but with our modification to include target
echo sprintf( '<a rel="nofollow" href="%s" data-quantity="%s" data-product_id="%s" data-product_sku="%s" class="%s" %s>%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' ),
esc_html( $product->add_to_cart_text() ),
$target
);
}
在上面的代码中,请密切注意sprintf
语句中的新%s
:
// Watch for this --->--->--->--->--->--->--->--->--->--->--->--->--->--->--->--->--->--->-->--->--->-vv
'<a rel="nofollow" href="%s" data-quantity="%s" data-product_id="%s" data-product_sku="%s" class="%s" %s>