我已设法将属性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>
如何更改分组产品父页面上的链接以添加此属性,我首先想到的是修改groups.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/
EDIT解决了感谢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;
}
}
答案 0 :(得分:1)
如果您跟踪代码,该函数会执行某些操作,然后加载模板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模板。使用他们出色的Template Structure将模板复制到您的主题并在那里进行修改,否则您的更改将在下次更新WooCommerce时丢失。
最后注意:使用好的IDE时,跟踪代码 easy 并且很有趣。我是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
);
}
在上面的代码中,密切关注%s
声明中的新sprintf
:
// Watch for this --->--->--->--->--->--->--->--->--->--->--->--->--->--->--->--->--->--->-->--->--->-vv
'<a rel="nofollow" href="%s" data-quantity="%s" data-product_id="%s" data-product_sku="%s" class="%s" %s>
答案 1 :(得分:0)
这是将target="_blank"
添加到add_to_cart链接以在新标签中打开它们的一种更简洁的方法:
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_
部分。