Wordpress 在新选项卡中打开外部产品
我正在尝试自定义WooCommerce外部产品链接以在新选项卡中打开 这是我的尝试: 在WordPress主题functions.php文件中添加了一个过滤器,如下所示:Wordpress 在新选项卡中打开外部产品,wordpress,woocommerce,Wordpress,Woocommerce,我正在尝试自定义WooCommerce外部产品链接以在新选项卡中打开 这是我的尝试: 在WordPress主题functions.php文件中添加了一个过滤器,如下所示: add_filter( 'woocommerce_product_add_to_cart_url', 'woocommerce_externalProducts_openInNewTab' ); function woocommerce_externalProducts_openInNewTab($product_url)
add_filter( 'woocommerce_product_add_to_cart_url', 'woocommerce_externalProducts_openInNewTab' );
function woocommerce_externalProducts_openInNewTab($product_url) {
global $product;
if ( $product->is_type('external') ) {
$product_url = $product->get_product_url() . '"target="_blank""';
}
return $product_url;
}
我遗漏了什么?从function.php中删除上述功能: 通过模板覆盖方法使用模板文件夹中的插件文件,然后 请遵循以下路径: woocommerce\templates\single product\add to cart\external.php 打开有标记的external.php,应用target=“\u blank”
它将起作用。从function.php中删除上述功能: 通过模板覆盖方法使用模板文件夹中的插件文件,然后 请遵循以下路径: woocommerce\templates\single product\add to cart\external.php 打开有标记的external.php,应用target=“\u blank”
它会起作用。您当前所做的是错误的
get\u product\u url
以其功能命名。它会给你的网址。。。不是包含url的html锚,而是url。。因此,您只是在url中添加一些文本。。这就是你正在做的
@Ash Patel给出了一种解决方案。您可以使用模板更改标记。。。只需导航到插件文件夹并查找此文件woocommerce\templates\single product\add to cart\external.php
。你可以在里面找到说明
现在,有时候,我们不喜欢编辑模板。。。特别是如果只是像这样的小编辑
下面的代码将按您希望的方式执行。。。只需将此代码粘贴到主题的functions.php
remove_action( 'woocommerce_external_add_to_cart', 'woocommerce_external_add_to_cart', 30 );
add_action( 'woocommerce_external_add_to_cart', 'rei_external_add_to_cart', 30 );
function rei_external_add_to_cart(){
global $product;
if ( ! $product->add_to_cart_url() ) {
return;
}
$product_url = $product->add_to_cart_url();
$button_text = $product->single_add_to_cart_text();
do_action( 'woocommerce_before_add_to_cart_button' ); ?>
<p class="cart">
<a href="<?php echo esc_url( $product_url ); ?>" target="_blank" rel="nofollow" class="single_add_to_cart_button button alt"><?php echo esc_html( $button_text ); ?></a>
</p>
<?php do_action( 'woocommerce_after_add_to_cart_button' );
}
remove_动作('woocommerce_external_add_to_cart'、'woocommerce_external_add_to_cart',30);
添加操作('woocommerce\u external\u add\u to \u cart'、'rei\u external\u add\u to \u cart',30);
函数rei_外部_添加到_购物车(){
全球$产品;
如果(!$product->将\添加到\购物车\ url()){
回来
}
$product_url=$product->将_添加到_购物车_url();
$button_text=$product->single_add_to_cart_text();
do_action('woocommerce_在添加到购物车按钮之前);?>
您当前所做的是错误的…get\u product\u url
以其功能命名。它将为您提供url…不是包含url的html锚,而是url..因此您只需向url添加一些文本..这就是您正在做的
@Ash Patel给出了一个解决方案。您可以使用模板更改标记…只需导航到插件文件夹并查找此文件。woocommerce\templates\single product\add to cart\external.php
。您可以在其中找到说明
现在,有时候,我们不喜欢编辑模板…特别是如果只是像这样的小编辑
下面的代码将按您希望的方式执行…只需将此代码粘贴到主题的functions.php
remove_action( 'woocommerce_external_add_to_cart', 'woocommerce_external_add_to_cart', 30 );
add_action( 'woocommerce_external_add_to_cart', 'rei_external_add_to_cart', 30 );
function rei_external_add_to_cart(){
global $product;
if ( ! $product->add_to_cart_url() ) {
return;
}
$product_url = $product->add_to_cart_url();
$button_text = $product->single_add_to_cart_text();
do_action( 'woocommerce_before_add_to_cart_button' ); ?>
<p class="cart">
<a href="<?php echo esc_url( $product_url ); ?>" target="_blank" rel="nofollow" class="single_add_to_cart_button button alt"><?php echo esc_html( $button_text ); ?></a>
</p>
<?php do_action( 'woocommerce_after_add_to_cart_button' );
}
remove_动作('woocommerce_external_add_to_cart'、'woocommerce_external_add_to_cart',30);
添加操作('woocommerce\u external\u add\u to \u cart'、'rei\u external\u add\u to \u cart',30);
函数rei_外部_添加到_购物车(){
全球$产品;
如果(!$product->将\添加到\购物车\ url()){
回来
}
$product_url=$product->将_添加到_购物车_url();
$button_text=$product->single_add_to_cart_text();
do_action('woocommerce_在添加到购物车按钮之前);?>
以下是如何将target=“\u blank”
添加到存档页面上的链接:
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
部分。以下是如何将target=“\u blank”
添加到存档页面上的链接:
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
部分替换为您自己的名称空间缩写。我的意思是,您可以通过使用模板覆盖使用主题目录中的插件文件,并在不干扰插件文件的情况下应用代码。您可以重新表述上述答案。我的意思是,您可以通过使用模板覆盖使用主题目录中的插件文件,并在不干扰的情况下应用代码插件文件。你可以重新表述上面的答案。这不起作用,因为url是一个链接…你正在向链接添加一些文本,这就是你现在正在做的..这不起作用,因为url是一个链接…你正在向链接添加一些文本,这就是你现在正在做的..非常感谢@Reigel,你能向我解释一下做什么吗(“woocommerce”在“添加到购物车”按钮之前)、
和执行操作(“woocommerce”在“添加到购物车”按钮之后)
do?这些都包含在模板中。为了一致性,我把它放进去了…你可以放心地删除它…另一个问题,请…现在,我的主题已经有了新的类,如果我想保留它们,而不是用你添加的内容替换它们,该怎么办:class=“single\u add\u to\u cart\u button alt”
?我已经在你的答案中添加了这些类,但是风格改变了!你可以做任何你想做的事情。。只要确保没有php错误;)非常感谢@Reigel,你能给我解释一下什么是做动作('woocommerce\u在添加到购物车按钮之前);
和做动作('woocommerce\u在添加到购物车按钮之后)'
do?这些都包含在模板中。为了一致性,我把它放进去了…你可以放心地删除它…另一个问题,请…现在,我的主题已经有了新的类,如果我想保留它们,而不是用你添加的内容替换它们,该怎么办:class=“single\u add\u to\u cart\u button alt”
?我已将这些类添加到您的答案中,但样式已更改!您可以随心所欲地执行任何操作..只要确保没有php错误;)