Introduction
Traditional WordPress search is keyword-based and limited. As websites grow, users expect semantic search—the ability to find content based on meaning, not just exact keywords.
By integrating AI-powered search with vector databases, you can deliver results like ChatGPT-style semantic matching for posts, products, and custom content.
In this guide, we’ll implement AI-driven search in WordPress using embeddings, vector databases (like Pinecone, Weaviate, or Qdrant), and custom APIs.
Why Use AI-Powered Search?
- Semantic understanding: Match content by meaning, not just keywords.
- Faster discovery: Improve user experience with relevant results.
- Multi-language support: Embeddings work across languages.
- Better eCommerce search: Ideal for WooCommerce product discovery.
Tools & Stack
- WordPress (latest version)
- OpenAI or other embedding providers
- Vector database (Pinecone, Weaviate, Qdrant, or Redis Vector)
- PHP for indexing and API calls
- Optional: Custom Gutenberg block for AI search
Step 1: Generate Embeddings for Your Content
Use OpenAI (or similar) to convert posts into vector embeddings:
function bookwp_generate_post_embedding($post_id) {
$content = get_post_field('post_content', $post_id);
$api_key = 'your_openai_api_key';
$response = wp_remote_post('https://api.openai.com/v1/embeddings', [
'headers' => [
'Authorization' => 'Bearer ' . $api_key,
'Content-Type' => 'application/json',
],
'body' => json_encode([
'model' => 'text-embedding-3-small',
'input' => wp_strip_all_tags($content),
]),
]);
$body = json_decode(wp_remote_retrieve_body($response), true);
return $body['data'][0]['embedding'] ?? [];
}
You can store this embedding in a vector database for efficient semantic search.
Step 2: Push Embeddings to a Vector Database
Example for Pinecone:
function bookwp_push_to_pinecone($post_id) {
$embedding = bookwp_generate_post_embedding($post_id);
$api_key = 'your_pinecone_api_key';
$index_url = 'https://your-index.pinecone.io/vectors/upsert';
$data = [
'vectors' => [[
'id' => (string) $post_id,
'values' => $embedding,
'metadata' => [
'title' => get_the_title($post_id),
'url' => get_permalink($post_id),
],
]],
];
wp_remote_post($index_url, [
'headers' => [
'Api-Key' => $api_key,
'Content-Type' => 'application/json',
],
'body' => json_encode($data),
]);
}
add_action('save_post', 'bookwp_push_to_pinecone');
This updates the vector database whenever a post is saved.
Step 3: Perform AI Search Queries
When a user searches, generate an embedding for their query and find the most similar content.
function bookwp_search_vector($query) {
$api_key = 'your_pinecone_api_key';
$index_url = 'https://your-index.pinecone.io/query';
// Generate query embedding
$embedding = bookwp_generate_query_embedding($query);
$data = [
'vector' => $embedding,
'topK' => 5,
'includeMetadata' => true,
];
$response = wp_remote_post($index_url, [
'headers' => [
'Api-Key' => $api_key,
'Content-Type' => 'application/json',
],
'body' => json_encode($data),
]);
$body = json_decode(wp_remote_retrieve_body($response), true);
return $body['matches'] ?? [];
}
Step 4: Display Search Results in WordPress
Replace the default search template with AI results:
add_action('template_redirect', function () {
if (is_search()) {
$query = get_search_query();
$results = bookwp_search_vector($query);
foreach ($results as $match) {
echo '<p><a href="'. esc_url($match['metadata']['url']) .'">'. esc_html($match['metadata']['title']) .'</a></p>';
}
exit;
}
});
Advanced Enhancements
- WooCommerce product search: Embed product titles, descriptions, and attributes.
- Hybrid search: Combine keyword search with semantic results.
- Faceted filtering: Filter AI search results by taxonomy or price.
- Caching: Store results for repeated queries.
- Chat-style search UI: Use AI to generate answers from WordPress content.
Best Practices
- Update embeddings when content changes.
- Use background jobs (Action Scheduler) for large sites.
- Rate-limit API calls to control costs.
- Secure API keys in
wp-config.php
.