从 Wordpress 搜索中排除多个自定义分类术语

2024-03-16

我从 Wordpress 搜索结果中排除任何帖子或将自定义分类法设置为特定术语的自定义帖子。我希望能够简单地添加更多分类法和术语(例如在数组中),而无需重复函数,并确保我能够高效地完成它。

谁能建议一个更清洁的功能来适应这个问题?

/* Exclude from WordPress Search using custom taxonomy */
add_action( 'pre_get_posts', function ( $query ) {
    if ( is_admin() || ! $query->is_main_query() ) {
        return;
    }

    // Exclude Terms by ID from Search and Archive Listings
    if ( is_search() || is_tax( 'marque' ) ) {    
        $tax_query = array([
            'taxonomy' => 'site_search',
            'field' => 'term_id',
            'terms' => [ exclude_page ],
            'operator' => 'NOT IN',
        ]);

        $query->set( 'tax_query', $tax_query );
    }
}, 11, 1 );


/* Exclude from WordPress Search using custom taxonomy */
add_action( 'pre_get_posts', function ( $query ) {
    if ( is_admin() || ! $query->is_main_query() ) {
        return;
    }

    // Exclude Terms by ID from Search and Archive Listings
    if ( is_search() || is_tax( 'marque' ) ) {    
        $tax_query = array([
            'taxonomy' => 'job_status',
            'field' => 'term_id',
            'terms' => [ closed ],
            'operator' => 'NOT IN',
        ]);

        $query->set( 'tax_query', $tax_query );
    }
}, 11, 1 );

您可以尝试首先将数组中的所有数据定义为分类法/术语对(我已将数组嵌入到外部函数中,但可以直接在挂钩函数中添加)。这样您就可以轻松添加或删除数据。

然后我们使用 foreach 循环来读取和设置税务查询中的数据。所以你的代码将是这样的:

// HERE set in the array your taxonomies / terms pairs
function get_custom_search_data(){
    return [
        'site_search' => [ 'exclude_page' ],
        'job_status'  => [ 'closed' ],
    ];
}

/* Exclude from WordPress Search using custom taxonomy */
add_action( 'pre_get_posts', 'multiple_taxonomy_search', 33, 1 );
function multiple_taxonomy_search( $query ) {
    if ( is_admin() || ! $query->is_main_query() ) {
        return;
    }

    // Exclude Terms by ID from Search and Archive Listings
    if ( is_search() || is_tax( 'marque' ) ) {
        // Set the "relation" argument if the array has more than 1 custom taxonomy
        if( sizeof( get_custom_search_data() ) > 1 ){
            $tax_query['relation'] = 'AND'; // or 'OR'
        }

        // Loop through taxonomies / terms pairs and add the data in the tax query
        foreach( get_custom_search_data() as $taxonomy => $terms ){
            $tax_query[] = [
                'taxonomy' => $taxonomy,
                'field' => 'slug', // <== Terms slug seems to be used
                'terms' => $terms,
                'operator' => 'NOT IN',
            ];
        }

        // Set the defined tax query
        $query->set( 'tax_query', $tax_query );
    }
}

代码位于活动子主题(或活动主题)的 function.php 文件中。未经测试,它应该可以工作。

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

从 Wordpress 搜索中排除多个自定义分类术语 的相关文章

随机推荐

  • 组合 .csv 并将文件名添加为列

    这是我的担忧 我有一个包含多个 csv 文件的文件夹 我想将它们组合 合并到一个 csv 文件中 但我需要将每个 csv 的文件名添加为 csv 本身的一列 以便我可以知道哪个条目来自合并文件中的哪个 csv 文件 我没有编码经验 但是我在
  • 如何随机选择地球表面的一个点?

    正如标题所说 如何无偏差地随机选择地球表面的一个坐标 执行 rand 90 90 rand 180 180 的简单解决方案将有利于极地地区而不是赤道地区 听起来您正在寻找球体上的均匀随机分布 http mathproofs blogspot
  • 在页面之间来回发送 PHP 变量

    我创建了一个注册表单 它成功地将其变量从注册页面 go gold php 传递到摘要 验证页面 go gold summary php 数据正确显示在第二页上 但是 我希望能够使用图像按钮返回到注册页面 以防用户输入错误 返回 原始表单现在
  • 如何克服Excel中超链接的限制?

    我有超过 100000 个单元格的链接列表 我必须为所有这些内容提供超链接 但在 Excel 中存在限制65530 https support microsoft com en us office excel specifications
  • 未暂存的更改将文件显示为已删除,即使该文件存在

    我的存储库中的一个文件让我非常头疼 git status在 未暂存提交的更改 下将其显示为 已删除 并且还在 未跟踪的文件 下显示完全相同的文件 该文件肯定存在于我的磁盘上以及远程存储库上 如果我删除该文件 未跟踪的文件 中的条目就会消失
  • 永不过期的不记名令牌

    是否可以定义永不过期的 ASP NET Web API 2 不记名令牌 有什么线索吗 我认为我们也可以通过使用下面给出的代码来实现这一点 AccessTokenExpireTimeSpan TimeSpan MaxValue 据 MSDN
  • 没有代理/存根 DLL 的进程外 COM 服务器?

    我正在学习如何实现进程外 COM 服务器 并发现了这篇代码项目文章 构建本地 COM 服务器和客户端 分步示例 http www codeproject com Articles 8679 Building a LOCAL COM Serv
  • 伪类:hover 在 IE7 中不起作用

    我有这样一个简单的代码 div class div1 div class div2 Foo div div class div3 div class div4 div class div5 Bar div div div div 和这个CS
  • CoreData 警告:多个 NSEntityDescription 声明 NSManagedObject 子类

    我突然在 iOS12 XCode 9 上收到一堆警告 为什么有多个托管对象模型 该应用程序只有一个 xcdatamodeld 文件 但模型中有多个版本 这是 iOS12 Coredata 的新功能吗 我可以采取什么措施来防止此警告 还是应该
  • 关于静态数据成员和成员函数定义的 Extern 关键字,C++

    C 标准是否允许extern静态数据成员和成员函数定义上的关键字 假设链接匹配 例如 struct A static int a external linkage void f external linkage extern int A a
  • 如何使用组合键在 SQLite ORM 中插入条目

    我使用的是SQLite ORM https github com fnc12 sqlite orm在我的程序中使用 SQLite 的库 我有如下表 auto storage make storage test remove sqlite m
  • 从控制台重新加载 python 模块的正确方法

    我正在从 python 控制台进行调试 并且希望每次进行更改时都重新加载模块 这样我就不必退出控制台并重新进入它 我正在做 gt gt gt from project model user import gt gt gt reload us
  • 使用 DbContext 和 DbSet 而不是实现存储库和工作单元

    我看过很多关于实现存储库和工作单元的文章 我还看到过有关这样做如何增加额外复杂性的文章 因为 DbContext 已经在使用存储库和工作单元模式 我将重构一个应用程序 该应用程序几乎为每个实体都有一个存储库 并且希望尽可能地消除复杂性 任何
  • Eclipse 中的未知主机异常[重复]

    这个问题在这里已经有答案了 当我编译并运行下面的代码时 我抛出未知主机异常 import java net import java io public class URLReader public static void main Stri
  • C# 中取消订阅匿名方法

    是否可以取消订阅事件中的匿名方法 如果我订阅这样的事件 void MyMethod Console WriteLine I did it MyEvent MyMethod 我可以像这样取消订阅 MyEvent MyMethod 但如果我使用
  • PHP / MYSQL 添加按钮到列

    ColumnOne ColumnTwo ColumnThree Columnfour Columnfive ColumnSix one two three four 0 Button Here 正如您在上面看到的 我有六列 其中五列包含某种
  • 如何为 Galaxy S3 和 Nexus 7 创建不同的布局?

    我创建了一个适用于 Nexus 7 的 Android 应用程序 在资源文件夹中 我创建了两个文件夹 layout layout landNexus 7 选项卡 到目前为止 一切都工作正常 现在我想为 Samsung Galaxy S3 创
  • apache.camel 中 Exchange 的 getIn() 与 getMessage()

    我尝试理解 apache camel Exchange 的 getIn 和 getMessage 之间的区别 在文档中 它说 getIn 返回入站消息 而 getMessage 返回当前消息 我的问题是 当当前处理器中未更改入站消息时 ge
  • 具有外部托管 templateUrl 的 AngularJS 组件?

    我有一个 AngularJS 应用程序 我将其作为插件加载到具有不同路径的另一个页面中 因此 我的模板 URL 必须完全限定 才能解析为正确的文件 然而 我正在收到Error sce insecurl Processing of a Res
  • 从 Wordpress 搜索中排除多个自定义分类术语

    我从 Wordpress 搜索结果中排除任何帖子或将自定义分类法设置为特定术语的自定义帖子 我希望能够简单地添加更多分类法和术语 例如在数组中 而无需重复函数 并确保我能够高效地完成它 谁能建议一个更清洁的功能来适应这个问题 Exclude