从 Woocommerce 商店页面中的特定自定义元数据中过滤产品

2024-05-05

我需要过滤 WooCommerce 商店页面,并且只想显示需要自定义产品元数据的产品。这是我在archive-product.php:

/**
 * Hook: woocommerce_before_shop_loop.
 *
 * @hooked wc_print_notices - 10
 * @hooked woocommerce_result_count - 20
 * @hooked woocommerce_catalog_ordering - 30
 */
do_action( 'woocommerce_before_shop_loop' );
woocommerce_product_loop_start();
if ( wc_get_loop_prop( 'total' ) ) {
    while ( have_posts() ) {
        the_post();
        /**
         * Hook: woocommerce_shop_loop.
         *
         * @hooked WC_Structured_Data::generate_product_data() - 10
         */
        do_action( 'woocommerce_shop_loop' );
        wc_get_template_part( 'content', 'product' );
    }
}
woocommerce_product_loop_end();

那么我如何在这部分中传递过滤器值以仅显示具有元键 X 和值 Y 的产品?

Update

我已经按照 Loic 所说的方式尝试过,但是当我检查多个元值时,它会导致问题,并且我看不到任何产品:

add_filter( 'woocommerce_product_query_meta_query', 'show_only_products_with_specific_metakey', 10, 2 );
function show_only_products_with_specific_metakey( $meta_query, $query ) {
    // Only on shop pages
    if( ! is_shop() ) return $meta_query;

    $meta_query[] = array(
        'key'     => '_the_meta_key',
        'value'   => 'the_value',
        'compare' => 'EXIST'
    );

    //Don't works when adding the second one
    $meta_query[] = array(
        'key'     => '_the_meta_key',
        'value'   => 'the_value_2',
        'compare' => 'EXIST'
    );


    return $meta_query;
};

我有两个产品:

  • 产品 A -> 有the_value_2
  • 产品 B -> 有the_value

所以我很期待这两款产品。当我删除第二个时meta_query我只得到产品B。


您可以使用挂钩的自定义函数woocommerce_product_query_meta_query过滤钩,您将在其中更换_the_meta_key在下面的代码中,根据您的目标meta_key:

add_filter( 'woocommerce_product_query_meta_query', 'show_only_products_with_specific_metakey', 10, 2 );
function show_only_products_with_specific_metakey( $meta_query, $query ) {
    // Only on shop pages
    if( ! is_shop() ) return $meta_query;

    $meta_query[] = array(
        'key'     => '_the_meta_key',
        'compare' => 'EXISTS'
    );
    return $meta_query;
}

代码位于活动子主题(或活动主题)的 function.php 文件中。经过测试并工作。


添加(与您最后的评论相关):

要使其适用于多个元值,您需要使用'compare' => 'IN', like:

add_filter( 'woocommerce_product_query_meta_query', 'show_only_products_with_specific_metakey', 10, 2 );
function show_only_products_with_specific_metakey( $meta_query, $query ) {
    // Only on shop pages
    if( ! is_shop() ) return $meta_query;

    $meta_query[] = array(
        'key'     => '_the_meta_key',
        'value'     => array('L','XL'),
        'compare' => 'IN'
    );
    return $meta_query;
}

代码位于活动子主题(或活动主题)的 function.php 文件中。经过测试并工作。

WP 元查询文档 https://developer.wordpress.org/reference/classes/wp_meta_query/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Woocommerce 商店页面中的特定自定义元数据中过滤产品 的相关文章

  • 添加产品属性列以在 Woocommerce 中编辑订单页面

    对此的任何帮助都非常感激 到目前为止尝试了很多方法都无济于事 包括这里的建议 将产品简短描述添加到 Woocommerce 管理订单预览 https stackoverflow com questions 49755552 add prod
  • 如何通过 md5 比较图像?

    该方法是否比较图像的像素值 我猜它不会起作用 因为它们的尺寸彼此不同 但如果它们相同但格式不同怎么办 例如 我截图并保存为 jpg另一个并保存为 gif MD5哈希是实际的二进制数据 因此不同的格式将具有完全不同的二进制数据 因此 要使 M
  • mysqli_num_rows 无法正常工作

    I have an admin panel in my website in which the admin creates new pages he provides the page name and then the spaces o
  • 仅当用户打印时如何重定向到另一个页面

    我一直在尝试找到一种在用户实际打印时重定向到另一个页面的方法 也就是说 只有当他们从打印时打开的选项卡中单击该打印按钮时 我才想重定向 我不想要这种方法 function myFunction window print window loc
  • WordPress 无法与站点通信

    我正在尝试添加一个搜索框 到目前为止我拥有的代码是 div style padding right 30px padding top 25px height 50px width 500px div 我不断收到以下消息 无法与站点通信以检查
  • Swift 中的 preg_match 等效项

    我尝试将 PHP 函数转换为 Swift 该函数用于根据 my 正则表达式将字符串格式化为另一个字符串 这就是我在 PHP 中所做的 preg match P 0 9 Y 0 9 M 0 9 D T 0 9 H 0 9 M 0 9 0 9
  • 按值或 ID 选择更多复选框

    我有这段代码 我想在其中创建一个切换按钮来选择 2 个或更多复选框 例如 意大利和德国 我正在尝试这段代码 但我无法让它工作 document on click checkbox button function e var checks i
  • 雄辩的致命错误:参数传递的实例不正确

    我正在使用 Slim 和 Eloquent 在 PHP 中构建端点系统 如上所述here http www slimframework com news slim and laravel eloquent orm 在我的本地开发中运行它时
  • 传递表单变量的安全方式

    我正在为我的 WordPress 主题构建联系表单 我希望能够从后端输入接收者地址 目前我正在传递带有隐藏输入字段的变量
  • 使用 php 将 swf 转为 pdf

    有没有办法使用 php 将 SWF 转换为 pdf 我的意思是该页面有一个按钮 单击它必须将 swf 内容导出为 pdf 格式 您可以尝试的一种方法是使用ffmpeg http www ffmpeg org 使用 image2 输出编解码器
  • Gmail 搜索怎么这么快?

    搜索这么多字符的最有效方法是什么 你怎么认为 假设网站是用 PHP 和 MySQL 构建的 我应该学习什么才能尽可能有效地构建它 有什么我应该学习的算法吗 文本索引算法 https stackoverflow com questions 4
  • parse_str():jwage/purl 中不推荐调用不带结果参数的 parse_str()

    public function postIndex url new Url https www dropbox com 1 oauth2 authorize url gt query gt setData response type gt
  • Laravel - 重复键批量插入更新大数据集

    我有大约 80k 条记录 每天需要多次运行插入 更新脚本 INSERT INTO my rankings id rank VALUES 1 100 2 99 3 102 80000 3 ON DUPLICATE KEY UPDATE ran
  • PHP、in_array 和数组中的快速搜索(到最后)

    我对在数组中进行快速搜索的更好方法有疑问 我正在谈论一个特定的情况 假设我有一个数组 L A B C 当我开始时 当程序运行时 L 可能会增长 但到最后 当我进行搜索时 一个可能的原因是 L A B C D E 事实是 当我搜索时 我想要找
  • 将延期交货库存状态添加到 Woocommerce 可变产品下拉列表中

    我想在下拉菜单中显示可变产品的库存状态 包括 缺货 因为我网站上的大多数产品都缺货 而不是 缺货 我已经尝试过答案如何将变体库存状态添加到 Woocommerce 产品变体下拉列表中 https stackoverflow com ques
  • WooCommerce 从购物车中删除所有产品并将当前产品添加到购物车

    我是 WooCommerce 新手 我只需要能够在购物车中添加一种产品 我想在单击 添加到购物车 按钮时清除所有产品并将当前产品添加到购物车 我怎样才能做到这一点 我对此有一个确切的解决方案 尝试以下代码 add filter woocom
  • Yii:使用与控制器布局不同的布局渲染动作

    在 Yii 中 有没有办法使用不同的方式渲染单个动作layout比为控制器定义的值 我有一个操作希望其格式与其他操作不同 并且文档中不清楚这是否可能 我相信您可以调用该操作 layout多变的 public function actionY
  • 返回导航缓存 - IE

    当我在 IE 11 上运行 Web 应用程序时 收到如下警告消息 DOM7011 此页面上的代码禁用了后退和前进缓存 为了 更多信息 请参阅 http go microsoft com fwlink LinkID 291337 http g
  • 处理照片上传的最佳方式是什么?

    我正在为一个家庭成员的婚礼制作一个网站 他们要求的一个功能是一个照片部分 所有客人都可以在婚礼结束后前往并上传他们的照片 我说这是一个很棒的想法 然后我就去实现它 那么只有一个问题 物流 上传速度很慢 现代相机拍摄的照片很大 2 5 兆 我
  • APC 将数据存储在哪里?

    我想用apc store 缓存一些结果 但我需要知道数据将存储在哪里 以及限制是什么 它总是存储在内存中吗 或者也写入磁盘 我希望将不经常访问的数据存储在磁盘上 我应该为此使用不同的缓存系统吗 这就是极限了吗 apc shm size 32

随机推荐

  • 有效地减去不同形状的 numpy 数组

    使用 numpy 出色的广播规则 您可以减去形状 3 数组v来自形状 5 3 数组X with X v 结果是一个形状 5 3 数组 其中每一行i是有区别的X i v 有没有办法减去形状 n 3 数组w from X使得每一行w从整个数组中
  • XmlAdapter 到 JAXB 绑定 Joda 的时间间隔?

    我已经被 Web 服务的 JAXB 绑定问题困扰了几个小时 为了准备一个必须返回 Joda Time 类实例 即时 持续时间 间隔等 的更大的 Web 服务 我从一个只有一个返回 Interval 的方法的 Web 服务开始 package
  • Xamarin Forms ListView onpressing 事件

    当按下项目时 我想通过绑定 以编程方式 更改 IconToShow 属性来更改图像 如何触发 OnPressed 事件
  • 是否可以使用不在 GROUP BY 中的 ORDER BY 列?

    正如标题所说 这是我的代码 SELECT material SUM Amount AS Amount RIGHT CONVERT varchar 50 date in 106 8 FROM rec stats GROUP BY materi
  • 适用于 Windows 7 的 32 位版本 VS Code

    我正在尝试获取可在 32 位 Windows 7 上运行的 VS Code 版本 这一页 https code visualstudio com docs supporting FAQ can i run vs code on window
  • 最大化列表视图中的可见行

    这是我的列表中项目的代码 假设我正在夸大这个TextView进入ListView
  • 默认情况下隐藏 JupyterLab 单元的输出

    我在用Jupyter实验室构建使用 bash 和 python 脚本的生物信息学管道 第一个 bash 脚本结果为该过程的每一步提供了大量反馈 但是 此反馈没有帮助 除非出现错误 并且使文档的可读性较差 我希望能够默认隐藏该单元格的输出 而
  • Android 应用安装验证

    我有一个应用程序 其中列出了用户可以安装并赚取积分的一些活动 应用程序列表 现在我主要关心的是安全性 一些用户从模拟器或VPN或其他东西安装应用程序 这样我的客户就无法在Google Play商店中安装应用程序 我见过一些应用程序 如现金海
  • 结果身份改变

    我正在使用 TOR 我想知道如何在需要国家 地区的结果节点之间切换 我可以简单地通过 telnet 9051 端口来更改它 例如 telnet localhost 9051 AUTHENTICATE r signal NEWNYM r qu
  • UITableViewCell 中的自定义 VoiceOver 操作

    When a UITableView是可编辑的 其UITableViewCells允许用户在 VoiceOver 打开时执行自定义操作 当 VoiceOver 光标位于单元格上时 用户可以通过向上或向下滑动来听到可用的操作 然后通过双击屏幕
  • Django 抛出此错误:SMTPException:服务器不支持 STARTTLS 扩展

    由于 gmail 中发送邮件的限制 我在我的一台服务器上安装了 exim4 设置如下 dc eximconfig configtype internet dc other hostnames mydomain com localhost l
  • 向其他用户授予对 v$session 的 SELECT 访问权限

    我想将 v session 的 SELECT 访问权限授予其他用户Oracle Database 11g Enterprise Edition Release 11 2 0 1 0 64bit Production 但是当我运行这个查询时
  • Flutter 无效参数:超出最大调用堆栈大小

    我的 Flutter 应用程序出现了一个我不理解的异常 这是代码 主要 dart void main runApp MyApp class MyApp extends StatelessWidget This widget is the r
  • 检查消息是否是 DM。 (Discord.js 和 Discord.js-commando)

    如何在 Discord js 中检查消息是否为私信 我尝试了几种方法来测试这一点 我尝试过以下方法 if msg channel isDM Produced undefined if msg isDM Produced undefined
  • 我如何在 Android 中跟踪收到的短信?

    我正在开发一个应用程序 想要跟踪传入的短信 我需要一个可以使用的示例代码或例程 如果您为传入短信实施广播接收器 在这种情况下 以下代码将跟踪您传入的短信并为您提供消息和发件人号码 import android content Broadca
  • Swift 3 中的隐藏按钮

    我刚刚开始编码 我真的很想知道如何隐藏按钮 我想做的是当我按下按钮时 Start 我想让开始按钮和后退按钮消失 这是通过插座和操作完成的 我已经搜索了一下 但是当我想做的时候 它说do关键字应该指定一个语句块 我希望有人能帮助我 连接插座后
  • 如何使构造函数只能由基类访问?

    如果我想要一个只能从子类访问的构造函数 我可以使用protected构造函数中的关键字 现在我想要相反的 我的子类应该有一个构造函数 该构造函数可以由其基类访问 但不能从任何其他类访问 这可能吗 这是我当前的代码 问题是子类有一个公共构造函
  • Symfony 4 参数没有类型提示,您应该显式配置其值

    交响乐4 2 3 最近从版本 3 4 升级到 4 2 3 并使我的项目正常运行 但是 当将 services yaml 中的 autoconfigure 设置为 true 时 我将收到以下错误消息 Cannot autowire servi
  • 弹出窗口显示来自 php 和 javascript 的结果

    我正在尝试实现 javascript 来显示 php 的结果 基本上 我有一个登录页面 对于登录失败 我希望结果显示在弹出窗口中 而不是仅仅用 php 回显它们 我尝试实现警报框 但看起来我错过了一些东西 成功登录将被重定向到logged
  • 从 Woocommerce 商店页面中的特定自定义元数据中过滤产品

    我需要过滤 WooCommerce 商店页面 并且只想显示需要自定义产品元数据的产品 这是我在archive product php Hook woocommerce before shop loop hooked wc print not