Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.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 隐藏&x27;缺货';商业产品_Wordpress_Plugins_Woocommerce - Fatal编程技术网

Wordpress 隐藏&x27;缺货';商业产品

Wordpress 隐藏&x27;缺货';商业产品,wordpress,plugins,woocommerce,Wordpress,Plugins,Woocommerce,在“产品”和“库存”下,我检查了以下设置: “从目录中隐藏缺货项目” 现在,所有已售完的产品都隐藏在存档/类别视图中。到目前为止还不错 问题是隐藏(缺货)的产品是按每页计算的。因此,如果有3种产品在第一页上售罄,那么只有库存中的产品才会显示出来(6) 看起来这些“隐藏”的产品仍然可以搜索,并且可以通过不同的小部件看到 有没有办法解决这个问题?我的意思是真正隐藏缺货的产品。或者我需要手动删除它们吗?您可以尝试将其添加到主题的functions.php文件中: add_action( 'pre_ge

在“产品”和“库存”下,我检查了以下设置: “从目录中隐藏缺货项目”

现在,所有已售完的产品都隐藏在存档/类别视图中。到目前为止还不错

问题是隐藏(缺货)的产品是按每页计算的。因此,如果有3种产品在第一页上售罄,那么只有库存中的产品才会显示出来(6)

看起来这些“隐藏”的产品仍然可以搜索,并且可以通过不同的小部件看到


有没有办法解决这个问题?我的意思是真正隐藏缺货的产品。或者我需要手动删除它们吗?

您可以尝试将其添加到主题的functions.php文件中:

add_action( 'pre_get_posts', 'custom_pre_get_posts_query' );

function custom_pre_get_posts_query( $q ) {

if ( ! $q->is_main_query() ) return;
if ( ! $q->is_post_type_archive() ) return;
if ( ! is_admin() ) {


$q->set( 'meta_query', array(array(
    'key'       => '_stock_status',
    'value'     => 'outofstock',
    'compare'   => 'NOT IN'
)));

}

remove_action( 'pre_get_posts', 'custom_pre_get_posts_query' );

}
add_action('woocommerce_product_query', 'show_only_instock_products');

function show_only_instock_products($query) {
        $meta_query = $query->get( 'meta_query' );
        $meta_query[] = array(
                'key'       => '_stock_status',
                'compare'   => '=',
                'value'     => 'instock'
        );
        $query->set( 'meta_query', $meta_query );
}
我修改了此URL中的代码:

再次保存在此处,以防网站脱机:(此代码不包括某些产品类别)


self注意:始终从开发人员处读取变更日志

在这里找到了答案:

如果类别的产品数量显示过高或 数量太少,升级到WooCommerce 2.1后有一个简单的问题 变通办法

转到您的电子商务>系统状态中的“工具”选项卡 WordPress管理小组。这里您首先使用“重新计票条款” 按钮,然后使用“清除瞬态”按钮。这将 强制系统在下次分类时重新统计所有产品 已加载


更新:还要记住,将库存数量更改为0是不够的。您还必须将“库存状态”设置为“缺货”。如果没有,即使没有库存,产品也会被计入商店。

只有在您使用官方woocommerce短代码的情况下,但如果您使用visual composer创建页面并使用自定义插件或第三方插件或短代码,第一步是为从循环中运行的查询创建一个函数,然后将其修改为如下内容

$params = array(
        'posts_per_page' => 5,
        'post_type' => array('product', 'product_variation'),
        'meta_query' => array(
            array(
                'key' => '_stock_status',
                'value' => 'instock'
            )
        )
);
你必须确定的最重要的部分是

    'meta_query' => array(
        array(
            'key' => '_stock_status',
            'value' => 'instock'
        )
    )

我找到了一个更简单的方法,如果有人还在woocommerce中寻找隐藏的缺货产品,请遵循这些简单的步骤,而不编辑html

  • 转到电子商务->设置
  • 盘点
  • 有一个复选框表示我们的问题,但它是用英语写的:-)你会找到你需要的
  • 拯救

  • 隐藏缺货产品的步骤

  • 转到WordPress仪表板中的WooCommerce->Settings子菜单
  • 单击产品选项卡>库存子选项卡
  • 选中隐藏缺货产品的选项缺货可见性

  • 您可以将PHP代码片段放在子主题函数.PHP文件的底部

    add_action('woocommerce_product_query', 'custom_woocommerce_product_query');
    
    function custom_woocommerce_product_query($q)
        {
            if (!is_admin())
            {
                $oos_query = new WP_Query(['meta_query' => [['key' => '_stock_status', 'value' => 'outofstock', 'compare' => '=', ], ], 'post_type' => 'product', 'posts_per_page' => - 1, 'fields' => 'ids', ]);
                $exclude_ids = $oos_query->posts;
        
                $q->set('post__not_in', $exclude_ids);
            }
        }
    

    我知道这个问题很久以前就被问过了,但是问题的解决方案现在不同了,所以我为那些和我有同样问题的人发了这篇文章。在WooCommerce 5.3.0上测试

    解决方案: 首先,确保Woocomece>设置中的“隐藏缺货产品”复选框未选中,然后将此PHP代码添加到子主题函数.PHP文件中:

    add_action( 'pre_get_posts', 'custom_pre_get_posts_query' );
    
    function custom_pre_get_posts_query( $q ) {
    
    if ( ! $q->is_main_query() ) return;
    if ( ! $q->is_post_type_archive() ) return;
    if ( ! is_admin() ) {
    
    
    $q->set( 'meta_query', array(array(
        'key'       => '_stock_status',
        'value'     => 'outofstock',
        'compare'   => 'NOT IN'
    )));
    
    }
    
    remove_action( 'pre_get_posts', 'custom_pre_get_posts_query' );
    
    }
    
    add_action('woocommerce_product_query', 'show_only_instock_products');
    
    function show_only_instock_products($query) {
            $meta_query = $query->get( 'meta_query' );
            $meta_query[] = array(
                    'key'       => '_stock_status',
                    'compare'   => '=',
                    'value'     => 'instock'
            );
            $query->set( 'meta_query', $meta_query );
    }
    

    我的商店与批发商整合在一起,库存水平每小时更新一次,有数千种产品。

    谢谢你的回复,但不幸的是没有起作用。缺货的产品仍然可以搜索,并在分页中计数。由于开发人员没有将此添加到插件中,我想不幸的是,没有任何快速修复方法。伟大的解决方案在四年后仍然有效。需要考虑以下几点:(1)不检查查询/发布类型,因此将应用于自定义发布类型。(2) 覆盖已应用的任何元查询。当然,这两者都很容易修复,而且取决于您自己的情况@super9我更新了我的答案,在我第一次设置并将我的产品导入WooCommerce时,我也忽略了一些东西。不是一个真正的编程解决方案,但在导入时容易被忽略。Klaudia。。。很抱歉,该选择将仅从存档(目录)中隐藏产品。搜索将返回存档中看不到的缺货项目,即使设置确定了要隐藏缺货项目的首选项。对我来说很有用。非常感谢。如果您解释一下并添加ComentAdded,您的答案会更有帮助。将代码片段添加到functions.php,但搜索结果中会不断显示缺货产品