WooCommerce সাইটে অনেক বেশি প্রোডাক্ট থাকলে, কাস্টম লুকআপ টেবিল তৈরি করে প্রোডাক্ট সার্চ অপটিমাইজ করা যেতে পারে। এতে সার্চ কোয়েরির পারফরমেন্স উল্লেখযোগ্যভাবে উন্নত হয়। নিচে ধাপে ধাপে দেখানো হল কিভাবে এটি করা যায়:
Step 1: Custom Lookup Table তৈরি করা
প্রথমে আপনাকে একটি কাস্টম লুকআপ টেবিল তৈরি করতে হবে যেখানে প্রোডাক্ট সম্পর্কিত গুরুত্বপূর্ণ তথ্য সংরক্ষিত থাকবে। উদাহরণস্বরূপ, আমরা একটি টেবিল wp_product_lookup
তৈরি করতে পারি যেখানে প্রোডাক্টের ID, নাম, SKU এবং অন্যান্য প্রয়োজনীয় তথ্য থাকবে।
CREATE TABLE wp_product_lookup (
product_id BIGINT(20) UNSIGNED NOT NULL,
product_name VARCHAR(255) NOT NULL,
sku VARCHAR(100) DEFAULT NULL,
price DECIMAL(10, 2) DEFAULT NULL,
stock_status VARCHAR(20) DEFAULT NULL,
PRIMARY KEY (product_id),
KEY product_name (product_name),
KEY sku (sku)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Step 2: প্রোডাক্ট ডেটা লুকআপ টেবিলে ইনসার্ট করা
এখন আমাদের প্রোডাক্টের তথ্য wp_product_lookup
টেবিলে ইনসার্ট করতে হবে। এটি আমরা WooCommerce এর save_post
অ্যাকশনের মাধ্যমে করতে পারি। যখনই কোন প্রোডাক্ট আপডেট বা তৈরি হবে, এই টেবিলেও সেই তথ্য আপডেট হবে।
function sync_product_to_lookup_table($post_id, $post, $update) {
if ($post->post_type != 'product') {
return;
}
global $wpdb;
$product = wc_get_product($post_id);
$product_name = $post->post_title;
$sku = $product->get_sku();
$price = $product->get_price();
$stock_status = $product->get_stock_status();
// Delete existing entry
$wpdb->delete('wp_product_lookup', ['product_id' => $post_id]);
// Insert new entry
$wpdb->insert('wp_product_lookup', [
'product_id' => $post_id,
'product_name' => $product_name,
'sku' => $sku,
'price' => $price,
'stock_status' => $stock_status
]);
}
add_action('save_post', 'sync_product_to_lookup_table', 10, 3);
Step 3: কাস্টম সার্চ ফাংশন তৈরি করা
এখন আমরা কাস্টম সার্চ ফাংশন তৈরি করব যা কাস্টম লুকআপ টেবিল থেকে ডেটা রিট্রিভ করবে। এই ফাংশনটি আমরা WooCommerce এর সার্চ অপারেশন হুক করে ব্যবহার করতে পারি।
function custom_product_search($query) {
if (!is_admin() && $query->is_main_query() && $query->is_search() && $query->query_vars['post_type'] === 'product') {
global $wpdb;
$search_term = $query->get('s');
$query->set('s', ''); // Disable default search
$sql = $wpdb->prepare("
SELECT product_id
FROM wp_product_lookup
WHERE product_name LIKE %s
OR sku LIKE %s
", '%' . $wpdb->esc_like($search_term) . '%', '%' . $wpdb->esc_like($search_term) . '%');
$product_ids = $wpdb->get_col($sql);
if (!empty($product_ids)) {
$query->set('post__in', $product_ids);
} else {
$query->set('post__in', [0]); // No results
}
}
}
add_action('pre_get_posts', 'custom_product_search');
Step 4: নতুন প্রোডাক্ট যুক্ত বা আপডেটের ক্ষেত্রে লুকআপ টেবিল আপডেট করা
যখনই কোন প্রোডাক্ট আপডেট হবে বা নতুন প্রোডাক্ট যুক্ত হবে, তখন উপরের sync_product_to_lookup_table
ফাংশনটি save_post
হুকের মাধ্যমে ট্রিগার হবে এবং লুকআপ টেবিল আপডেট করবে।
Leave a Reply