# Bizzwishlist - সম্পূর্ণ ডকুমেন্টেশন

## সূচিপত্র

1. [প্লাগিন পরিচিতি](#প্লাগিন-পরিচিতি)
2. [ফোল্ডার স্ট্রাকচার](#ফোল্ডার-স্ট্রাকচার)
3. [ক্লাস রেফারেন্স](#ক্লাস-রেফারেন্স)
4. [ডাটাবেস স্ট্রাকচার](#ডাটাবেস-স্ট্রাকচার)
5. [AJAX এন্ডপয়েন্টসমূহ](#ajax-এন্ডপয়েন্টসমূহ)
6. [REST API](#rest-api)
7. [JavaScript আর্কিটেকচার](#javascript-আর্কিটেকচার)
8. [টেমপ্লেট সিস্টেম](#টেমপ্লেট-সিস্টেম)
9. [সিকিউরিটি](#সিকিউরিটি)
10. [হুক রেফারেন্স](#হুক-রেফারেন্স)
11. [ইনস্টলেশন](#ইনস্টলেশন)

---

## প্লাগিন পরিচিতি

**Bizzwishlist** হচ্ছে WooCommerce এর জন্য একটি লাইটওয়েট এবং শক্তিশালী Wishlist অ্যাডঅন প্লাগিন। এটি WordPress.org কোডিং স্ট্যান্ডার্ড অনুসরণ করে তৈরি।

| বিষয় | মান |
|-------|------|
| প্লাগিন নাম | Bizzwishlist |
| Slug | bizzwishlist |
| Text Domain | bizzwishlist |
| Author | Saiful Islam |
| ন্যূনতম WordPress | 5.8 |
| ন্যূনতম PHP | 7.4 |
| ন্যূনতম WooCommerce | 5.0 |
| License | GPL v2 or later |

### মূল ফিচারসমূহ

- ✅ Single Product Page এ "Add to Wishlist" বাটন
- ✅ Product Loop (Shop page) এ Wishlist বাটন
- ✅ Wishlist থেকে Remove করার সুবিধা
- ✅ Wishlist Page (Shortcode: `[bizzwishlist]`)
- ✅ Logged-in user এর জন্য wishlist (user_id ভিত্তিক)
- ✅ Guest user এর জন্য wishlist (session_key + cookie ভিত্তিক)
- ✅ লগইন করলে গেস্ট wishlist ইউজারে মার্জ হয়ে যায়
- ✅ Add all wishlist items to cart
- ✅ AJAX ভিত্তিক add/remove (নন-রিফ্রেশ)
- ✅ Header/Footer wishlist count badge
- ✅ Custom REST API endpoint
- ✅ Theme template override সাপোর্ট
- ✅ Responsive ডিজাইন
- ✅ i18n ready (অনুবাদযোগ্য)

---

## ফোল্ডার স্ট্রাকচার

```
bizzwishlist/
│
├── bizzwishlist.php          ← মূল বুটস্ট্র্যাপ ফাইল (প্লাগিন এন্ট্রি পয়েন্ট)
├── uninstall.php             ← প্লাগিন মুছে ফেলার সময় ডেটা ক্লিনআপ
├── .gitignore                ← Git ignore rules
│
├── includes/                 ← সকল PHP ক্লাস ফাইল
│   ├── Autoloader.php        ← PSR-4 স্টাইল অটোলোডার
│   ├── Plugin.php            ← মূল প্লাগিন ক্লাস (সিঙ্গেলটন)
│   │
│   ├── Database/             ← ডাটাবেস সম্পর্কিত ক্লাস
│   │   ├── Installer.php     ← টেবিল তৈরি ও প্লাগিন অ্যাক্টিভেশন
│   │   └── WishlistRepository.php ← সকল DB অপারেশন (CRUD)
│   │
│   ├── Frontend/             ← ফ্রন্টএন্ড সম্পর্কিত ক্লাস
│   │   ├── Assets.php        ← CSS/JS enqueue
│   │   ├── WishlistButton.php ← Wishlist বাটন রেন্ডার
│   │   ├── WishlistPage.php  ← Wishlist পেজ শর্টকোড
│   │   └── WishlistCounter.php ← Wishlist কাউন্ট ব্যাজ
│   │
│   ├── Ajax/                 ← AJAX হ্যান্ডলার
│   │   └── WishlistAjax.php  ← সকল AJAX অপারেশন
│   │
│   ├── API/                  ← REST API
│   │   └── WishlistRestController.php ← REST API রাউট ও কন্ট্রোলার
│   │
│   ├── Helpers/              ← সাহায্যকারী ক্লাস
│   │   ├── Session.php       ← সেশন ও কুকি ম্যানেজমেন্ট
│   │   └── Utils.php         ← ইউটিলিটি ফাংশন
│   │
│   └── Admin/                ← অ্যাডমিন সম্পর্কিত ক্লাস
│       └── Admin.php         ← Wishlist পেজ তৈরি ও অ্যাডমিন কাজ
│
├── templates/                ← টেমপ্লেট ফাইলসমূহ
│   └── wishlist-page.php     ← Wishlist পেজের HTML টেমপ্লেট
│
├── assets/                   ← স্ট্যাটিক অ্যাসেটস
│   ├── js/
│   │   └── wishlist.js       ← ফ্রন্টএন্ড JavaScript (IIFE)
│   └── css/
│       └── wishlist.css      ← ফ্রন্টএন্ড স্টাইলস
│
├── languages/                ← অনুবাদ ফাইলসমূহ
│   └── index.php             ← প্লেসহোল্ডার
│
└── docs/                     ← ডকুমেন্টেশন
    ├── README.md             ← এই ফাইল
    └── PREMIUM.md            ← প্রিমিয়াম ভার্সন গাইড
```

---

## ক্লাস রেফারেন্স

### 1. `bizzwishlist.php` (মূল বুটস্ট্র্যাপ ফাইল)

এটি প্লাগিনের এন্ট্রি পয়েন্ট। এই ফাইল:

- WordPress প্লাগিন হেডার ডিফাইন করে
- সকল কনস্ট্যান্ট ডিফাইন করে (`BIZZWISHLIST_VERSION`, `BIZZWISHLIST_FILE`, `BIZZWISHLIST_PATH`, `BIZZWISHLIST_URL`, `BIZZWISHLIST_BASENAME`)
- Autoloader লোড করে
- `register_activation_hook` দিয়ে Installer কল করে
- `plugins_loaded` হুকে প্লাগিন ইনিশিয়ালাইজ করে
- WooCommerce চেক করে — না থাকলে admin notice দেখায়
- Text domain লোড করে

### 2. `Bizzwishlist\Autoloader` (includes/Autoloader.php)

**কাজ:** PHP ক্লাসগুলো স্বয়ংক্রিয়ভাবে লোড করা।

- `spl_autoload_register()` ব্যবহার করে
- `Bizzwishlist\` namespace prefix চেক করে
- Namespace কে ডিরেক্টরি পাথে কনভার্ট করে
- উদাহরণ: `Bizzwishlist\Database\Installer` → `includes/Database/Installer.php`

### 3. `Bizzwishlist\Plugin` (includes/Plugin.php)

**কাজ:** প্লাগিনের মূল ক্লাস। সকল কম্পোনেন্ট ইনিশিয়ালাইজ এবং হুক রেজিস্টার করে।

- **প্যাটার্ন:** Singleton (একবার মাত্র ইনস্ট্যান্স তৈরি হয়)
- **Dependency Injection:** Repository এবং Session ক্লাস তৈরি করে অন্যান্য ক্লাসে ইনজেক্ট করে
- **পাবলিক মেথড:**
  - `instance()` — Singleton ইনস্ট্যান্স পায়
  - `get_repository()` — WishlistRepository ইনস্ট্যান্স রিটার্ন করে
  - `get_session()` — Session ইনস্ট্যান্স রিটার্ন করে
  - `merge_guest_wishlist()` — লগইনের পর গেস্ট wishlist মার্জ করে

**রেজিস্টার করা হুকসমূহ:**
| হুক | কলব্যাক | বিবরণ |
|------|---------|-------|
| `wp_enqueue_scripts` | `Assets::enqueue()` | CSS/JS লোড |
| `woocommerce_after_add_to_cart_button` | `WishlistButton::render()` | সিঙ্গেল পেজে বাটন |
| `woocommerce_loop_add_to_cart_link` | `WishlistButton::render_loop_button()` | লুপে বাটন |
| `wp_footer` | `WishlistCounter::render_floating_bubble_counter()` | কাউন্ট ব্যাজ |
| `wp_ajax_bizzwishlist_toggle` | `WishlistAjax::toggle()` | AJAX টগল |
| `wp_ajax_nopriv_bizzwishlist_toggle` | `WishlistAjax::toggle()` | গেস্ট AJAX টগল |
| `wp_ajax_bizzwishlist_remove` | `WishlistAjax::remove()` | AJAX রিমুভ |
| `wp_ajax_nopriv_bizzwishlist_remove` | `WishlistAjax::remove()` | গেস্ট AJAX রিমুভ |
| `wp_ajax_bizzwishlist_add_all_to_cart` | `WishlistAjax::add_all_to_cart()` | সব কার্টে যোগ |
| `wp_ajax_nopriv_bizzwishlist_add_all_to_cart` | `WishlistAjax::add_all_to_cart()` | গেস্ট সব কার্টে |
| `wp_ajax_bizzwishlist_get_count` | `WishlistAjax::get_count()` | কাউন্ট পায় |
| `wp_ajax_nopriv_bizzwishlist_get_count` | `WishlistAjax::get_count()` | গেস্ট কাউন্ট |
| `rest_api_init` | `WishlistRestController::register_routes()` | REST API |
| `init` | `Session::init_session()` | সেশন শুরু |
| `wp_login` | `Plugin::merge_guest_wishlist()` | গেস্ট মার্জ |
| `admin_init` | `Admin::maybe_create_wishlist_page()` | পেজ তৈরি |

### 4. `Bizzwishlist\Database\Installer` (includes/Database/Installer.php)

**কাজ:** প্লাগিন অ্যাক্টিভেশনের সময় ডাটাবেস টেবিল তৈরি করা।

- `activate()` — মূল অ্যাক্টিভেশন মেথড
- `create_table()` — `dbDelta()` দিয়ে টেবিল তৈরি
- `save_version()` — ভার্সন নম্বর অপশনে সেভ

### 5. `Bizzwishlist\Database\WishlistRepository` (includes/Database/WishlistRepository.php)

**কাজ:** সকল ডাটাবেস অপারেশন (CRUD) পরিচালনা করা।

**পাবলিক মেথডসমূহ:**

| মেথড | প্যারামিটার | রিটার্ন | বিবরণ |
|------|------------|---------|-------|
| `add()` | `$product_id`, `$user_id`, `$session_key` | `int\|false` | প্রোডাক্ট যোগ করে |
| `remove()` | `$product_id`, `$user_id`, `$session_key` | `bool` | প্রোডাক্ট মুছে |
| `exists()` | `$product_id`, `$user_id`, `$session_key` | `bool` | আছে কিনা চেক |
| `get_items()` | `$user_id`, `$session_key` | `array` | সকল আইটেম পায় |
| `get_count()` | `$user_id`, `$session_key` | `int` | আইটেমের সংখ্যা |
| `get_product_ids()` | `$user_id`, `$session_key` | `array` | প্রোডাক্ট ID গুলো |
| `merge_guest_to_user()` | `$session_key`, `$user_id` | `void` | গেস্ট থেকে ইউজারে মার্জ |

### 6. `Bizzwishlist\Frontend\Assets` (includes/Frontend/Assets.php)

**কাজ:** ফ্রন্টএন্ডে CSS এবং JavaScript ফাইল enqueue করা।

- শুধুমাত্র WooCommerce, শপ, এবং Wishlist পেজে লোড হয়
- `wp_localize_script` দিয়ে JS এ AJAX URL, nonce, এবং i18n ডেটা পাস করে

### 7. `Bizzwishlist\Frontend\WishlistButton` (includes/Frontend/WishlistButton.php)

**কাজ:** "Add to Wishlist" বাটন রেন্ডার করা।

- `render()` — Single product page এ বাটন দেখায়
- `render_loop_button()` — Product loop (Shop page) এ বাটন দেখায়
- বাটনে `data-product-id` অ্যাট্রিবিউট থাকে JavaScript ব্যবহারের জন্য
- ইতিমধ্যে Wishlist এ থাকলে filled heart (♥) দেখায়

### 8. `Bizzwishlist\Frontend\WishlistPage` (includes/Frontend/WishlistPage.php)

**কাজ:** `[bizzwishlist]` শর্টকোড হ্যান্ডেল করা।

- `render_shortcode()` — Wishlist পেজের HTML রেন্ডার করে
- `templates/wishlist-page.php` থেকে টেমপ্লেট লোড করে
- WC_Product অবজেক্টগুলো টেমপ্লেটে পাস করে

### 9. `Bizzwishlist\Frontend\WishlistCounter` (includes/Frontend/WishlistCounter.php)

**কাজ:** Wishlist count ব্যাজ দেখানো।

- `get_count()` — বর্তমান কাউন্ট রিটার্ন করে
- `render_floating_bubble_counter()` — Footer এ floating ব্যাজ রেন্ডার করে
- AJAX দিয়ে লাইভ আপডেট হয়

### 10. `Bizzwishlist\Ajax\WishlistAjax` (includes/Ajax/WishlistAjax.php)

**কাজ:** সকল AJAX রিকোয়েস্ট হ্যান্ডেল করা।

| মেথড | AJAX Action | বিবরণ |
|------|------------|-------|
| `toggle()` | `bizzwishlist_toggle` | যোগ/মুছুন টগল |
| `remove()` | `bizzwishlist_remove` | শুধু মুছুন |
| `add_all_to_cart()` | `bizzwishlist_add_all_to_cart` | সব কার্টে যোগ |
| `get_count()` | `bizzwishlist_get_count` | কাউন্ট রিটার্ন |

- সকল মেথডে `check_ajax_referer()` দিয়ে nonce ভেরিফাই হয়
- `wp_send_json_success()` / `wp_send_json_error()` ব্যবহার করে
- Logged-in ও Guest দুই ক্ষেত্রেই কাজ করে

### 11. `Bizzwishlist\API\WishlistRestController` (includes/API/WishlistRestController.php)

**কাজ:** REST API রাউট রেজিস্টার ও হ্যান্ডেল করা।

| Route | Method | বিবরণ |
|-------|--------|-------|
| `/bizzwishlist/v1/items` | GET | সকল আইটেম পায় |
| `/bizzwishlist/v1/items` | POST | আইটেম যোগ করে |
| `/bizzwishlist/v1/items` | DELETE | আইটেম মুছে |

- শুধুমাত্র লগইন করা ইউজারদের জন্য (permission callback)
- Product এর বিস্তারিত তথ্য সহ রিটার্ন করে

### 12. `Bizzwishlist\Helpers\Session` (includes/Helpers/Session.php)

**কাজ:** গেস্ট ইউজারদের জন্য সেশন/কুকি ম্যানেজমেন্ট।

- Cookie নাম: `bizzwishlist_session`
- Cookie মেয়াদ: ৩০ দিন
- `init_session()` — কুকি থেকে সেশন কী পড়ে
- `create_session()` — নতুন UUID তৈরি করে কুকিতে সেট করে
- `get_owner()` — user_id অথবা session_key রিটার্ন করে

### 13. `Bizzwishlist\Helpers\Utils` (includes/Helpers/Utils.php)

**কাজ:** স্ট্যাটিক ইউটিলিটি ফাংশন।

- `get_wishlist_page_url()` — Wishlist পেজের URL
- `get_wishlist_page_id()` — Wishlist পেজের ID
- `load_template()` — টেমপ্লেট ফাইল লোড (থিম ওভাররাইড সাপোর্ট সহ)

### 14. `Bizzwishlist\Admin\Admin` (includes/Admin/Admin.php)

**কাজ:** অ্যাডমিন সম্পর্কিত কাজ।

- `maybe_create_wishlist_page()` — প্রথমবার Wishlist পেজ তৈরি করে `[bizzwishlist]` শর্টকোড সহ

---

## ডাটাবেস স্ট্রাকচার

### টেবিল: `{prefix}_bizzwishlist`

| কলাম | টাইপ | বিবরণ |
|------|------|-------|
| `id` | bigint(20) UNSIGNED, AUTO_INCREMENT | প্রাইমারি কী |
| `user_id` | bigint(20) UNSIGNED, NULL | লগইন ইউজারের ID |
| `session_key` | varchar(100), NULL | গেস্ট ইউজারের সেশন কী |
| `product_id` | bigint(20) UNSIGNED, NOT NULL | WooCommerce প্রোডাক্ট ID |
| `created_at` | datetime | তৈরির সময় |
| `updated_at` | datetime | আপডেটের সময় |

### ইনডেক্সসমূহ

| ইনডেক্স নাম | কলাম | টাইপ |
|-------------|------|------|
| `PRIMARY` | `id` | Primary Key |
| `user_product` | `user_id`, `product_id` | Unique |
| `session_product` | `session_key`, `product_id` | Unique |
| `product_id` | `product_id` | Index |

### নিয়মসমূহ

- `user_id` অথবা `session_key` এর একটি অবশ্যই থাকবে
- একই ইউজার একই প্রোডাক্ট দুইবার যোগ করতে পারবে না (unique constraint)
- `dbDelta()` দিয়ে তৈরি হয়

---

## AJAX এন্ডপয়েন্টসমূহ

সকল AJAX রিকোয়েস্ট `admin-ajax.php` তে পাঠানো হয়।

### 1. Toggle Wishlist Item

```
Action: bizzwishlist_toggle
Method: POST
Parameters:
  - nonce: bizzwishlist_nonce
  - product_id: integer

Response (Success - Added):
{
    "success": true,
    "data": {
        "action": "added",
        "count": 3,
        "message": "Added to wishlist."
    }
}

Response (Success - Removed):
{
    "success": true,
    "data": {
        "action": "removed",
        "count": 2,
        "message": "Removed from wishlist."
    }
}
```

### 2. Remove Item

```
Action: bizzwishlist_remove
Method: POST
Parameters:
  - nonce: bizzwishlist_nonce
  - product_id: integer

Response:
{
    "success": true,
    "data": {
        "count": 2,
        "message": "Removed from wishlist."
    }
}
```

### 3. Add All to Cart

```
Action: bizzwishlist_add_all_to_cart
Method: POST
Parameters:
  - nonce: bizzwishlist_nonce

Response:
{
    "success": true,
    "data": {
        "message": "3 items added to cart.",
        "cart_url": "https://example.com/cart/"
    }
}
```

### 4. Get Count

```
Action: bizzwishlist_get_count
Method: POST
Parameters:
  - nonce: bizzwishlist_nonce

Response:
{
    "success": true,
    "data": {
        "count": 5
    }
}
```

---

## REST API

### Base URL
```
wp-json/bizzwishlist/v1/items
```

### Authentication
REST API শুধুমাত্র লগইন ইউজারদের জন্য। WooCommerce REST API key বা WordPress cookie authentication প্রয়োজন।

### GET /items
Wishlist এর সকল আইটেম পায়।

**Response:**
```json
[
    {
        "id": 1,
        "product_id": 42,
        "name": "T-Shirt",
        "price": "29.99",
        "price_html": "<span class=\"amount\">$29.99</span>",
        "image": "https://example.com/wp-content/uploads/image.jpg",
        "permalink": "https://example.com/product/t-shirt/",
        "created_at": "2024-01-15 10:30:00"
    }
]
```

### POST /items
নতুন আইটেম যোগ করে।

**Body:**
```json
{
    "product_id": 42
}
```

**Response:**
```json
{
    "message": "Product added to wishlist.",
    "product_id": 42,
    "count": 3
}
```

### DELETE /items
আইটেম মুছে ফেলে।

**Body:**
```json
{
    "product_id": 42
}
```

**Response:**
```json
{
    "message": "Product removed from wishlist.",
    "product_id": 42,
    "count": 2
}
```

---

## JavaScript আর্কিটেকচার

### ফাইল: `assets/js/wishlist.js`

JavaScript কোড IIFE (Immediately Invoked Function Expression) Module Pattern ব্যবহার করে লেখা।

```javascript
var BizzWishlist = (function( $ ) {
    // প্রাইভেট ফাংশনসমূহ
    function init() {}
    function bindEvents() {}
    function addToWishlist() {}
    function removeFromWishlist() {}
    function addAllToCart() {}
    function updateCounter() {}
    function updateCounterValue() {}
    function updateButtonsForProduct() {}
    function showNotice() {}

    // পাবলিক API
    return {
        init: init,
        updateCounter: updateCounter
    };
})( jQuery );
```

### মূল ফাংশনসমূহ

| ফাংশন | বিবরণ |
|--------|-------|
| `init()` | ইভেন্ট বাইন্ড করে এবং কাউন্টার আপডেট করে |
| `bindEvents()` | সকল click ইভেন্ট হ্যান্ডলার সেটআপ করে |
| `addToWishlist($button)` | AJAX দিয়ে প্রোডাক্ট টগল করে |
| `removeFromWishlist($button)` | Wishlist পেজ থেকে আইটেম মুছে |
| `addAllToCart($button)` | সকল আইটেম কার্টে যোগ করে |
| `updateCounter()` | AJAX দিয়ে কাউন্ট ফেচ করে |
| `updateCounterValue(count)` | DOM এ কাউন্ট আপডেট করে |
| `updateButtonsForProduct(productId, isAdded)` | সকল বাটনের স্টেট আপডেট |
| `showNotice(message, type)` | টোস্ট নোটিফিকেশন দেখায় |

### Localized ডেটা

`bizzwishlist_params` অবজেক্ট দিয়ে PHP থেকে JS এ ডেটা পাস হয়:

```javascript
bizzwishlist_params = {
    ajax_url: "https://example.com/wp-admin/admin-ajax.php",
    nonce: "abc123",
    wishlist_url: "https://example.com/wishlist/",
    i18n: {
        added: "Added to wishlist",
        removed: "Removed from wishlist",
        error: "Something went wrong.",
        view_wishlist: "View Wishlist",
        adding: "Adding...",
        removing: "Removing...",
        added_to_cart: "All items added to cart"
    }
};
```

---

## টেমপ্লেট সিস্টেম

### ওভাররাইড

থিম থেকে টেমপ্লেট ওভাররাইড করতে চাইলে:

```
yourtheme/bizzwishlist/wishlist-page.php
```

এই ফাইল তৈরি করলে প্লাগিনের ডিফল্ট টেমপ্লেটের বদলে এটি ব্যবহার হবে।

### টেমপ্লেট ভ্যারিয়েবল

`wishlist-page.php` টেমপ্লেটে পাওয়া যায়:

| ভ্যারিয়েবল | টাইপ | বিবরণ |
|-----------|------|-------|
| `$products` | `WC_Product[]` | Wishlist এ থাকা WC_Product অবজেক্টের অ্যারে |

---

## সিকিউরিটি

### প্রয়োগকৃত সুরক্ষা ব্যবস্থা

1. **Direct File Access Protection** — সকল PHP ফাইলে `defined( 'ABSPATH' )` চেক
2. **Nonce Verification** — সকল AJAX রিকোয়েস্টে `check_ajax_referer()` ব্যবহার
3. **Input Sanitization** — `sanitize_text_field()`, `absint()` ব্যবহার
4. **Output Escaping** — `esc_html()`, `esc_attr()`, `esc_url()`, `wp_kses_post()` ব্যবহার
5. **Prepared Statements** — `$wpdb->prepare()` দিয়ে সকল SQL কুয়েরি
6. **Permission Callback** — REST API তে `is_user_logged_in()` চেক
7. **Secure Cookie** — HttpOnly এবং SSL সাপোর্ট সহ কুকি সেট
8. **Uninstall Cleanup** — `WP_UNINSTALL_PLUGIN` চেক সহ ক্লিন ডিলিট

---

## হুক রেফারেন্স

### ব্যবহৃত WordPress হুকসমূহ

| হুক | টাইপ | বিবরণ |
|------|------|-------|
| `plugins_loaded` | Action | প্লাগিন ইনিশিয়ালাইজেশন |
| `init` | Action | সেশন শুরু |
| `admin_init` | Action | Wishlist পেজ তৈরি |
| `wp_enqueue_scripts` | Action | অ্যাসেট লোড |
| `wp_footer` | Action | কাউন্টার রেন্ডার |
| `wp_login` | Action | গেস্ট মার্জ |
| `rest_api_init` | Action | REST API রেজিস্ট্রেশন |
| `admin_notices` | Action | WooCommerce missing notice |
| `woocommerce_after_add_to_cart_button` | Action | সিঙ্গেল পেজ বাটন |
| `woocommerce_loop_add_to_cart_link` | Filter | লুপে বাটন |

---

## ইনস্টলেশন

1. প্লাগিন ফোল্ডারটি `wp-content/plugins/bizzwishlist/` এ আপলোড করুন
2. WordPress Admin → Plugins থেকে "Bizzwishlist" অ্যাক্টিভেট করুন
3. WooCommerce অ্যাক্টিভ থাকতে হবে
4. অ্যাক্টিভেশনের পর স্বয়ংক্রিয়ভাবে:
   - ডাটাবেস টেবিল তৈরি হবে
   - "Wishlist" নামে একটি পেজ তৈরি হবে `[bizzwishlist]` শর্টকোড সহ
5. প্রোডাক্ট পেজে "Add to Wishlist" বাটন দেখা যাবে
