我如何实现会员网站的搜索功能?

时间:2013-08-27 作者:swtshweta

我有一个会员网站,在那里我正在使用Wishlist会员插件。用户注册的课程很少,注册后,他们可以访问不同的模块和相应的课程。所有这些课程都有多个视频、文件和PDF,它们通过自定义的元框连接在一起(值以序列化数组的形式存储在wp\\U Posteta表中)。此外,每个用户都可以为每个特定课程添加注释(值存储在自定义注释表中)。

现在,我必须在我的网站上添加搜索功能,搜索以下内容:

自定义元框,由不同的视频链接、excel文件链接和PDF链接组成

  • 记录了用户在视频中添加的口语词,我已经尝试实现了Relevanssi Pro Search插件,用于搜索自定义元字段的值。但是,结果并不令人满意。

    任何人都可以为此推荐一些好的搜索插件吗?或者我需要为此定制一些搜索解决方案吗?

  • 1 个回复
    SO网友:Mridul Aggarwal

    如果不修改wordpress生成的主搜索查询,就没有简单的方法可以做到这一点。我想你应该posts_search &;posts_join 钩它们位于wp-includes/query.php

    执行var_dump 首先查看您得到了什么&;相应修改。这里有一些未经测试的代码,我现在可以为您提供这些代码。

    add_filter(\'posts_search\', \'search_function\', 10, 2);
    function search_function($search, $query) {
      if(is_admin() || !$query->is_main_query() || !$query->is_search)
        return; //determine if we are modifying the right query
    
      global $wpdb;
      $search_term = $query->get(\'s\');
      $search = \' AND (\';
    
      //point 1
      $search .= "($wpdb->posts.post_content LIKE \'%$search_term%\')";
    
      //need to add an OR between search conditions
      $search .= " OR ";
    
      //point 2
      $search .= "($wpdb->comments.comment_content LIKE \'%$search_term%\')";
    
      //need to add an OR between search conditions
      $search .= " OR ";
    
      //point 3
      $search .= "($wpdb->postmeta.meta_key = \'custom_field_key\' AND $wpdb->postmeta.meta_value LIKE \'%$search_term%\')";
    
      //need to add an OR between search conditions
      $search .= " OR ";
    
      //point 4
      $search .= "({$wpdb->prefix}notes.text LIKE \'%$search_term%\')";
    
      //add the filter to join, sql will error out without joining the tables to the query
      add_filter(\'posts_join\', \'join_tables\');
    
      return $search . \') \';
    }
    
    function join_tables($join) {
      $join .= "JOIN $wpdb->comments ON ($wpdb->comments.comment_post_ID = $wpdb->posts.ID)";
      $join .= "JOIN $wpdb->postmeta ON ($wpdb->postmeta.post_ID = $wpdb->posts.ID)";
      $join .= "JOIN {$wpdb->prefix}notes ON ({$wpdb->prefix}notes.post_ID = $wpdb->posts.ID)";
      return $join;
    }
    

    结束

    相关推荐

    Get_Search_link()重定向到404模板页面

    我构建了一个自定义主题,其中有一个404。php页面和搜索。php页面。在模板的其他地方,我想直接链接到搜索页面。因此,我使用get\\u search\\u template()函数来获取搜索页面链接,其结果如下:http://example.org/search当我单击链接时,我会被发送到404页面模板。为什么会转到404页面模板而不是搜索页面模板?