Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wordpress 在新选项卡中打开外部产品_Wordpress_Woocommerce - Fatal编程技术网

Wordpress 在新选项卡中打开外部产品

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)

我正在尝试自定义WooCommerce外部产品链接以在新选项卡中打开

这是我的尝试:

在WordPress主题functions.php文件中添加了一个过滤器,如下所示:

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错误;)