Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.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
Php 如何删除错误您不能再添加一个“;产品名称”;去你的购物车_Php_Wordpress_Function_Woocommerce_Hook Woocommerce - Fatal编程技术网

Php 如何删除错误您不能再添加一个“;产品名称”;去你的购物车

Php 如何删除错误您不能再添加一个“;产品名称”;去你的购物车,php,wordpress,function,woocommerce,hook-woocommerce,Php,Wordpress,Function,Woocommerce,Hook Woocommerce,在我的网站woocommerce设置中,删除添加到ajax和通知卡;当用户(访问者)将产品添加到购物篮中进行购买时,单击“购物篮”后重定向,并显示消息“将产品添加到购物篮中的卡片成功” 但当产品选项处于活动(启用)状态时,我想单独销售选项。 用户反复尝试将产品添加到购物篮中。收到以下信息: 无法将其他“产品名称”添加到购物车。 我的问题是如何使用functions.php来删除此错误,因为您无法向购物车添加其他“产品名称” 重复后在购物篮中显示新消息,单击购物篮中的“添加到购物车”按钮 您以前将

在我的网站woocommerce设置中,删除添加到ajax和通知卡;当用户(访问者)将产品添加到购物篮中进行购买时,单击“购物篮”后重定向,并显示消息“将产品添加到购物篮中的卡片成功”

但当产品选项处于活动(启用)状态时,我想单独销售选项。 用户反复尝试将产品添加到购物篮中。收到以下信息: 无法将其他“产品名称”添加到购物车。 我的问题是如何使用functions.php来删除此错误,因为您无法向购物车添加其他“产品名称”

重复后在购物篮中显示新消息,单击购物篮中的“添加到购物车”按钮 您以前将“产品名称”添加到购物车。现在你可以付钱了

一般来说:

  • 删除不能添加另一个。。。消息并在单击后停止重定向到产品页面

  • 显示新的自定义消息。点击后进入篮框


  • 非常感谢大家

    这是一个经过测试且行之有效的解决方案,用于删除“您无法添加其他”消息。

    背景:Woocommerce不会对其所有通知公开直接挂钩。cart错误实际上作为抛出的异常硬编码到class-wc-cart.php中

    生成错误异常时,会将它们添加到通知列表中,我们可以使用以下方法访问、解析和更改这些通知:

    • wc\u get\u notices()以数组形式返回所有通知
    • wc\u set\u notices()用于直接设置通知数组
    为了访问通知并更改它们,您需要钩住一个操作,该操作将在woocommerce生成通知后,但在页面显示之前触发。您可以通过以下操作完成此操作:woocommerce\u before\u template\u part

    以下是专门删除“您不能添加其他”通知的完整工作代码:

    add_action('woocommerce_在_template_part之前,'houx_filter_wc_notices');
    函数houx_filter_wc_notices(){
    $noticeCollections=wc_get_notices();
    /*调试:取消对以下行的注释,以查看woocommerce为此页面生成的所有通知的转储*/
    /*var_dump($noticeCollections)*/
    /*noticeCollections是按通知类型索引的数组。可能的类型有:错误、成功、通知*/
    /*每个元素包含给定类型的通知子数组*/
    foreach($noticeCollections作为$noticetype=>$notices)
    {
    如果($noticetype=='error')
    {
    /*下一行删除所有包含“您无法添加其他”的错误*/
    /*如果要筛选additiona错误,只需复制该行并更改文本即可*/
    $filteredErrorNotices=array_filter($notices,function($var){return(stripos($var,'您不能添加另一个')==false);});
    $noticeCollections['error']=$filteredErrorNotices;
    }
    }
    /*调试:取消注释以查看筛选的通知集合*/
    /*回声“过滤通知:

    ”; var_dump($noticeCollections)*/ /*此行通过将通知更改为筛选集来覆盖这些通知*/ wc_集合通知($noticeCollections); }
    旁注:如果您想添加自己的通知,可以使用wc_add_notice()。您必须阅读woocommerce文档才能了解其工作原理:

    听到这个消息很难过。您是否有可以在最新版本中使用的解决方法?将
    return(stripos($var,
    替换为
    return(stripos($var['notice']),
    这样可以防止“stripos()期望参数1是字符串,数组给定的”警告错误,这也将解决此代码的问题。@brauliobo你能试试7uc1f3r的建议吗?他说的很有道理。我以前没有意识到这会产生警告。我现在自己没有办法测试,所以如果可能的话,我希望在编辑答案之前得到确认。@7uc1f3r没有帮助,我想
    wc_由于
    var\u dump
    显示通知已被删除,因此set\u通知正在被稍后的操作覆盖matched@brauliobo调整确实有效,因为我已经对其进行了2次测试。可能是因为您已经在使用其他插件/自定义代码。您只是希望消息停止显示?还是希望用还有消息吗?
    add_action('woocommerce_before_template_part', 'houx_filter_wc_notices');
    
    function houx_filter_wc_notices(){
            $noticeCollections = wc_get_notices();
    
            /*DEBUGGING: Uncomment the following line to see a dump of all notices that woocommerce has generated for this page */
            /*var_dump($noticeCollections);*/
    
            /* noticeCollections is an array indexed by notice types.  Possible types are: error, success, notice */
            /* Each element contains a subarray of notices for the given type */
            foreach($noticeCollections as $noticetype => $notices)
            {
                    if($noticetype == 'error')
                    {
                            /* the following line removes all errors that contain 'You cannot add another'*/
                            /* if you want to filter additiona errors, just copy the line and change the text */
                            $filteredErrorNotices = array_filter($notices, function ($var) { return (stripos($var, 'You cannot add another') === false); });
                            $noticeCollections['error'] = $filteredErrorNotices;
                    }
            }
    
            /*DEBUGGING: Uncomment to see the filtered notices collection */
            /*echo "<p>Filtered Notices:</p>";
            var_dump($noticeCollections);*/
    
            /*This line overrides woocommerce notices by changing them to our filtered set. */
            wc_set_notices($noticeCollections);
    }