我希望使一个选定的产品类别打开一个新的标签中的单一产品。其他产品类别将表现为相同选项卡中的正常打开。
这是我的代码,适用于全球所有产品...
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个问题外,工作正常
问题:不属于特定类别的产品页面上列出的第一个产品无法在新选项卡或现有选项卡中打开(根本无法打开)。第二个、第三个等等都像预期的那样开放。
这里我漏掉了什么?
发布于 2017-12-14 16:20:47
我怀疑你的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>';
}
});https://stackoverflow.com/questions/47801133
复制相似问题