Include gd_place in search
November 14, 2024 · AI Conversations
### Adding Custom Post Type to Search Results
1. **Add this code to your theme's `functions.php` file or a custom plugin**:
function include_gd_place_in_search($query) {
// Ensure this only affects the main query on the frontend search page
if (!is_admin() && $query->is_main_query() && $query->is_search()) {
// Get the existing post types in the search query
$post_types = $query->get('post_type');
// Include 'gd_place' along with existing post types, if any
if (empty($post_types)) {
$post_types = ['post', 'gd_place']; // Default to 'post' and 'gd_place' if no other post types are set
} elseif (is_array($post_types)) {
$post_types[] = 'gd_place'; // Add 'gd_place' to existing post types array
} else {
$post_types = [$post_types, 'gd_place']; // Convert to array if it's a single value
}
// Set the modified post types back to the query
$query->set('post_type', $post_types);
}
}
add_action('pre_get_posts', 'include_gd_place_in_search');
### Explanation
– **`!is_admin()`**: Ensures that the modification only applies to the frontend.
– **`$query->is_main_query()`**: Ensures it only applies to the main query, not to any secondary custom queries.
– **`$query->is_search()`**: Ensures it only applies to search results.
– **`$query->set('post_type', $post_types)`**: Sets the `post_type` parameter to include `gd_place` along with any existing post types.
### Testing the Functionality
– Go to your WordPress search page (e.g., `https://yoursite.com/?s=search-term`).
– Search for content that exists in the `gd_place` post type.
– You should now see results from both the default `post` type and your custom `gd_place` post type.
This code snippet is flexible and will work even if you have other custom post types in your search results already.
### Option 1: Print the Post Object
You can print the entire post object within the loop to see all the details:
<?php while ( have_posts() ) : the_post(); ?>
<?php
// Print the entire post object for debugging
echo '<pre>';
print_r(get_post());
echo '</pre>';
?>
<div class="search-result-wrapper blog-post-card">
<a href="<?php the_permalink(); ?>" class="full-link-wrapper">
<?php if (has_post_thumbnail()) : ?>
<div class="thumbnail image-container">
<?php the_post_thumbnail('square-small', ['class' => 'img-circle img-fluid']); ?>
</div>
<?php endif; ?>
<div class="post-content text-container">
<h3><?php the_title(); ?></h3>
</div>
<span class="link">Read More</span>
</a>
</div>
<?php endwhile; ?>
### Option 2: Print Specific Data (e.g., Post Type)
If you want to check the post type of each result:
<?php while ( have_posts() ) : the_post(); ?>
<?php
// Print the post type
echo '<pre>';
echo 'Post Type: ' . get_post_type();
echo '</pre>';
?>
<div class="search-result-wrapper blog-post-card">
<a href="<?php the_permalink(); ?>" class="full-link-wrapper">
<?php if (has_post_thumbnail()) : ?>
<div class="thumbnail image-container">
<?php the_post_thumbnail('square-small', ['class' => 'img-circle img-fluid']); ?>
</div>
<?php endif; ?>
<div class="post-content text-container">
<h3><?php the_title(); ?></h3>
</div>
<span class="link">Read More</span>
</a>
</div>
<?php endwhile; ?>
### Option 3: Print the `WP_Query` Object
To inspect the entire `$wp_query` object and see what’s being retrieved, you can do this **outside the loop**:
<?php
global $wp_query;
echo '<pre>';
print_r($wp_query);
echo '</pre>';
?>
Place this code **before the loop** to see details like the total number of found posts, current query parameters, etc.
### Notes
– Wrapping the `print_r()` output with “ tags ensures it is formatted nicely in HTML.
– Make sure to remove or comment out these debug statements once you’re done, as they can expose sensitive data in a live environment.
These methods should help you debug your search functionality and confirm that your custom post types like `gd_place` are included in the search results.
### Counting Search Results
Place the following code **before the loop** to get the total count of posts:
<?php
global $wp_query;
$total_results = $wp_query->found_posts;
?>
<header>
<h3>
<?php
// Display the search query and the total number of results
printf(
__('Search Results for: %s (%d results)', 'your-theme'),
get_search_query(),
$total_results
);
?>
</h3>
</header>
### Explanation
– **`global $wp_query;`**: Accesses the global `$wp_query` object, which contains all the query information.
– **`$wp_query->found_posts`**: This property gives you the total number of posts found for the current query.
– **`get_search_query()`**: Retrieves the search term that was used.
### Example Output
This will generate a header like:
Search Results for: your-search-term (5 results)
### Counting Posts Inside the Loop
If you want to count posts as you iterate through the loop, you can use a simple counter:
<?php
$post_count = 0;
while ( have_posts() ) : the_post();
$post_count++;
?>
<div class="search-result-wrapper blog-post-card">
<a href="<?php the_permalink(); ?>" class="full-link-wrapper">
<?php if (has_post_thumbnail()) : ?>
<div class="thumbnail image-container">
<?php the_post_thumbnail('square-small', ['class' => 'img-circle img-fluid']); ?>
</div>
<?php endif; ?>
<div class="post-content text-container">
<h3><?php the_title(); ?></h3>
</div>
<span class="link">Read More</span>
</a>
</div>
<?php endwhile; ?>
<!-- Print the total count of posts displayed -->
<p><?php printf(__('Total Posts Displayed: %d', 'your-theme'), $post_count); ?></p>
### Notes
– Using `$wp_query->found_posts` is more efficient when you only need the total count without iterating through the loop.
– The counter inside the loop is useful if you need to perform additional checks or actions per post.