我希望选择一个产品类别在新标签中打开单个产品。其他产品类别在同一选项卡中的行为与正常情况相同。
以下是我在全球范围内为所有产品工作的代码......
remove_action( 'woocommerce_before_shop_loop_item','woocommerce_template_loop_product_link_open', 10 );
add_action ( 'woocommerce_before_shop_loop_item', 'ami_function_open_new_tab', 10 );
function ami_function_open_new_tab() {
echo '<a target="_blank" href="' . get_the_permalink() . '" class="woocommerce-LoopProduct-link">';
}
这段代码完美无缺,但我想把它作为产品类别特定,所以这就是我想出来的......
remove_action ( 'woocommerce_before_shop_loop_item','woocommerce_template_loop_product_link_open', 10 );
add_action ( 'woocommerce_before_shop_loop_item', 'ami_function_open_new_tab', 10 );
function ami_function_open_new_tab() {
if ( has_term( 'stone', 'product_cat' ) ) {
echo '<a target="_blank" href="' . get_the_permalink() . '" class="woocommerce-LoopProduct-link">';
}else if( !has_term( 'stone', 'product_cat' ) ) {
remove_action ( 'woocommerce_before_shop_loop_item', 'ami_function_open_new_tab', 10 );
add_action ( 'woocommerce_before_shop_loop_item','woocommerce_template_loop_product_link_open', 10 );
}
}
按预期工作,除了1个问题
问题:不在特定类别中的产品页面上列出的第一个产品不会在新选项卡或现有选项卡中打开(根本不会打开)。第二,第三,所以全部按预期开放。
我在这里缺少什么?
答案 0 :(得分:1)
我怀疑你的remove_action无法采取行动,并且连续有2个链接。这就是为什么第一个给出麻烦的原因。其余的可以通过现代浏览器呈现。 所以试试这段代码:
add_action('init',function(){ remove_action( 'woocommerce_before_shop_loop_item', 'woocommerce_template_loop_product_link_open', 10 ); } ,0);
function ami_function_open_new_tab() {
//....
}
或者,您可以使用简单的jQuery
来完成add_action('wp_footer',function(){
if ( has_term( 'stone', 'product_cat' ) ) {
echo '<script>
//for existing content
jQuery(".woocommerce-LoopProduct-link").attr("target","_blank");
//for content part which comes from AJAX
jQuery( document ).ajaxComplete(function() {
jQuery(".woocommerce-LoopProduct-link").attr("target","_blank");
});
</script>';
}
});