পাতা সাজানো হচ্ছে•••
বিজ্ঞাপনের স্থানহেডারের নিচে
পড়ার সময়মন্তব্যে যান

Wednesday, October 21, 2026

Portfolio Custom Post Type Plugin: WordPress-এ Work Archive বানান

Portfolio Custom Post Type Plugin: WordPress-এ Work Archive বানান

Portfolio item যদি সাধারণ post-এর সঙ্গে মিশে যায়, admin-এ কাজ গোছানো থাকে না এবং URL-ও অর্থপূর্ণ হয় না। Custom Post Type (CPT) আলাদা content model দেয়। এই plugin-এ portfolio type, REST/block editor support, archive এবং public URL /work/ বানাব। এটি metadata বা custom fields নয়—সেগুলি পরে আলাদা করে যোগ করা যায়। পরিবর্তনের আগে staging clone ও backup নিন।

Plugin ফাইল

wp-content/plugins/portfolio-content-type/portfolio-content-type.php তৈরি করে নিচের কোড রাখুন। Main plugin file-এই activation hook দেওয়া হয়েছে, যা গুরুত্বপূর্ণ।

<?php
/**
 * Plugin Name: Portfolio Content Type
 * Description: Adds a Portfolio custom post type.
 * Version: 1.0.0
 */
if ( ! defined( 'ABSPATH' ) ) { exit; }

function pct_register_portfolio() {
    register_post_type( 'portfolio', array(
        'labels' => array(
            'name' => __( 'Portfolios', 'pct' ),
            'singular_name' => __( 'Portfolio', 'pct' ),
            'add_new_item' => __( 'Add Portfolio', 'pct' ),
        ),
        'public' => true,
        'show_in_rest' => true,
        'has_archive' => true,
        'rewrite' => array( 'slug' => 'work', 'with_front' => false ),
        'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt' ),
        'menu_icon' => 'dashicons-portfolio',
    ) );
}
add_action( 'init', 'pct_register_portfolio' );

function pct_activate() {
    pct_register_portfolio();
    flush_rewrite_rules();
}
register_activation_hook( __FILE__, 'pct_activate' );

function pct_deactivate() {
    flush_rewrite_rules();
}
register_deactivation_hook( __FILE__, 'pct_deactivate' );

কেন init এবং show_in_rest?

WordPress-এর init action-এর আগে post type register করা উচিত নয়। তাই callback-টি init-এ যুক্ত করেছি। show_in_rest => true দিলে type REST API-তে আসে এবং block editor ব্যবহার করতে পারে। public ও has_archive front end query এবং archive তৈরি করে। rewrite-এর slug work, তাই একক item-এর URL সাধারণত /work/project-name/ হবে। Post type key ২০ অক্ষরের মধ্যে lowercase রাখা হয়েছে।

Activation flush কেন একবার?

নতুন rewrite structure WordPress-এর permalink rules-এ সঙ্গে সঙ্গে নাও বসতে পারে; ফলে সঠিক post-এ 404 দেখা যায়। Activation routine আগে registration চালিয়ে তারপর flush_rewrite_rules() করে। এই flush প্রত্যেক request-এ করা উচিত নয়—তা অপ্রয়োজনীয় database কাজ তৈরি করে। Deactivation-এ flush রাখা হয়েছে যাতে plugin বন্ধের পর rules পরিষ্কার হয়। Plugin activate করার পর Settings → Permalinks-এ গিয়ে Save করাও manual fallback, কিন্তু code-এর one-time activation যথেষ্ট হওয়া উচিত।

চালানোর ধাপ

Plugins থেকে Portfolio Content Type activate করুন। Admin menu-তে Portfolios আসবে। একটি item-এ title, editor, featured image ও excerpt দিন। তারপর /work/ archive এবং single URL খুলুন। 404 হলে একবার permalink Save করুন এবং permalink structure পরীক্ষা করুন। Block editor না এলে show_in_rest বানানটি ও plugin activation যাচাই করুন।

নিরাপত্তা ও পরের ধাপ

এখানে user input echo করা হয়নি, কারণ WordPress core UI ও templates তা সামলায়। পরে custom template লিখলে title, excerpt, image URL এবং metadata output-এর সময় escape করবেন। taxonomy দরকার হলে register_taxonomy() অথবা register call-এর taxonomies যুক্ত করুন। Capability, custom fields এবং REST exposure বদলালে editorial role ও privacy requirements আগে নির্ধারণ করুন। Uninstall hook-এ data মুছবেন কেবল স্পষ্ট সিদ্ধান্ত থাকলে; deactivation-এর কাজ data delete নয়।

এই ছোট plugin production-ready architecture-এর ভিত্তি, সম্পূর্ণ portfolio design নয়। CSS, archive template এবং structured data আপনার brand ও accessibility পরীক্ষা অনুযায়ী যোগ করুন।

ডেটা মডেল নিয়ে ভাবুন

CPT-এর নাম ভবিষ্যতে বদলানো কঠিন, তাই singular key ছোট ও স্থির রাখুন। Label মানুষের জন্য, key code-এর জন্য—দুটিকে আলাদা ভাবুন। Archive লাগবে না হলে has_archive false করতে পারেন; কিন্তু portfolio collection-এর ক্ষেত্রে archive useful। with_front false দিলে site-এর blog prefix থাকলেও work URL পরিষ্কার থাকে।

REST exposure মানে editor integration এবং API response-এর সুবিধা; এটি private data প্রকাশের অনুমতি নয়। public content-এর ক্ষেত্রেই ব্যবহার করুন। নির্দিষ্ট field REST-এ দিলে permission ও sanitization callback ঠিক করুন। Featured image ব্যবহার করলে theme বা archive template-এ image-এর alt text সঠিকভাবে রক্ষিত হচ্ছে কি না পরীক্ষা করুন।

Rewrite flush ব্যয়বহুল হওয়ায় activation এবং deactivation-এ সীমাবদ্ধ রাখুন। Code update-এ নতুন slug আনলে user-কে deactivate/activate বা permalinks save করার নির্দেশ দিতে পারেন। Activation failure হলে PHP syntax, file path এবং plugin header যাচাই করুন। বাস্তব site-এ migration-এর আগে URL redirect পরিকল্পনা করুন, যাতে পুরোনো portfolio link হারিয়ে না যায়।

ছোট কিন্তু জরুরি যাচাই

কোড বসানোর পরে শুধু editor-এ সবুজ দেখালেই শেষ নয়। আলাদা browser-এ logged-out অবস্থায় page খুলুন, keyboard দিয়ে link ও control চালান, এবং mobile width-এ horizontal scroll হচ্ছে কি না দেখুন। PHP ও WordPress version-এর compatibility নোট করুন। staging-এ error log দেখে warning থাকলে সমাধান করুন; live সাইটে অযথা debug output দেখাবেন না। Backup ফেরত আনার পদ্ধতিও আগে পরীক্ষা করে রাখুন। কোনও third-party plugin একই hook বা class ব্যবহার করছে কি না দেখলে prefix বদলান। ছোট পরিবর্তন একবারে deploy করলে সমস্যা হলে কোন অংশ rollback করতে হবে তা স্পষ্ট থাকে। এই নিয়মগুলি theme, shortcode এবং CPT—তিন ক্ষেত্রেই প্রযোজ্য।

নোট লিখে রাখুন কোন file কোথায় রাখা হয়েছে এবং কোন shortcode বা URL পরীক্ষা করা হয়েছে। এতে ভবিষ্যতের update-এ ভুল কমে এবং অন্য developer দ্রুত দায়িত্ব নিতে পারেন। এই অভ্যাসটি রাখুন।

আরও পড়ুন

সতর্কতা: লাইভ সাইটে বদলানোর আগে staging কপি, পূর্ণ backup এবং rollback পরিকল্পনা রাখুন। কোডটি নিজের WordPress/PHP সংস্করণে পরীক্ষা করুন।

শেয়ার করুন WhatsApp Facebook Telegram X

No comments:

Post a Comment

বিজ্ঞাপনের স্থানপোস্ট ১
বিজ্ঞাপনের স্থানপোস্ট ২
বিজ্ঞাপনের স্থানপোস্ট ৩
About Me
পরিচয়
নাম

নাজমুল ইসলাম

ভূমিকা

Tech Specialist

আরও পরিচিতি
শিক্ষা / পড়াশোনার বিষয়
HSC
কাজ / প্রযুক্তির ক্ষেত্র / দক্ষতা
শহর / জেলা
শখ / আগ্রহ
ব্লগের বিষয় / পাঠকদের জন্য সংক্ষিপ্ত পরিচিতি
ব্যক্তিগত লেখা, ছোট গল্প ও প্রযুক্তি ভাবনা নিয়ে লিখি।
পাবলিক ওয়েবসাইট / সোশ্যাল লিংক
শেষের পরিচিতি
নাজমুল ইসলাম · Tech Specialist

লেখার আর্কাইভ

মাস অনুযায়ী পুরোনো লেখাগুলো খুঁজে নিন।