商店、产品搜索和 WordPress 搜索中完全隐藏 WooCommerce 产品
在 WooCommerce 中,有时候我们希望在商店、产品搜索和 WordPress 搜索中完全隐藏某些产品,以便保护商业秘密或提高搜索结果的准确性,本文将介绍如何实现这一目标,包括使用插件、自定义代码和设置过滤器等方法。
1、使用插件
市面上有很多插件可以帮助我们在商店、产品搜索和 WordPress 搜索中完全隐藏 WooCommerce 产品,Hide Products”和“Search & Hide Products”,这些插件可以轻松地将指定的产品从搜索结果中移除,同时还可以根据需要设置隐藏条件,如价格、标签等。
2、自定义代码
如果不想使用插件,我们还可以编写自定义代码来实现隐藏 WooCommerce 产品的功能,我们需要在主题的 functions.php 文件中添加以下代码:
function hide_woocommerce_products() { if (is_search()) { // 如果是搜索页面 global $query; // 获取查询参数 if (isset($query['post_type']) && 'product' === $query['post_type']) { // 如果查询参数中包含产品类型 unset($query['s']); // 移除搜索关键字 } } elseif (is_admin()) { // 如果是后台管理页面 global $pagenow; // 获取当前页面 if ('edit.php' === $pagenow) { // 如果是编辑产品页面 if (isset($_GET['post'])) { // 如果查询参数中包含产品 ID $post_id = intval($_GET['post']); // 将产品 ID 转换为整数 if ($post_id !== get_option('page_on_front')) { // 如果产品 ID 不等于首页显示的产品 ID remove_action('save_post', 'hide_woocommerce_products'); // 移除保存文章时的钩子函数 } else { add_action('save_post', 'hide_woocommerce_products', 10, 3); // 在保存文章时重新添加钩子函数,并传递文章 ID、当前文章对象和布尔值 true 作为参数 } } elseif (isset($_GET['post_id'])) { // 如果查询参数中包含产品 ID $post_id = intval($_GET['post_id']); // 将产品 ID 转换为整数 remove_action('save_post', 'hide_woocommerce_products'); // 移除保存文章时的钩子函数 } } elseif (in_array($pagenow, array('edit.php', 'post-new.php'), true)) { // 如果是编辑或新建产品页面 if (isset($_GET['post'])) { // 如果查询参数中包含产品 ID $post_id = intval($_GET['post']); // 将产品 ID 转换为整数 if ($post_id !== get_option('page_on_front')) { // 如果产品 ID 不等于首页显示的产品 ID remove_action('save_post', 'hide_woocommerce_products'); // 移除保存文章时的钩子函数 } else { add_action('save_post', 'hide_woocommerce_products', 10, 3); // 在保存文章时重新添加钩子函数,并传递文章 ID、当前文章对象和布尔值 true 作为参数 } } elseif (isset($_GET['post_id'])) { // 如果查询参数中包含产品 ID $post_id = intval($_GET['post_id']); // 将产品 ID 转换为整数 remove_action('save_post', 'hide_woocommerce_products'); // 移除保存文章时的钩子函数 } } elseif (in_array($pagenow, array('edit.php', 'wp-admin/edit.php'), true) && isset($_GET['post'])) { // 如果是后台管理页面且查询参数中包含文章 ID(可能是用于批量操作的) $post_id = intval($_GET['post']); // 将文章 ID 转换为整数 remove_action('save_post', 'hide_woocommerce_products'); // 移除保存文章时的钩子函数 } elseif (in_array($pagenow, array('wp-admin/edit.php'), true)) { // 如果是后台管理页面且没有查询参数中的文章 ID(可能是用于批量操作的) foreach (get_posts(array('post_type' => 'product')) as $p) { // 遍历所有产品文章 if ($p->ID === get_option('page_on_front')) continue; // 如果当前产品是首页显示的产品,则跳过本次循环 remove_action('save_post', 'hide_woocommerce_products'); // 移除保存文章时的钩子函数 } } elseif (in_array($pagenow, array('wp-admin/themes.php'), true)) { // 如果是后台管理页面且没有查询参数中的商品信息(可能是用于批量操作的) foreach (get_posts(array('post_type' => 'product')) as $p) { // 遍历所有产品文章 if ($p->ID === get_option('page_on_front')) continue; // 如果当前产品是首页显示的产品,则跳过本次循环 remove_action('save_post', 'hide_woocommerce_products'); // 移除保存文章时的钩子函数 } } elseif (in_array($pagenow, array('wp-admin/options-general.php'), true)) { // 如果是后台管理页面且没有查询参数中的商品信息(可能是用于批量操作的) foreach (get_posts(array('post_type' => 'product')) as $p) { // 遍历所有产品文章 if ($p->ID === get_option('page_on_front')) continue; // 如果当前产品是首页显示的产品,则跳过本次循环 remove_action('save_post', 'hide_woocommerce_products'); // 移除保存文章时的钩子函数 } } elseif (in_array($pagenow, array('wp-admin/options-permalink.php'), true)) { // 如果是后台管理页面且没有查询参数中的商品信息(可能是用于批量操作的) foreach (get_posts(array('post_type' => 'product')) as $p) { // 遍历所有产品文章 if ($p->ID === get_option('page_on_front')) continue; // 如果当前产品是首页显示的产品,则跳过本次循环 remove_action('save_post', 'hide_woocommerce_products'); // 移除保存文章时的钩子函数 } } elseif (in_array($pagenow, array('wp-admin/options-reading.php'), true)) { // 如果是后台管理页面且没有查询参数中的商品信息(可能是用于批量操作的) foreach (get_posts(array('post_type' => 'product')) as $p) { // 遍历所有产品文章 if ($p->ID === get_option('page_on_front')) continue; // 如果当前产品是首页显示的产品,则跳过本次循环 remove_action('save_post', 'hide_woocommerce_products'); // 移除保存文章时的钩子函数 } } elseif (in_array($pagenow, array('wp-admin/options-writing.php'), true)) { // 如果是后台管理页面且没有查询参数中的商品信息(可能是用于批量操作的) foreach (get_posts(array('post
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/232817.html