【问题标题】:Search a word inside post_content specifically on H1 tag在 post_content 中搜索一个单词,专门在 H1 标签上
【发布时间】:2022-07-20 18:20:42
【问题描述】:

mysql查询是否像这样工作,因为$word值会在post_title列的标签内搜索?

$word = test;
$pQuery = $wpdb->get_results($wpdb->prepare("SELECT * FROM $wpdb->posts
        WHERE post_content LIKE  %s",'<h1>%'.$word.'%</h1>'), ARRAY_A)

【问题讨论】:

  • 你能举一些例子吗? MySQL 无法解析 HTML。它甚至无法近似它。 &lt;h1 class="..."&gt; 会让比赛错过。任何允许的间距也将使其不合格。如果这是一个重要的查询,您可能需要使用 Elastic Search 等工具创建某种外部搜索索引。

标签: mysql sql wordpress


【解决方案1】:

这可能行不通。

  1. 您需要在带有% 通配符的搜索词文本上使用$wpdb->esc_like(),否则prepare 会混淆您的查询。

    $wpdb->prepare(
        "SELECT * FROM $wpdb->posts WHERE post_content LIKE  %s",
        $wpdb->esc_like( '<h1>%'.$word.'%</h1>' )
    );
    
  2. 您需要搜索'%&lt;h1&gt;%'.$word.'%&lt;/h1&gt;%',因为您的&lt;h1&gt; 标签不在帖子内容的开头或结尾。将% 放在搜索词的开头和结尾。

  3. @tadman 指出,如果您的 &lt;h1&gt; 标记包含属性,您的搜索将不起作用。在 SQL 的 LIKE 过滤器范围内,您无能为力。

  4. 如果您的帖子包含多个&lt;h1&gt; 标签,您的搜索词将考虑第一个和最后一个之间整个范围内的词。

  5. 这会非常慢。

如果您的用户不能容忍故障,第 4 点可能会成为问题。

对于此类应用程序,您可能需要考虑使用像 Relevanssi 这样的搜索插件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-17
    • 2013-09-17
    • 2013-12-18
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 2014-12-22
    相关资源
    最近更新 更多