WPFTS Pro Main Site WPFTS Community Forum
    • Recent
    • Tags
    • Popular
    • Register
    • Login
    Get WPFTS Pro today with 25% discount!

    [Solved] Indexing and Search files by content in BuddyDrive

    Scheduled Pinned Locked Moved Recipes and Known Solutions
    buddydrivefilesearch
    1 Posts 1 Posters 725 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • EpsilonAdminE
      EpsilonAdmin
      last edited by EpsilonAdmin

      Hey, if you are using the BuddyPress system, should be you're also using BuddyDrive to store user files. Simple and nice file storage system, right. But there is a small problem is the impossibility to search those files by content.

      Here in this small article, I going to explain to you how to make this search happen in just a dozen lines of the PHP code!

      First of all, let's check the wp_posts table to understand how BuddyPress stores uploaded files. Each new file makes another record in wp_posts where post_type is equal to buddydrive-file and post_status is equal to buddydrive_public. Also, it feels like the file URL is stored in the wp_posts.guid column.

      Well, quite not standard, but nothing too complex for WPFTS Pro.
      Let's create some code to make that type of records understandable for the WPFTS indexer.

      add_filter('wpfts_index_post', function($index, $post)
      {
          global $wpfts_core;
      
          if ($post && $wpfts_core) {
              if ($post->post_type == 'buddydrive-file') {
                  $url = $post->guide;
                  if (strlen($url) > 0) {
                      // We need to include WPFTS Utils library to extract file content
                      require_once $wpfts_core->root_dir.'/includes/wpfts_utils.class.php';
      
                      // Extract data from the file by given URL (assuming this URL is mapped to local filesystem!)
                      $ret = WPFTS_Utils::GetCachedFileContent_ByLocalLink($url);
      
                      // Store extracted text (if present) into the specific index cluster
                      $index['attachment_content'] = isset($ret['post_content']) ? trim($ret['post_content']) : '';
                  }
              }	
          }
      
          return $index;
      }, 3, 2);
      

      That's all? No, unfortunately. The indexer understands BuddyDrive-specific records, but WP_Query() still has no idea how to search them.
      So let's add another hook.

      add_action('pre_get_posts', function(&$wpq)
      {
          // We going to modify parameters only if we are in the main query and it's a text search
          if ($wpq->is_main_query() && $wpq->is_search) {
      	
              // We going to add buddydrive files to the search results only if attachment search 
              // is enabled (and thus, "inherit" and "attachments" are already in the list)
              if (in_array('inherit', $wpq->query_vars['post_status'])) {
                  $wpq->query_vars['post_status'][] = 'buddydrive_public';
              }
              if (in_array('attachment', $wpq->query_vars['post_type'])) {
                  $wpq->query_vars['post_type'][] = 'buddydrive-file';
              }
      
          }
      }, 20);
      

      Okay, and now that's all?

      Yes! Now you need to rebuild the index and then you can see the BuddyDrive searchable in the frontend search, wow!

      But you still can see one problem there. If you click on the search result, it redirects you to nowhere, because WordPress still not understand what is the link to the "single page" of the BuddyDrive "post" record.

      Let's make it clearer! As we investigated above, BuddyPress stores the file URL in the guid column.

      add_filter('wpfts_se_titlelink', function($r1, $post)
      {
          if ($post && ($post['post_type'] == 'buddydrive-file')) {
              $r1['link'] = $post['guid'];
          }
      
          return $r1;
      }, 10, 2);
      

      Okay! Now it finally works.

      Something not yet clear? Keep the community posted.

      If you just want the ready code for your website, download it:
      wpfts-addon-buddydrive-1.0.2.zip

      https://e-wm.org

      1 Reply Last reply Reply Quote 0
      • First post
        Last post

      Suggested Topics

      • EpsilonAdminE

        [Solved] EduMall theme does not show Smart Excerpts and broken the search results page

        Watching Ignoring Scheduled Pinned Locked Moved Recipes and Known Solutions
        1
        0 Votes
        1 Posts
        508 Views
        No one has replied
      • EpsilonAdminE

        [Solved] Polylang limits search by language taxonomy

        Watching Ignoring Scheduled Pinned Locked Moved Recipes and Known Solutions fix patch polylang search taxonomy
        1
        0 Votes
        1 Posts
        764 Views
        No one has replied
      • EpsilonAdminE

        Is it possible to make 2 different searches on the same website?

        Watching Ignoring Scheduled Pinned Locked Moved Frequently Asked Questions multiple search widgets presets filters
        1
        1 Votes
        1 Posts
        897 Views
        No one has replied
      • EpsilonAdminE

        [Solved] No excerpts shown in search results in Storefront theme

        Watching Ignoring Scheduled Pinned Locked Moved Recipes and Known Solutions storefront theme excerpt fix
        1
        0 Votes
        1 Posts
        801 Views
        No one has replied
      • EpsilonAdminE

        How to search a post by the attached PDF file

        Watching Ignoring Scheduled Pinned Locked Moved Recipes and Known Solutions acf attachment meta pdf
        1
        0 Votes
        1 Posts
        840 Views
        No one has replied

      Additional Resources

      • My Account
      • Buy WPFTS Pro
      • Community Forum
      • Affiliate Program
      • Privacy Policy
      • Terms & Conditions
      • Contact Us
      • Coupon Partner

      Be the first to read the news!

      We are always improving our products, adding new functions and fixes. Subscribe now to be the first to get the updates and stay informed about our sales! We are not spammy. Seriously.

      Join Us Now!

      We are a professional IT-team. Many of us have been working in a Web IT field for more than 10 years. Our advanced experience of software development has been employed in the creation of the WordPress FullText Search plugin. All solutions implemented into the plugin have been used for 5 or more years in over 60 different web-projects.

      We are looking forward to your comments, requests and suggestions in relation to the current plugin and future updates.

      ewm-logo-450

      The forum powered by NodeBB | Contributors