<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>প্লাগইন টিউটোরিয়াল Archives &bull; Tuts by Mayeenul Islam</title>
	<atom:link href="https://mayeenulislam.github.io/tuts/category/web-development-tuts/wordpress-tuts/plugin-tuts/feed/" rel="self" type="application/rss+xml" />
	<link>https://mayeenulislam.github.io/tuts/category/web-development-tuts/wordpress-tuts/plugin-tuts/</link>
	<description>Technology Tutorials by Mayeenul Islam</description>
	<lastBuildDate>Sat, 21 Jan 2023 14:36:26 +0000</lastBuildDate>
	<language>bn-BD</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.1.1</generator>

<image>
	<url>https://mayeenulislam.github.io/tuts/wp-content/uploads/2015/08/cropped-tuts-nano-32x32.png</url>
	<title>প্লাগইন টিউটোরিয়াল Archives &bull; Tuts by Mayeenul Islam</title>
	<link>https://mayeenulislam.github.io/tuts/category/web-development-tuts/wordpress-tuts/plugin-tuts/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>অ্যাডমিন প্যানেলে নিজস্ব $wp_query&#8217;র জন্য পেজিনেশন</title>
		<link>https://mayeenulislam.github.io/tuts/custom-pagination-admin-panel-wp-query/</link>
					<comments>https://mayeenulislam.github.io/tuts/custom-pagination-admin-panel-wp-query/#respond</comments>
		
		<dc:creator><![CDATA[মঈনুল ইসলাম]]></dc:creator>
		<pubDate>Wed, 01 Jun 2016 13:44:21 +0000</pubDate>
				<category><![CDATA[ওয়ার্ডপ্রেস টিউটোরিয়াল]]></category>
		<category><![CDATA[ওয়েব ডেভলপমেন্ট টিউটোরিয়াল]]></category>
		<category><![CDATA[জ্ঞান-স্তরভিত্তিক টিউটোরিয়াল]]></category>
		<category><![CDATA[থিম টিউটোরিয়াল]]></category>
		<category><![CDATA[প্রাথমিক স্তরের টিউটোরিয়াল]]></category>
		<category><![CDATA[প্লাগইন টিউটোরিয়াল]]></category>
		<guid isPermaLink="false">https://mayeenulislam.github.io/tuts/?p=1027</guid>

					<description><![CDATA[<p> [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/custom-pagination-admin-panel-wp-query/">অ্যাডমিন প্যানেলে নিজস্ব $wp_query&#8217;র জন্য পেজিনেশন</a> appeared first on <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/">Tuts by Mayeenul Islam</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>অ্যাডমিন প্যানেলে একটা পাতায় (menu_page কিংবা submenu_page হতে পারে) একটা <code>WP_Query()</code> চালিয়ে কিছু তথ্য নিয়ে এসেছি। টেবিল আকারে তথ্যগুলো দেখিয়েছিও। এবং পেজিনেশনও করেছি। কিন্তু লক্ষ করলাম, পেজিনেশন কাজ করছে না। অনুসন্ধান করে দেখলাম Christine Cooper-ও একই সমস্যায় পড়েছিলেন এবং তিনি একটা সমাধানও বের করেছেন Milo&#8217;র পরামর্শকে কাজে লাগিয়ে। সমাধানটা দারুণ, এবং আমার সমস্যারও সমাধান দিলো। কিন্তু আরো কিছু বিষয়ের দরকার হয়ে পড়েছিল, তাই আমি সেটাতে আরো কাজ করে আপনাদের জন্য হাজির করলাম একটু গোছানো একটা সমাধান হিসেবে। আপনারা এটাকে আরো গুছিয়ে নিতে পারেন নিজের মতো করে।</p>



<h3>আসলে কী হচ্ছে, কেন হচ্ছে?</h3>



<p>এই ব্যাপারটা আগে জানা দরকার। কপি-পেস্ট সবাই করতে পারে, কোড বুঝে নিয়ে তা ব্যবহার করাটাই প্রকৃত প্রোগ্রামারের কাজ হওয়া উচিত। যা জানা গেল, তা হলো,</p>



<span id="more-1027"></span>



<p> আমাদের পাতায় কোনো <code>$wp_query</code> অবজেক্ট লোড হচ্ছে না। সেকারণে Query argument-ও যোগ হচ্ছে না ইউআরএল-এ। তাই আমাদের বহুল পরিচিত পেজিনেশন সংক্রান্ত কন্ডিশনাল:</p>



<p><code>$paged = get_query_var('paged') ? get_query_var('paged') : 1;</code></p>



<p>এখানে কাজ করছে না, কারণ <code>get_query_var()</code> আসলে কিছু পাচ্ছে না (কুয়েরি আর্গুমেন্ট তো যোগই হচ্ছে না, পাবে কিভাবে)। সেজন্য ইউআরএল-এ <code>&amp;paged</code> প্যারামিটারের ভ্যালু পাবার জন্য আমরা <code>$_GET</code> মেথড ব্যবহার করতে বাধ্য হচ্ছি, যেমনটা Milo শিখালেন।</p>



<p>এবারে সব পেজিনেশনের জন্য যেমন কিছু ছোটখাটো বিষয় বানিয়ে নেয়া লাগে এখানেও তাই করা হচ্ছে, আমরা বলে নিচ্ছি:</p>



<p><code>$nextpage = $paged + 1;</code></p>



<p>আর আমরা আগের পাতা দেখানোর জন্য তৈরি করেছি:</p>



<p><code>$prevpage = max( ($paged - 1), 0 );</code></p>



<p>খুব সোজা, পরের পাতা মানে ১ যোগ, আর আগের পাতা মানে ১ বিয়োগ। কিন্তু এভাবে যাতে নেগেটিভ মানে না চলে যায়, তাই আমরা পিএইচপি&#8217;র <code>max()</code> ফাংশন ব্যবহার করেছি।</p>



<p>ধরা যাক আমাদের কুয়েরিটা এরকম:</p>



<figure class="wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler"><div class="wp-block-embed__wrapper">
View the code on <a href="https://gist.github.com/mayeenulislam/2b7fd2d092bca527e521eb51079dfc72">Gist</a>.
</div></figure>



<p>এখানে আমরা posts_per_page প্যারামিটারে ওয়ার্ডপ্রেসের নিজস্ব Settings &gt; Reading-এ সেট করা পাতা-প্রতি পোস্টের সংখ্যা ব্যবহার করছি। আমরা তাই বারবার কুয়েরি না করে ফাংশনেও এই সংখ্যাটা নিয়ে নিচ্ছি। যদি আপনার ক্ষেত্রে ব্যতিক্রম কিছু থেকে থাকে, আপনি চাইলে পেজিনেশন <code>$posts_per_page = 5</code> এরকম করে আপনার ভ্যালুও পাস করে দিতে পারেন। যদি ফাংশনে <code>$items_per_page</code>-এ কোনো ভ্যালু না দেয়া হয়, তাহলে আমরা ওয়ার্ডপ্রেসের ডিফল্টটা গ্রহণ করেছি ফলব্যাক হিসেবে। লক্ষ রাখুন, <code>$paged</code> প্যারামিটারে <code>get_query_var()</code>-এর বদলে <code>$_GET</code> মেথড ব্যবহার করেছি।</p>



<p>এবারে এই হচ্ছে আমাদের পেজিনেশন ফাংশন:</p>



<figure class="wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler"><div class="wp-block-embed__wrapper">
View the code on <a href="https://gist.github.com/mayeenulislam/2b7fd2d092bca527e521eb51079dfc72">Gist</a>.
</div></figure>



<p>আর, এই ফাংশনকে আমরা এভাবে ব্যবহার করতে পারবো:</p>



<figure class="wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler"><div class="wp-block-embed__wrapper">
View the code on <a href="https://gist.github.com/mayeenulislam/2b7fd2d092bca527e521eb51079dfc72">Gist</a>.
</div></figure>



<p>এখানে আমাদের মতো করে আমরা পেজিনেশন প্যারামিটারগুলো পাঠাতে পারছি। এবং সর্বোপরি, আমরা কততম পাতায় আছি, Next Page, Previous Page, Last Page, First Page ইত্যাদি বোতামও পাচ্ছি, প্যাজিনেশনকে প্রয়োজনমতো ব্যবহার করার জন্য।</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2016/06/admin-page-wp-query-custom-pagination-tutsnano.png"><img decoding="async" width="1024" height="435" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2016/06/admin-page-wp-query-custom-pagination-tutsnano-1024x435.png" alt="অ্যাডমিন পাতায় $wp_query'র জন্য নিজস্ব পেজিনেশন" class="wp-image-1041" srcset="https://mayeenulislam.github.io/tuts/wp-content/uploads/2016/06/admin-page-wp-query-custom-pagination-tutsnano-1024x435.png 1024w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2016/06/admin-page-wp-query-custom-pagination-tutsnano-300x127.png 300w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2016/06/admin-page-wp-query-custom-pagination-tutsnano-768x326.png 768w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2016/06/admin-page-wp-query-custom-pagination-tutsnano.png 1111w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">অ্যাডমিন পাতায় $wp_query&#8217;র জন্য নিজস্ব পেজিনেশন</figcaption></figure></div>


<p>সুতরাং, বুঝে নিয়ে ব্যবহার করতে নেই মানা। কোনো ভুল থাকলে জানানোর অনুরোধ। আর ভালো লাগলো কিনা, কিংবা আসল কথা, কাজে লাগলো কিনা, নিচে মন্তব্য করে জানাতে ভুলবেন না। আর কাজে লাগলে, শেয়ার করে সবাইকে জানাতেও ভুলবেন না।</p>



<p><strong>মঈনুল ইসলাম</strong><br><img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a rel="noreferrer noopener" href="https://mayeenulislam.github.io/" target="_blank">mayeenulislam.github.io</a></p>



<p><span style="color: #999999;">_____________________________</span></p>



<h3>কৃতজ্ঞতা</h3>



<p>কৃতজ্ঞতা জানাচ্ছি <span class="pl-s1"><span class="pl-c">Christine Cooper</span></span> এবং Milo-কে, তাঁদের দেয়া <a href="http://wordpress.stackexchange.com/a/175649/22728">পরামর্শ আর স্নিপেটের^</a> উপর ভিত্তি করে এখানে একটা কার্যোপযোগী মার্জিত সংস্করণ যোগ করা হয়েছে মাত্র।</p>
<p>The post <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/custom-pagination-admin-panel-wp-query/">অ্যাডমিন প্যানেলে নিজস্ব $wp_query&#8217;র জন্য পেজিনেশন</a> appeared first on <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/">Tuts by Mayeenul Islam</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mayeenulislam.github.io/tuts/custom-pagination-admin-panel-wp-query/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ওয়ার্ডপ্রেস মাল্টিসাইটে নিজস্ব সাইনআপ পাতা তৈরির কৌশল</title>
		<link>https://mayeenulislam.github.io/tuts/custom-signup-wordpress-multisite/</link>
					<comments>https://mayeenulislam.github.io/tuts/custom-signup-wordpress-multisite/#comments</comments>
		
		<dc:creator><![CDATA[মঈনুল ইসলাম]]></dc:creator>
		<pubDate>Tue, 01 Mar 2016 17:14:57 +0000</pubDate>
				<category><![CDATA[ওয়ার্ডপ্রেস টিউটোরিয়াল]]></category>
		<category><![CDATA[ওয়েব ডেভলপমেন্ট টিউটোরিয়াল]]></category>
		<category><![CDATA[জ্ঞান-স্তরভিত্তিক টিউটোরিয়াল]]></category>
		<category><![CDATA[থিম টিউটোরিয়াল]]></category>
		<category><![CDATA[প্লাগইন টিউটোরিয়াল]]></category>
		<category><![CDATA[মাধ্যমিক স্তরের টিউটোরিয়াল]]></category>
		<category><![CDATA[মাল্টিসাইট টিউটোরিয়াল]]></category>
		<guid isPermaLink="false">https://mayeenulislam.github.io/tuts/?p=894</guid>

					<description><![CDATA[<p> [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/custom-signup-wordpress-multisite/">ওয়ার্ডপ্রেস মাল্টিসাইটে নিজস্ব সাইনআপ পাতা তৈরির কৌশল</a> appeared first on <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/">Tuts by Mayeenul Islam</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="has-text-align-center has-background" style="background-color:#c2ecdb">A brief <strong>English version </strong>of this article is available at this <a rel="noreferrer noopener" href="http://wordpress.stackexchange.com/q/219271/22728" target="_blank">WordPress Development StackExchange thread</a></p>



<p>ওয়ার্ডপ্রেসে আমরা সচরাচর একক সাইট পরিচালনা করি, অর্থাৎ সেখানে একটা ইন্সটলেশনে একটাই সাইট চলে। কিন্তু ওয়ার্ডপ্রেস তার একটা ইন্সটলেশনে একাধিক সাইট চালানোরও একটা সুযোগ দিয়ে রেখেছে, আর তা হলো ওয়ার্ডপ্রেস মাল্টিসাইট। প্রথমদিকে ওয়ার্ডপ্রেস মাল্টিসাইট WordPress MU নামে কাজ শুরু করলেও তা পরবর্তিতে ওয়ার্ডপ্রেস কোর-এ অন্তর্ভুক্ত করা হয়। এবং বলা যায়, সবচেয়ে বড় ওয়ার্ডপ্রেস মাল্টিসাইট ইন্সটলেশন হচ্ছে WordPress.com, যেখানে আপনি চাইলেই বিনামূল্যে একটা ব্লগ খুলে ফেলতে পারেন।</p>



<p>ওয়ার্ডপ্রেস মাল্টিসাইট তুলনামূলক কম জনপ্রিয় এবং এর রিসোর্সও কম পাওয়া যায়, কারণ এর ব্যবহারকারী কম। আবার, যেহেতু মাল্টিসাইটের আর্কিটেকচার ভিন্ন, তাই অনেক প্লাগইনই ওয়ার্ডপ্রেস মাল্টিসাইটে চলে না। কিংবা হয়তো&nbsp;অধিকাংশ মানুষই এই ভিন্ন আর্কিটেকচারের সুযোগটা নিতে জানেন না। আপনার একাধিক ভাষায় ওয়েবসাইট দরকার, সাবডোমেইন কিংবা সাবফোল্ডার করে সেখানে একাধিক ওয়ার্ডপ্রেস ইন্সটল করেই আপনি কাজ সেরে ফেলছেন &#8211; এরকম ঘটনা অহরহ ঘটে। কিন্তু যিনি এই সুবিধাটা সম্পর্কে ওয়াকিবহাল, এবং চ্যালেঞ্জটা নিতে আগ্রহী, তিনি আসলে সুযোগটা নিতে চান, এবং তখনই ওয়ার্ডপ্রেসের মাল্টিসাইট বা একই ওয়ার্ডপ্রেসে একাধিক আলাদা সত্ত্বার সাইটের জন্ম হয়।</p>



<p>যাহোক, এবারে মূল কথায় আসা যাক-</p>



<h3>মাল্টিসাইটের রেজিস্ট্রেশন পাতা</h3>



<p>কিন্তু ওয়ার্ডপ্রেসে মাল্টিসাইট ইন্সটল করা হলে খুব বিরক্তি উদ্রেক করে যে ব্যাপারটা, তা হলো এর ব্যবহারকারী রেজিস্ট্রেশন পাতাটা। সাধারণত ওয়ার্ডপ্রেস সিঙ্গেল সাইটের রেজিস্ট্রেশন পাতাটা পাওয়া যায় এই ঠিকানায়:</p>



<pre class="wp-block-preformatted">https://example.com/wp-login.php?action=register</pre>



<p>আপনি যদি একটা ওয়ার্ডপ্রেস ইন্সটলেশন ফোল্ডার খুলে দেখেন, তাহলে রুট ফোল্ডারেই (অর্থাৎ যেখানে সাধারণত <code>wp-config.php</code> ফাইলটা থাকে) <code>wp-login.php</code> নামে একটা ফাইল দেখবেন, এটাই সেটা।</p>



<p>কিন্তু ওয়ার্ডপ্রেস মাল্টিসাইট এই পাতা থেকে রেজিস্ট্রেশন করে না। মাল্টিসাইট ইন্সটল করা হলে তখন রেজিস্ট্রেশন পাতা হয় এই ঠিকানায়:</p>



<pre class="wp-block-preformatted">https://example.com/wp-signup.php</pre>



<p>যেখানে এইমাত্র <code>wp-login.php</code> ফাইলটা দেখেছেন, সেখানেই আপনি <code>wp-signup.php</code> ফাইলটাও পাবেন। যখনই আপনি &#8220;নিবন্ধন&#8221; (Register/ Sign up) লেখা কোনো লিংকে ক্লিক করবেন, ওয়ার্ডপ্রেস মাল্টিসাইট আপনাকে এই সাদামাটা পাতাটায় নিয়ে আসবে, যা অনেকেই পছন্দ করেন না।</p>



<p>এই পাতাটা অপছন্দ করার কারণগুলোর মধ্যে অন্যতম হলো এর মধ্যে কোনো স্টাইল করা থাকে না। আর দ্বিতীয়ত হলো, এই পাতায় যা যা ত্রুটি কিংবা সফলতার বার্তা দেখায়, সেগুলোকে ফিল্টার করে বদলে নেয়া যায় না। এজন্যই বিকল্প খোঁজা&#8230;</p>



<p>আজকে আমরা এই পাতাটিকে পাল্টে ফেলে নিজস্ব একটি সাইনআপ পাতা এর জায়গায় বসিয়ে দিতে হয় কিভাবে, তা-ই দেখবো। মনে রাখতে হবে, এজন্য আমরা যে কাজগুলো করছি না:</p>



<ul>
<li>আমরা <code>.htaccess</code> ফাইলে কোনো হাত দিচ্ছি না,</li>



<li>আমরা আলাদা কোনো প্লাগইন ব্যবহার করছি না, এবং</li>



<li>অতি অবশ্যই আমরা ওয়ার্ডপ্রেসের কোনো কোর ফাইলে হাত দিচ্ছি না</li>
</ul>



<span id="more-894"></span>



<h3>নিজস্ব সাইনআপ পাতা</h3>



<p>এই জ্ঞানার্জনে প্রাথমিকভাবে সহায়তা নিয়েছিলাম নিচের দুটি পাতার:</p>



<ol>
<li><a href="https://www.chriswiegman.com/2010/02/using-a-custom-wp-signup-page-with-wordpress-mu/" target="_blank" rel="noopener">Using a Custom wp-signup Page With WordPress MU^</a> &#8211; <em>Chris Wiegman</em></li>



<li><a href="https://wordpress.org/support/topic/individual-mu-registration-page-possible?replies=7#post-1711143" target="_blank" rel="noopener">individual MU Registration Page possible?^</a> &#8211; <em>David Sader</em></li>
</ol>



<p>কিন্তু এই দুটো রিসোর্স সম্পূর্ণ ছিল না, এবং কোনো কোনো ক্ষেত্রে তাতে ত্রুটি (bug) ছিল। তাই এসময় আমাকে আন্তরিকতার সাথে সহায়তা করেছেন কিংবা সত্যি বলতে কি পথ দেখিয়েছেন জার্মানির <a href="https://twitter.com/thefuxia" target="_blank" rel="noopener">@thefuxia</a> (Thomas Scholz) এবং অচেনা&nbsp;majick।</p>



<p>এই আলোচনার আগে ধরে নিচ্ছি আপনাদের ওয়ার্ডপ্রেস ইন্সটলেশনে:</p>



<ul>
<li>মাল্টিসাইট ইন্সটল করা রয়েছে,</li>



<li>সার্ভারে mod_rewrite মড্যুল সক্রিয় আছে, এবং</li>



<li>আপনার ওয়ার্ডপ্রেসের পার্মালিংক ডিফল্ট বা পূর্বনির্ধারিত পার্মালিক নয়</li>
</ul>



<h4><strong>ধাপ ১: নিজস্ব সাইনআপ পাতাটা তৈরি</strong></h4>



<p>চাকা একবার আবিষ্কার হয়ে গেছে, কেন আবার আবিষ্কার করবো? তাই আমরা ওয়ার্ডপ্রেস কোর থেকে <code>wp-signup.php</code> পাতাটা কপি করে আমাদের থিমের (কিংবা চাইল্ড থিমের) ভিতরে রাখি। এটার নামটা পাল্টে ফেলি যাতে স্বকীয়তা প্রকাশ পায়, ধরা যাক দিলাম: <code>signup.php</code>।</p>



<p>এবারে ফাইলটা কোনো টেক্সট এডিটরে খুলি: এই ফাইলে উপরের দিকে দুটো ফাইল লোড করা আছে, লাইন দুটো হলো:</p>



<pre class="wp-block-preformatted">require( dirname(__FILE__) . '/wp-load.php' );</pre>



<p>এবং</p>



<pre class="wp-block-preformatted">require( dirname( __FILE__ ) . '/wp-blog-header.php' );</pre>



<p>এই লাইন দুটো বন্ধ করে দেয়া যাক, মানে কমেন্ট আউট করে দেই। ফলে লাইন দুটো হয়ে গেল:</p>



<pre class="wp-block-preformatted">// require( dirname(__FILE__) . '/wp-load.php' );</pre>



<p>এবং</p>



<pre class="wp-block-preformatted">// require( dirname( __FILE__ ) . '/wp-blog-header.php' );</pre>



<p>কেন বন্ধ করলাম? &#8230;কারণ হলো, এতক্ষণ <code>wp-signup.php</code> ফাইলটা রুট থেকে লোড হচ্ছিল (থিম লোড হবারও আগে), তখনও ওয়ার্ডপ্রেসের কোনো ফাংশন লোড হয়নি। আর এখন এটাকে থিমের ভিতরে নিয়ে আসার মানে হচ্ছে, থিম যখন লোড হবে তখন এটার অস্তিত্ব প্রকাশ পাবে, এর আগে না। আর থিম যখন লোড হবে তখন ওয়ার্ডপ্রেসের <code>wp-load.php</code> আর <code>wp-blog-header.php</code> দুটো ফাইলই লোড হয়ে যাবে। সুতরাং আবারও ফাইল দুটো লোড করা মানেই পুণর্বার কাজ করা (repeat), এবং কখনও Repeat করা যাবে না (DRY &#8211; Don&#8217;t Repeat Yourself)।</p>



<p>এই ফাইলের আরো দুটো লাইন আছে:</p>



<pre class="wp-block-preformatted">get_header( 'wp-signup' );</pre>



<p>এবং, একেবারে নিচে:</p>



<pre class="wp-block-preformatted">get_footer( 'wp-signup' );</pre>



<p>এই লাইন দুটোকে বদলে আমাদের থিমের হেডার কিংবা নিজস্ব কোনো ব্যতিক্রম হেডার কল করে দেয়া যেতে পারে। আমি আমার থিমে, সাইনআপ পাতার জন্য আলাদা একটি হেডার বানিয়েছি (<code>header-null.php</code>), তাই আমি সেটা যোগ করেছি এপর্যায়ে। তাই, আমার ক্ষেত্রে ব্যাপারটা ছিল:</p>



<pre class="wp-block-preformatted">get_header( 'null' ); //instead of get_header( 'wp-signup' );</pre>



<p>এবং</p>



<pre class="wp-block-preformatted">get_footer( 'null' ); //instead of get_footer( 'wp-signup' );</pre>



<p>ব্যস, আমাদের নিজস্ব সাইনআপ পাতা কিন্তু প্রস্তুত। এবারে এই ফাইলটাকে জায়গামতো কল করিয়ে দিলেই <em>কেল্লা ফতে</em>।</p>



<h4><strong>ধাপ ২: এমইউ প্লাগইন তৈরি</strong></h4>



<p><a href="https://codex.wordpress.org/Must_Use_Plugins" target="_blank" rel="noopener">MU Plugin</a>, এতক্ষণে বুঝে গেছি নিশ্চয়ই, এটা মাল্টিসাইটের সাথে সম্পর্কিত। আসলে এটা মাল্টিসাইটের সাথে সম্পর্কিত ছিল। পরবর্তিতে এর <a href="https://core.trac.wordpress.org/changeset/10737" target="_blank" rel="noopener">প্রয়োজন এখন আর তেমন একটা হয় না</a> বললেই চলে। আর এখানে MU মানে Multisite না, বরং Must Use, অর্থাৎ মাল্টিসাইটের সকল সাইটে আবশ্যকীয়ভাবে এই কোডগুলো লোড করার জন্যই MU Plugin ব্যবহার করা হতো। &#8230;সুতরাং, এখানে আমরা যে কোডগুলো ব্যবহার করবো, সেগুলো নিজস্ব কোনো সাধারণ প্লাগইনে বসিয়ে নিলেও কাজ করবে।</p>



<p>আমরা আমাদের মাল্টিসাইট ইন্সটলেশনের <code>wp-content/</code> ডিরেক্টরির (ফোল্ডার) ভিতরে একটা ডিরেক্টরি তৈরি করি, নাম হবে &#8216;<code>mu-plugins</code>&#8216; (যদি আমরা মাস্ট ইউয প্লাগইনের পাথ বদলে <em>না</em> থাকি)। এবারে এই ডিরেক্টরির ভিতরে একটা ফাইল তৈরি করি, যেকোনো নাম দিয়ে, ধরা যাক দিলাম, <code>mu-signup.php</code>। এবারে এই ফাইলটার মধ্যে লিখি:</p>



<figure class="wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler"><div class="wp-block-embed__wrapper">
View the code on <a href="https://gist.github.com/mayeenulislam/3e332efd44a3388034c3">Gist</a>.
</div></figure>



<p>কোডগুলো বুঝে নেয়া যাক, প্রথম ফাংশনটা <code>wp_signup_location</code> ফিল্টার হুকে হুক করে আসলে যা করছে, তা হলো, ওয়ার্ডপ্রেসের নিজস্ব সাইনআপের যে ইউআরএল প্রথমে আমরা বলেছিলাম, সেটাকে বদলে, আমাদের নিজস্ব যে পাথে আমরা আমাদের সাইনআপ পাতা তৈরি করতে যাচ্ছি, সেখানে ঘুরিয়ে দিবো। যেমন: লগইন পাতার নিচে যে <kbd>Register</kbd> লিংকটা আছে, সেখানে ক্লিক করলে যেন সে আমাদের নিজস্ব সাইনআপ পাতায় নিয়ে আসে, সেটা তাকে বলে দিলাম। এটা আমরা লিখেছি 12 নম্বর লাইনে যে, ওয়ার্ডপ্রেস নেটওয়ার্ক সাইটের ইউআরএল-এর পরেই signup বসালে ইউআরএল যা হবে, সেটাকেই আমাদের মাল্টিসাইটের সাইনআপ ইউআরএল হিসেবে বুঝে নিবে:</p>



<pre class="wp-block-preformatted">https://example.com/signup</pre>



<p>আর দ্বিতীয় ফাংশনটা হচ্ছে একটা <code>wp_redirect()</code>। কেউ যদি মাল্টিসাইটের নিজস্ব সাইনআপ ইউআরএল পাতার লিংক (<code>/wp-signup.php</code>) টাইপ করে, তাকেও যেন ঐ পাতা থেকে সরিয়ে আমাদের নিজস্ব সাইনআপ পাতায় (<code>/signup</code>) নিয়ে আসে। অনেকেই এই কাজটুকু <code>.htaccess</code> ফাইল এডিট করে, করে থাকেন (যেমন ক্রিস-এর প্রথম লিংকটাতে দেখতে পাবেন)। কিন্তু আমরা এই কাজটার জন্য <code>.htaccess</code> এডিট করার ঝামেলায় যাইনি।</p>



<p>অর্থাৎ, এপর্যন্ত করা হয়ে গেলে, লোকজন, ওয়ার্ডপ্রেসের পূর্বনির্ধারিত সাইনআপ পাতা না দেখে, আমাদের নিজস্ব ইউআরএল-এ চলে আসবে &#8211; এতটুকু আমরা করে ফেলেছি। (<img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f44f.png" alt="👏" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <em>হাততালি</em>)</p>



<p>বাকিটুকু আমরা দুভাবে করতে পারি:</p>



<ol>
<li>সহজ পদ্ধতি: পেজ টেমপ্লেট তৈরি করে</li>



<li>ঘাঁটাঘাঁটি পদ্ধতি: রিরাইট এন্ডপয়েন্ট তৈরি করে</li>
</ol>



<p>পছন্দটা আপনার, আপনি কিভাবে করতে চান&#8230; তবে দুটোই করা যাবে না। যেকোনো একটা।</p>



<h4><strong>ধাপ ৩: সহজ পদ্ধতি: পেজ টেমপ্লেট তৈরি:</strong></h4>



<p>আমরা থিমের ভিতরে যে <code>signup.php</code> ফাইলটা [ওয়ার্ডপ্রেস কোর থেকে কপি করে] বানিয়েছিলাম, সেটা টেক্সট এডিটরে খুলে এক্কেবারে উপরে আমরা কিছু কথা লিখি, যাতে এটা একটা <a href="https://developer.wordpress.org/themes/template-files-section/page-template-files/#creating-custom-page-templates-for-global-use" target="_blank" rel="noopener">পেজ টেমপ্লেট^</a> হয়ে যায়:</p>



<pre class="wp-block-preformatted">&lt;?php
/**
* Template name: tuts nano signup
*/</pre>



<p>পাতার এক্কেবারে উপরে একটা পিএইচপি শুরুর ট্যাগ দিয়ে শুরু হয়েছে, সেটার ঠিক পরেই এই কথাটা লিখে দেয়া যাক। আপনাদের যা ইচ্ছা নাম দিতে পারেন, তবে বোধগম্য এবং অবিরোধপূর্ণ নাম দিবেন আশা করি। সংরক্ষণ করুন ফাইলটা।</p>



<p>এবারে, ওয়ার্ডপ্রেসের অ্যাডমিন প্যানেলে একটা পাতা তৈরি করি, যার নাম দিই Signup এবং slug হিসেবে দিই <code>signup</code>। এবারে পেজ টেমপ্লেট হিসেবে মাত্র তৈরি করা tuts nano signup [কিংবা আপনাদের দেয়া নামের] টেমপ্লেটটা বাছাই করে দিন। পাতাটা সংরক্ষণ করুন।</p>



<p>কাজ শেষ। 🙂</p>



<p><strong>ধাপ ৩: ঘাঁটাঘাঁটি পদ্ধতি: রিরাইট এন্ডপয়েন্ট তৈরি:</strong></p>



<p>বলেছি যেকোনো একটা পদ্ধতি করতে। যদি &#8216;সহজ পদ্ধতি&#8217; করে ফেলেন, তাহলে আগের অবস্থায় ফেরত যান, যা করেছেন মুছে ফেলুন, এবারে এই পদ্ধতিতে করে দেখা যাক:</p>



<p>একাজে আমাদেরকে সহায়তা করতে পারবে এই ডিবাগিং প্লাগইনটি:</p>



<ul>
<li><a href="https://wordpress.org/plugins/rewrite-rules-inspector/" target="_blank" rel="noopener"><strong>Rewrite Rules Inspector</strong>^</a> &#8211; WordPress.org Plugins, <em>Daniel Bachhuber</em> and his team</li>
</ul>



<p>ইন্সটল করে সক্রিয় করে নেয়া যেতে পারে। না করলেও ক্ষতি নেই। কিন্তু কী ঘটছে, কিভাবে ঘটছে, দেখলেই না শেখা হয়&#8230;। এবারে আমাদের থিমের <code>functions.php</code>-তে এই কোডগুলো বসিয়ে নেয়া যাক:</p>



<figure class="wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler"><div class="wp-block-embed__wrapper">
View the code on <a href="https://gist.github.com/mayeenulislam/3e332efd44a3388034c3">Gist</a>.
</div></figure>



<p>প্রথম ফাংশনটা দিয়ে আমরা একটা এন্ডপয়েন্ট যোগ করছি, মানে ইউআরএল-এর শেষে একটা লেজ যোগ করছি। এই লেজটাতো হাতে লিখেই যোগ করা যায়, যেমন: <code>example.com/kauwa</code>; হ্যা, ঠিক, কিন্তু আসলে এই লেজ, সেই লেজ না। এই লেজটা ডায়নামিকভাবে প্রোগ্রামের মাধ্যমে কাজ করবে &#8211; ওয়ার্ডপ্রেসের কাছে এর একটা অর্থ থাকবে। আমরা যে লেজটা যোগ করেছি, তা হলো: signup। অর্থাৎ, আমাদের ডোমেইন নামের শেষে লেজটা যোগ হয়ে ডায়নামিক ইউআরএলটা হবে:</p>



<pre class="wp-block-preformatted">https://example.com/signup</pre>



<p>যেহেতু রিরাইট র&#x200d;্যুল ফ্লাশ না করলে নতুন মান নিবে না, তাই হাসিন হায়দার&nbsp;ভাইয়ের অনুকরণে, আমরা একবার, হ্যা, একবার রিরাইট র&#x200d;্যুলটা ফ্লাশ করেছি। এটা ম্যানুয়ালিও করা যায়, সেটা পরে বলছি।</p>



<p>এবারে দ্বিতীয় ফাংশনটা দিয়ে আমরা বলে দিচ্ছি যে, যখন তোমার ইউআরএল থেকে query_variable হিসেবে &#8216;signup&#8217; পাবে, তখন যে টেমপ্লেট তুমি দেখাবে বলে ঠিক করেছিলে, সেটার বদলে তুমি আমাদের বলে দেয়া টেমপ্লেটটা দেখাবে। এবং আমরা, ঐ যে, প্রথমে কোর থেকে কপি করে ফাইলটা তৈরি করেছিলাম, সেই ফাইলটার পাথ, ফাংশনটার ভিতরে দেখিয়ে দিয়েছি।</p>



<p>ব্যস, কাজ শেষ। আমরা, পূর্বনির্ধারিত পাতা থেকে ব্যবহারকারীদের আমাদের পাতায় রিডিরেক্ট করে নিয়ে এসেছি। ওয়ার্ডপ্রেসের নিবন্ধন ইউআরএল বদলে দিয়েছি। আমাদের কাঙ্ক্ষিত প্যারামিটার (লেজ) যোগ করেছি। এবং সেই লেজে গেলে যে আমাদের তৈরি করা ফাইলটা দেখাবে তাও বলে দিয়েছি। সুতরাং এবারে পরীক্ষা করে দেখাই যায়, কী করেছি আমরা। ব্রাউযারে টাইপ করুন আপনার নির্ধারিত সাইনআপ পাতার ইউআরএল:</p>



<pre class="wp-block-preformatted">https://example.com/signup</pre>



<p>দুঃখিত! কাজ করছে না। হয় 404 টেমপ্লেট দেখাচ্ছে, নয়তো প্রথম পাতায় নিয়ে গেছে। কেন হচ্ছে এমন? সব তো ঠিকই আছে। আপনি ঠিকই <code>/signup</code> লেজও যোগ করেছেন।</p>



<p><span style="text-decoration: underline;"><strong>রিরাইট র&#x200d;্যুল্‌স ফ্ল্যাশ করা:</strong></span> এই অবস্থায় দেখা না যাওয়ার একটা কারণ হতে পারে আপনার রিরাইট র&#x200d;্যুল্‌স ফ্লাশ করা হয়নি। এজন্য যেটা করতে হবে, যে প্লাগইনটা ইন্সটল করতে বলেছিলাম, সেটাতে গেলেই উপরে ডানে <kbd>Flush Rules</kbd> বোতাম চেপে কাজটা করা যায়। আর যদি প্লাগইনটা ইন্সটল না করে থাকেন, সেক্ষেত্রে Settings » Permalinks-এ গিয়ে কোনো পরিবর্তন না করে একবার সংরক্ষণ বোতাম চাপুন।</p>



<p>তবু দেখা যাচ্ছে না, তাই না? লেজের পরে আরেকটা লেজ লাগালে কী হয়, দেখি তো? লিখলাম: <code>example.com/signup/asd</code>, এবং নিমিষেই আমাদের কাঙ্ক্ষিত টেমপ্লেটটা লোড হয়ে গেল।</p>



<p>সমস্যাটা আসলে অন্য জায়গায়, এবং একটা সমস্যা ঠিকই আছে।</p>



<p><span style="text-decoration: underline;"><strong>ঐচ্ছিক:</strong></span> পরীক্ষা করার জন্য, দ্বিতীয় ফাংশনটার ভিতরে <code>if(!is_admin()) {</code> লেখাটার ঠিক আগে লিখুন: <code>echo get_query_var('signup');</code> এবং ফাইলটা সংরক্ষণ করে এসে রিফ্রেশ করে দেখুন তো কিছু দেখা যায় কিনা ব্রাউযারে। টেমপ্লেটটার উপরে asd লেখাটা দেখাচ্ছে। এর মানে, <code>?signup=asd</code> ভ্যালুটা দেখাচ্ছে। যদি আমরা <code>asd</code> মুছে ফেলি, তাহলে আবারও 404 কিংবা প্রথম পাতা দেখাচ্ছে এবং কোনো লেখা ইকো হচ্ছে না। অর্থাৎ query_variable-টা কোনো মান পাচ্ছে না। <em>echo &#8230;</em> লেখাটুকু মুছে ফেলি, আমাদের পরীক্ষা শেষ।</p>



<p>কারণটা হলো:</p>



<blockquote class="wp-block-quote">
<p>যেহেতু <code>add_rewrite_endpoint()</code> তার প্যারামিটারের মান প্রত্যাশা করছে, অথচ আমরা কোনো মান দিচ্ছি না, সে আসলে <code>null</code>&nbsp;মানকে&nbsp;<code>false</code> হিসেবে ধরে নিচ্ছে। অবস্থাটা দাঁড়াচ্ছে: <code>example.com?signup=false</code>। এমতাবস্থায় কোনো টেমপ্লেট লোড করার প্রশ্নই উঠে না। এই সমস্যাটার সমাধান করতে আমাদেরকে <code>request</code>-এ হুক করে ওর জন্য একটা মান সেট করে দিয়ে আসতে হবে। (<a href="https://www.pmg.com/blog/a-mostly-complete-guide-to-the-wordpress-rewrite-api/" target="_blank" rel="noopener">ব্যাখ্যার উৎস^</a>)</p>
</blockquote>



<p>Thomas Scholz বলছেন, এটা ওয়ার্ডপ্রেসের রিরাইট এপিআই-এর একটা ত্রুটি (bug)।</p>



<p>যাহোক, এর সমাধানও আছে। সমাধান, যেমনটা ক্রিস্টোফার ড্যাভিস বলেছেন, এর সমাধান করতে নিচের কোডটুকু <code>functions.php</code>-তে যোগ করে নিতে হবে, এতে মানটা আর <code>false</code> আসবে না, বরং <code>true</code> আসবে:</p>



<figure class="wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler"><div class="wp-block-embed__wrapper">
View the code on <a href="https://gist.github.com/mayeenulislam/3e332efd44a3388034c3">Gist</a>.
</div></figure>



<p>&#8230;এবং আমাদের কাঙ্ক্ষিত টেমপ্লেটও লোড হবে।</p>



<h4><strong>ধাপ ৪: বার্তাগুলো দেখানোর ব্যবস্থা</strong></h4>



<p>সব সুন্দর মতো হয়ে গেলেও আরো একটা ছোট্ট কাজ বাকি আছে। আপনি যখন এই সাইনআপ ফর্মে কোনো কিছু না লিখে <kbd>পরবর্তি</kbd> (<kbd>next</kbd>)&nbsp;বোতামে ক্লিক করবেন, তখন কিন্তু সাইনআপও হবে না আবার কোনো ত্রুটি বার্তাও দেখাবে না। এর কারণ, ফর্মটা সাবমিট হচ্ছে <code>wp-signup.php</code> পাতায়, আর সেখানেই ত্রুটি বার্তা দেখাচ্ছে, আর আমরা সেখান থেকে <code>wp_redirect()</code> চালিয়ে ব্যবহারকারীকে আমাদের পাতায় ঘুরিয়ে আনছি, ফলে ত্রুটি বার্তাগুলো হারিয়ে যাচ্ছে।</p>



<p>খুব ছোট্ট একটা ফিক্স দরকার। আমরা যে <code>signup.php</code> ফাইলটা বানিয়েছিলাম নিজের মতো করে, সেই ফাইলটাতে থাকা তিনটা <code>&lt;form&gt;</code> ট্যাগের সাবমিশন অ্যাকশন অংশটা বদলে দিতে হবে। ফাইলের মধ্যে অনুসন্ধান করতে পারেন:&nbsp;<code>action="wp-signup.php"</code> লিখে। তাহলে ফর্ম ট্যাগগুলোর <code>action="wp-signup.php"</code>-এর জায়গায় লিখা যাক:</p>



<pre class="wp-block-preformatted">action=""</pre>



<p>অথবা লেখা যাক:</p>



<pre class="wp-block-preformatted">action="&lt;?php echo esc_url($_SERVER['REQUEST_URI']); ?&gt;"</pre>



<p>ব্যস। কাজ শেষ। এতে আমাদের ফর্মটা এই পাতায়ই সাবমিট হবে এবং ত্রুটি কিংবা সফলতার বার্তাও সে অনুযায়ী দেখাবে। আমাদের কাজ শেষ এবং আমরা সফল।</p>



<h3><strong>স্ক্রিপ্ট&nbsp;যোগ করা</strong></h3>



<p>ওয়ার্ডপ্রেসের পূর্বনির্ধারিত সাইন-আপ পাতা বদলানোর মূল কারণই হলো এর চেহারা। তাই এই নতুন তৈরি পাতায় কিছু স্টাইলিং দেয়া লাগতেই পারে কিংবা কোনো জাভাস্ক্রিপ্ট ভ্যালিডেশন দেয়া লাগতে পারে। সেজন্য ওয়ার্ডপ্রেসের ফ্রন্ট এন্ডে যেভাবে স্টাইলশিট কিংবা স্ক্রিপ্ট যোগ করি আমরা, সেভাবেই স্টাইল করা যেতে পারে। কিংবা সরাসরি ফ্রন্টএন্ডের স্টাইলশিটেও (<code>style.css</code>) স্টাইল করা যেতে পারে। খুবই সহজ:</p>



<figure class="wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler"><div class="wp-block-embed__wrapper">
View the code on <a href="https://gist.github.com/mayeenulislam/3e332efd44a3388034c3">Gist</a>.
</div></figure>



<p>এবারে আপনার স্টাইলশীটে (<code>nanotuts-signup-styles.css</code>) নিজের মতো করে স্টাইল করুন। আপনি বুঝবেন, তবু বলে রাখছি: কন্টেইনারের ক্লাস&nbsp;<code>.mu_register</code> &nbsp;আর ফর্মের আইডি হচ্ছে <code>#setupform</code>। এছাড়া আমাদের তৈরিকৃত <code>signup.php</code> পাতায়&nbsp;<code>wpmu_signup_stylesheet()</code> ফাংশনে দেখবেন কিছু ইন্টার্নাল সিএসএস করা। সেগুলো, প্রয়োজনমতো কাটছাঁট করতেই পারেন এখন।</p>



<p>এবারে এগুলো ধরে&nbsp;অন্তর্বর্তি এলিমেন্টগুলোর জন্য স্টাইল করে নিলেই সব ফকফকা। 🙂</p>



<h3>প্লাগইন না থিম</h3>



<p>আমরা পুরো ব্যাপারটা প্লাগইন আর থিমের একটা ভজকট করেছি। আপনি চাইলে পুরো ব্যাপারটা একটা নিজস্ব প্লাগইনে করে ফেলতে পারেন। কিংবা এমনও হতে পারে, এই জ্ঞানটুকু কাজে লাগিয়ে, বুদ্ধি করে একটা পূর্ণাঙ্গ ডায়নামিক প্লাগইনই বানিয়ে ফেললেন, আর ক&#8217;দিন বাদে আমরা আর এতো বড় নিবন্ধ না দেখিয়ে মানুষকে বলবো, অমুক ভাই/বোন-এর তমুক প্লাগইনটা ইনস্টল করে নেন, <em>সাফা খিরখিরা</em>!&nbsp;<img src="https://s.w.org/images/core/emoji/14.0.0/72x72/270c.png" alt="✌" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<h3>কৃতজ্ঞতা</h3>



<p>আবারও বলছি, এইটুকুতে পথনির্দেশ করার জন্য Thomas Scholz, majick, Chris Wiegman, David Sader, Chris Davis, হাসিন হায়দার ভাই-সহ অন্যান্য সকলের আকুন্ঠ কৃতজ্ঞতা স্মরণ করছি।</p>



<p>এই লেখাটির সংক্ষিপ্ত সংস্করণ ইংরেজিতে পাওয়া যাবে <a href="http://wordpress.stackexchange.com/q/219271/22728" target="_blank" rel="noopener">WordPress Development StackExchange ওয়েবসাইটের এই থ্রেডে^</a>।</p>
<p>The post <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/custom-signup-wordpress-multisite/">ওয়ার্ডপ্রেস মাল্টিসাইটে নিজস্ব সাইনআপ পাতা তৈরির কৌশল</a> appeared first on <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/">Tuts by Mayeenul Islam</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mayeenulislam.github.io/tuts/custom-signup-wordpress-multisite/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>ওয়ার্ডপ্রেসে ট্যাক্সোনমি মেটা ব্যবহার &#8211; সম্পূর্ণ গাইড</title>
		<link>https://mayeenulislam.github.io/tuts/wordpress-taxonomy-meta-complete-guide/</link>
					<comments>https://mayeenulislam.github.io/tuts/wordpress-taxonomy-meta-complete-guide/#comments</comments>
		
		<dc:creator><![CDATA[মঈনুল ইসলাম]]></dc:creator>
		<pubDate>Sat, 05 Sep 2015 07:45:54 +0000</pubDate>
				<category><![CDATA[ওয়ার্ডপ্রেস টিউটোরিয়াল]]></category>
		<category><![CDATA[ওয়েব ডেভলপমেন্ট টিউটোরিয়াল]]></category>
		<category><![CDATA[জ্ঞান-স্তরভিত্তিক টিউটোরিয়াল]]></category>
		<category><![CDATA[থিম টিউটোরিয়াল]]></category>
		<category><![CDATA[প্লাগইন টিউটোরিয়াল]]></category>
		<category><![CDATA[মাধ্যমিক স্তরের টিউটোরিয়াল]]></category>
		<guid isPermaLink="false">https://mayeenulislam.github.io/tuts/?p=656</guid>

					<description><![CDATA[<p> [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/wordpress-taxonomy-meta-complete-guide/">ওয়ার্ডপ্রেসে ট্যাক্সোনমি মেটা ব্যবহার &#8211; সম্পূর্ণ গাইড</a> appeared first on <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/">Tuts by Mayeenul Islam</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="has-background" style="background-color:#c2ecdb"><img src="https://s.w.org/images/core/emoji/14.0.0/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>লক্ষ করুন:</strong> অদ্য ৯ ডিসেম্বর ২০১৫ তারিখে <a rel="noreferrer noopener" href="https://wordpress.org/news/2015/12/clifford/" target="_blank">ওয়ার্ডপ্রেস ৪.৪.০</a> রিলিযের সাথে ওয়ার্ডপ্রেসের ট্যাক্সোনমি টার্মের মেটা ডাটা রাখার জন্য নতুন একটি টেবিল <code>termmeta</code> এবং প্রয়োজনীয় কোড সক্রীয় করা হয়েছে। সুতরাং টার্ম মেটা যোগ করা এখন আরো সহজ। আপনার দরকার <a rel="noreferrer noopener" href="https://developer.wordpress.org/reference/functions/add_term_meta/" target="_blank"><code>add_term_meta()</code></a>, <a rel="noreferrer noopener" href="https://developer.wordpress.org/reference/functions/update_term_meta/" target="_blank"><code>update_term_meta()</code></a>, <a rel="noreferrer noopener" href="https://developer.wordpress.org/reference/functions/get_term_meta/" target="_blank"><code>get_term_meta()</code></a> ইত্যাদি ফাংশন। তবে এপর্যন্ত টার্মে, মেটা বক্স যোগ করা হয়নি, তাই ফিল্ড যোগ করার ব্যাপারটি আপনি এই টিউটোরিয়াল থেকে দেখে সহায়তা নিতে পারেন। অবশ্য আপনি যদি ওয়ার্ডপ্রেসের ৪.৪.০-এর চেয়ে পুরোন সংস্করণ নিয়ে কাজ করে থাকেন, তাহলে এই টিউটোরিয়ালটি আপনার কাজে লাগবে।</p>



<p>ওয়ার্ডপ্রেস ৪.৩ ছাড়পত্র পেয়েছে ১৯ আগস্ট ২০১৫, এবং এরই সাথে ট্যাক্সোনমিতে একটা নতুন দিগন্তও সূচিত হয়েছে। ট্যাক্সোনমি টার্মগুলো এখন যেকোনো ট্যাক্সোনমি থেকেই আসুক না কেন, <a rel="noopener" href="https://make.wordpress.org/core/2015/06/09/eliminating-shared-taxonomy-terms-in-wordpress-4-3/" target="_blank">তারা এখন একক^</a>, অর্থাৎ একটার সাথে আরেকটা মিলবে না। কাজ শুরু করার আগে আসুন পরিষ্কার হয়ে নেয়া যাক, ট্যাক্সোনমি আর টার্ম দ্বারা কী বোঝানো হচ্ছে।</p>



<h3>পরিচিতি</h3>



<p>ওয়ার্ডপ্রেসে পূর্বনির্ধারিত ট্যাক্সোনমির মধ্যে বহুল পরিচিত হলো <code>Categories</code>, <code>Tags</code> ইত্যাদি। হ্যা, ঠিকই শুনছেন, ক্যাটাগরি, ট্যাগ &#8211; এগুলো আসলে একেকটা ট্যাক্সোনমি। এর মধ্যে Categories-এ পূর্বনির্ধারিত থাকে <code>Uncategorized</code> নামক একটা ক্যাটাগরি। আমরা যারা ক্যাটাগরি আর ট্যাগ ব্যবহার করতে অভ্যস্থ, আমরা জানি, ক্যাটাগরিতে একটার অধীনে (under) আরেকটাকে সেট করা যায়, কিন্তু ট্যাগ প্রতিটাই আলাদা আলাদা। এই যে, Categories এবং Tags, এরা হলো ট্যাক্সোনমি, আর Categories-এর ভিতরে ঐ যে Uncategorized, সেটা হলো ট্যাক্সোনমি টার্ম।</p>



<p>এই পূর্বনির্ধারিত ট্যাক্সোনমি আর টার্মের বাইরে ইচ্ছেমতো ট্যাক্সোনমি আর টার্ম তৈরি করা যায়। ধরা যাক, আমরা ছাত্রদের তথ্য নিয়ে কাজ করছি, এবং তাঁদের শ্রেণীর তথ্য সংরক্ষণ করার জন্য একটা নিজস্ব ট্যাক্সোনমি (Custom Taxonomy) বানিয়ে নিলাম: <code>Classes</code>। এবারে এই ক্লাসেস ট্যাক্সোনমির ভিতরে আমরা ইনসার্ট করলাম <code>I</code>, <code>II</code>, <code>III</code>, <code>IV</code>, <code>V</code> ইত্যাদি শ্রেণীর নাম, অর্থাৎ রোমান সংখ্যায় আমরা শ্রেণীগুলোর নাম লিখেছি: ওয়ান, টু, &#8230;। &#8230;তাহলে Classes হলো আমাদের ট্যাক্সোনমি, আর I, II, III, &#8230; এগুলো হলো আমাদের টার্ম।</p>



<h3>কেন দরকার?</h3>



<p>আমরা যারা ওয়ার্ডপ্রেসের পোস্টে অতিরিক্ত তথ্য যোগ করতে চাই, আমরা জানি Post Meta&#8217;র গুরুত্ব সেখানে কতটা। পোস্ট মেটা দিয়ে হেন কাজ নেই যে, করা যায় না। আর যারা ডাটাবেয ঘাঁটতে জানি, তারা জানি যে, পোস্টের সাথের এই অতিরিক্ত তথ্য (Meta data) জমা রাখার জন্য ওয়ার্ডপ্রেসে একটা আলাদা টেবিলও আছে, নাম <code>postmeta</code>। এবং খুব সহজে সেখানকার তথ্য নিয়ে খেলার জন্য রয়েছে বেশ কয়েকটা সহজ ফাংশন: <code>add_post_meta()</code>, <code>update_post_meta()</code>, <code>get_post_meta()</code>, <code>delete_post_meta()</code> ইত্যাদি। এই ফাংশনগুলো ব্যবহার করে, ধরা যাক, আপনার প্রতিটা পোস্টকে আলাদা আলাদা রঙে রাঙাতে চাচ্ছেন, তো পোস্টের মেটা ডাটাতে একটা করে রঙের কোড পাঠিয়ে দিলেই কাজটা আপনার হয়ে যাচ্ছে। &#8230;পোস্ট মেটার ব্যবহার খুব সহজ। 🙂</p>


<div class="wp-block-image">
<figure class="alignright"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2015/08/01-raw-custom-taxonomy-add-fields.png"><img decoding="async" width="169" height="300" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2015/08/01-raw-custom-taxonomy-add-fields-169x300.png" alt="পূর্বনির্ধারিত ট্যাক্সোনমি ইনসার্ট করার ফর্ম" class="wp-image-660" srcset="https://mayeenulislam.github.io/tuts/wp-content/uploads/2015/08/01-raw-custom-taxonomy-add-fields-169x300.png 169w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2015/08/01-raw-custom-taxonomy-add-fields.png 378w" sizes="(max-width: 169px) 100vw, 169px" /></a><figcaption class="wp-element-caption">পূর্বনির্ধারিত ট্যাক্সোনমি ইনসার্ট করার ফর্ম</figcaption></figure></div>


<p>এবারে ধরা যাক, আপনার স্কুলের ক্লাসগুলোর প্রত্যেকটাকে একটা করে ফুলের ছবি দিয়েও সূচিত করা হয়। কিন্তু ওয়ার্ডপ্রেসের ট্যাক্সোনমি ইনসার্শন প্যানেলে যে ফিল্ডগুলো আছে, তা দিয়ে তো ফুলের ছবি ইনসার্ট করা সম্ভব নয়। কারণ সেখানে আপনি টার্মের নামটা, স্লাগ (প্রীটি পার্মালিংকে ইউআরএল-এ যেটা দেখা যায়), শীর্ষ শিরোনাম (যদি এটা অন্য কোনোটার অধীনে সেট করার বিষয় থাকে), আর কিছু বিবরণ। কিন্তু রঙের কথা কোথায় যোগ করবেন?</p>



<p>তখনই মনে পড়ে পোস্টের অতিরিক্ত তথ্য যোগ করার পদ্ধতির &#8211; মেটা ডাটা। কিন্তু দুঃখের বিষয় হচ্ছে, ট্যাক্সোনমিতে মেটা ডাটা যোগ করার কোনো ব্যবস্থা ওয়ার্ডপ্রেসে নেই। সেজন্য এর আলাদা কোনো টেবিলও নেই। কিন্তু এর যে দরকার আছে, সে নিয়ে বিস্তর আলোচনা চলছে বহুদিন ধরে। ওয়ার্ডপ্রেস বহুল ব্যবহৃত একটা সিএমএস, পৃথিবীব্যাপী কোটি কোটি ব্যবহারকারী এটি ব্যবহার করছেন, তাই এতে হুট করে কোনো পরিবর্তন আনা যাবে না। দরকার বহু আলোচনা, গবেষণা, এবং পরীক্ষা-নিরীক্ষা। যদি সবকিছু সন্তোষজনক হয়, তবেই সেটা প্রয়োগ করা হয়। তাই, এটা যে কবে হবে, বা আদৌ হবে কিনা, সেটা আমরা জানি না।</p>



<p>কিন্তু ততদিন কি আমরা বসে থাকবো? আমরা কি আমাদের প্রয়োজনগুলো পূরণ করবো না? আমাদের ক্লাসগুলোর সাথে ফুলের ছবি কি আমরা দিতে পারবো না?</p>



<p>অবশ্যই পারবো, ইনশাল্লাহ।</p>



<h3>কিভাবে?</h3>



<p>প্রথমেই সিদ্ধান্ত নিই যে, আমরা কি পোস্ট মেটার মতো করে আলাদা একটি টেবিল বানিয়ে নিব ট্যাক্সোনমি মেটার জন্যও? সত্যি বলতে কি এ&#8217;নিয়ে বিস্তর বিতর্ক আছে। অনেকের মতেই ওয়ার্ডপ্রেস ডাটাবেয স্কেমাতে থাকাটা যৌক্তিক, নিরাপদ, এবং দ্রুত। তাই আমরা নতুন টেবিল তৈরি না করে কিভাবে সেটা করা সম্ভব, তা-ই এখানে দেখাবো।</p>



<span id="more-656"></span>



<p> আমরা আসলে ওয়ার্ডপ্রেসের অত্যন্ত গুরুত্বপূর্ণ একটা টেবিল: <code>options</code> টেবিলটিতে আমাদের এই তথ্যগুলো রাখবো।</p>



<h3>বিদ্যমান সেবাসমূহ</h3>



<p>ট্যাক্সোনমি মেটা যোগ করার জন্য ইতোমধ্যেই রয়েছে <a href="https://www.google.com/search?q=taxonomy+meta" target="_blank" rel="noopener">প্রচুর রিসোর্স^</a>, বিভিন্ন প্লাগইন রয়েছে, রয়েছে অনেক থিম/প্লাগইন এক্সটেনশন লাইব্রেরী:</p>



<ul>
<li><a href="https://wordpress.org/plugins/taxonomy-metadata/" target="_blank" rel="noopener">Taxonomy Metadata^</a> &#8211; WordPress Plugins</li>



<li><a href="https://wordpress.org/plugins/taxonomy-meta/" target="_blank" rel="noopener">Taxonomy Meta^</a> &#8211; WordPress Plugins</li>



<li><a href="https://wordpress.org/plugins/wp-category-meta/" target="_blank" rel="noopener">Category Meta Plugin^</a> &#8211; WordPress Plugins</li>



<li><a href="https://wordpress.org/plugins/wp-custom-category-meta/" target="_blank" rel="noopener">WP Custom Category Meta^</a> &#8211; WordPress Plugins</li>



<li><a href="https://github.com/bainternet/Tax-Meta-Class" target="_blank" rel="noopener">Tax Meta Class^</a> by Bainternet</li>



<li>&#8230;</li>
</ul>



<p>এর মধ্যে Tax Meta Class আমরা থিমে এক্সটেনশন লাইব্রেরি হিসেবে ব্যবহার করতে পারি। কিন্তু এই ক্লাস ব্যবহার করতে গিয়ে আমরা কিছু সমস্যার সম্মুখিন হয়েছি, যার কারণে আমরা মৌলিক বিষয়টা জেনে নেয়াটাই উচিত মনে করছি।</p>



<h3>মৌলিক প্রক্রিয়া</h3>



<p>বেসিকটা জানা থাকা উচিত, যাতে বিদ্যমান রিসোর্সে প্রয়োজনীয় পরিবর্তন যদি কিছু লাগে, তাও কোথায় কিভাবে করতে হবে আমরা জেনে-বুঝে করতে পারবো। আর যদি নিজে থেকেও কিছু তৈরি করতে চাই, মৌলিক ধারণাটা পূঁজি করে নিজের মতো কিছু একটা তৈরিও করে নিতে পারবো।</p>



<p>আমরা আমাদের পরীক্ষা-নিরীক্ষার জন্য ওয়ার্ডপ্রেসের সাম্প্রতিক সংস্করণ 4.3 এবং TwentyFifteen থিমটা ব্যবহার করে দেখাচ্ছি:</p>



<h4>প্রথম ধাপ: HTML ফিল্ডগুলো তৈরি করে নেয়া</h4>



<p>ট্যাক্সোনমি ইনসার্ট করার ফর্মেই প্রথমে আমাদেরকে আমাদের ফর্ম ফিল্ডগুলো যোগ করে নিতে হবে, যাতে করে আমরা তথ্য এন্ট্রি করতে পারি।</p>



<figure class="wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler"><div class="wp-block-embed__wrapper">
View the code on <a href="https://gist.github.com/mayeenulislam/de3af92c59497867950b">Gist</a>.
</div></figure>



<p>এই কোডগুলো আমাদের থিমের <code>functions.php</code>-তে বসিয়ে নিলে আমরা Posts-এর <strong>Categories</strong> পাতায় Category যোগ করার ফর্মের নিচে নতুন একটা টেক্সট ফিল্ড দেখতে পাবো (যদি প্লাগইনে এমনটা করতে চাই, তাহলে কোডগুলো প্লাগইনের ফাইলে বসাতে হবে)। আমরা শুধুমাত্র একটা HTML ফর্ম ফিল্ড যোগ করেছি, এটা এখনও কাজ করার উপযোগী হয়নি।</p>



<p class="has-background" style="background-color:#c2ecdb"><strong>জেনে রাখি:</strong> আমরা <a href="https://core.trac.wordpress.org/browser/tags/4.3/src/wp-admin/edit-tags.php#L549" target="_blank" rel="noopener">{$taxonomy}_add_form_fields হুকটা^</a>&nbsp;(<a href="https://developer.wordpress.org/reference/hooks/taxonomy_add_form_fields/" target="_blank" rel="noopener">ডেভলপার গাইড^</a>) ব্যবহার করছি। এই হুকটি ওয়ার্ডপ্রেসে 3.0.0 সংস্করণ থেকে আমাদের জন্য সক্রীয় আছে। হুকটি <code>$taxonomy</code> নামক একটি প্যারামিটার গ্রহণ করে।&nbsp;আমরা যেহেতু Category ট্যাক্সোনমিতে কাজটা করতে চাচ্ছি, তাই আমরা লিখেছি <code>category_add_form_fields</code>।</p>



<p>এবারে ক্যাটাগরি যোগ করার সময় অতিরিক্ত ফিল্ড দেয়ার ব্যবস্থা করলাম ঠিকই, কিন্তু সেই ক্যাটাগরিটা এডিট করতে গেলে সেখানে কিন্তু এই ফিল্ডটা দেখাবে না। তাই এপর্যায়ে আমরা এডিট পাতায় এই ফিল্ডটা যোগ করে নিব:</p>



<figure class="wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler"><div class="wp-block-embed__wrapper">
View the code on <a href="https://gist.github.com/mayeenulislam/de3af92c59497867950b">Gist</a>.
</div></figure>



<p>এবারে টার্মটা এডিট মোডে খুললেও এই ফিল্ডটা আমরা দেখতে পাবো।</p>



<p class="has-background" style="background-color:#c2ecdb"><strong>জেনে রাখি:</strong> আমরা <a href="https://core.trac.wordpress.org/browser/tags/4.3/src/wp-admin/edit-tag-form.php#L185" target="_blank" rel="noopener">{$taxonomy}_edit_form_fields হুকটা^</a>&nbsp;(<a href="https://developer.wordpress.org/reference/hooks/taxonomy_edit_form_fields/" target="_blank" rel="noopener">ডেভলপার গাইড^</a>) ব্যবহার করছি। এই হুকটি ওয়ার্ডপ্রেসে 3.0.0 সংস্করণ থেকে আমাদের জন্য সক্রীয় আছে। হুকটি <code>$tags</code> এবং <code>$taxonomy</code> নামক দুটো&nbsp;প্যারামিটার গ্রহণ করে। এবং আমরা যেহেতু Category ট্যাক্সোনমিতে কাজটা করতে চাচ্ছি, তাই আমরা লিখেছি <code>category_edit_form_fields</code>।</p>



<p>সুতরাং আমাদের ফর্মগুলো প্রস্তুত, আমরা এখন এগুলোতে তথ্য দিয়ে সংরক্ষণ বোতাম চাপলেই তথ্যগুলো পাবো। সুতরাং এপর্যায়ে কাজ হচ্ছে, তথ্যগুলো ধরা, এবং ডাটাবেযে সংরক্ষণ করা।</p>



<h4>দ্বিতীয় ধাপ: তথ্য সংরক্ষণ করা</h4>



<figure class="wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler"><div class="wp-block-embed__wrapper">
View the code on <a href="https://gist.github.com/mayeenulislam/de3af92c59497867950b">Gist</a>.
</div></figure>



<p>এই ধাপটা গুরুত্বপূর্ণ এবং বুঝে নেয়ার বিষয়: ১২ নং লাইনে আমরা বলছি, যদি ট্যাক্সোনমিটা &#8216;Category&#8217; হয়, তবে কাজটা করো, এটা আসলে জরুরি না। যদি একাধিক ট্যাক্সোনমি নিয়ে কাজ করেন, তখন এটা কাজে লাগে। যদি না করেন, তাহলে এই কন্ডিশনাল স্টেটমেন্টটি বাদ দিয়েও কাজ করবে। ১৬ নং লাইনে এসে আমরা যাচাই করে দেখছি, এই ফিল্ডটিতে তথ্য ঢুকেছে কিনা, যদি ঢুকে, তাহলে আমরা একটা অ্যারেতে একটা কী (key) দিয়ে সেই তথ্যটা নিয়ে নিচ্ছি। এবং ১৯ নং লাইনে এসে, আমরা সত্যিকার অর্থে <code>options</code> টেবিলে তথ্যটা নিজস্ব একটা কী দিয়ে সংরক্ষণ করছি। &#8230;তো সেই কী-টা কেমন? আমরা দিয়েছি <code>tax_meta{$term_id}</code>, এর মানে হচ্ছে, সে যখন <code>options</code> টেবিলে তথ্যটা রাখবে, তখন এর option_key হবে <code>tax_meta13</code> বা এরকম কোনো একটা নাম।</p>



<p class="has-background" style="background-color:#c2ecdb"><strong>জেনে রাখি:</strong> আমরা <a href="https://core.trac.wordpress.org/browser/tags/4.3/src/wp-includes/taxonomy.php#L3613" target="_blank" rel="noopener">edit_term^</a>&nbsp;(<a href="https://developer.wordpress.org/reference/hooks/edit_term/" target="_blank" rel="noopener">ডেভলপার গাইড^</a>)&nbsp;এবং <a href="https://core.trac.wordpress.org/browser/tags/4.3/src/wp-includes/taxonomy.php#L3031" target="_blank" rel="noopener">create_term^</a>&nbsp;(<a href="https://developer.wordpress.org/reference/hooks/create_term/" target="_blank" rel="noopener">ডেভলপার গাইড^</a>) হুকদুটো&nbsp;ব্যবহার করছি, দুটোই ওয়ার্ডপ্রেসের 2.3.0 সংস্করণ থেকে আমাদের জন্য&nbsp;সক্রীয় আছে। এই দুটো হুকের বৈশিষ্ট্য হচ্ছে, এদুটোই, টার্মটা তৈরি হয়ে যাওয়ার পরপরই, কিন্তু, টার্ম ক্যাশ পরিষ্কার করার আগে, কাজে নামে। আমরা মনে করছি, আমাদের ফিল্ডের তথ্যগুলো এইসময়টায় সংরক্ষণের জন্য দিলে উপযুক্ত হবে।</p>



<p>এবারে যদি আমরা একটা ডিফল্ট ক্যাটাগরি টার্ম <code>Uncategorized</code> এডিট করে আমাদের তৈরি করা Extra Input Field-এ কিছু লিখে সংরক্ষণ করি, তাহলে তা ডাটাবেযের <code>options</code> টেবিলে সংরক্ষিত হয়ে যাবে। আমরা <code>options</code> টেবিল খুলে সর্বশেষ সংরক্ষিত এন্ট্রিটা দেখলে এভাবে দেখতে পাবো:</p>



<figure class="wp-block-image alignnone"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2015/09/tax-meta-term-saved-in-options-table.jpg"><img decoding="async" width="867" height="128" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2015/09/tax-meta-term-saved-in-options-table.jpg" alt="ট্যাক্সোনমি মেটা ডাটা options টেবিলে সংরক্ষিত" class="wp-image-698" srcset="https://mayeenulislam.github.io/tuts/wp-content/uploads/2015/09/tax-meta-term-saved-in-options-table.jpg 867w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2015/09/tax-meta-term-saved-in-options-table-300x44.jpg 300w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2015/09/tax-meta-term-saved-in-options-table-768x113.jpg 768w" sizes="(max-width: 867px) 100vw, 867px" /></a><figcaption class="wp-element-caption">ট্যাক্সোনমি মেটা ডাটা options টেবিলে সংরক্ষিত</figcaption></figure>



<p>লক্ষ করুন, Uncategorized টার্মটির টার্ম আইডি হচ্ছে <code>1</code>, তাই আমাদের দেয়া কী-টার সাথে সেটা যোগ হয়ে আমাদের টার্ম মেটা যোগ হয়েছে (<code>tax_meta1</code>)। আমি ভ্যালু হিসেবে দিয়েছিলাম &#8220;data I stored&#8221;, ডান দিকে <code>option_value</code> অংশে আমাদেরই দেয়া কী (<code>extra_input</code>) নিয়ে কিন্তু সেই ভ্যালুটা PHP Serialized Data হিসেবে সংরক্ষিত হয়েছে।</p>



<h4>তৃতীয় ধাপ: গোছগাছ</h4>



<p>আমরা তো নিশ্চিত যে, আমাদের দেয়া তথ্যটা ডাটাবেযে সংরক্ষিত হয়েছে, এবং সবকিছু ঠিকঠাক কাজ করছে। এবারে যদি আমরা <code>Uncategorized</code> আবারো এডিট করতে যাই, আশ্চর্য হয়ে দেখবো, আমাদের দেয়া তথ্যটা আর ঐ ফিল্ডে দেখা যাচ্ছে না। আসুন সেটা সমাধান করা যাক। আগের কোডটাই এভাবে একটু বদলে নিই:</p>



<figure class="wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler"><div class="wp-block-embed__wrapper">
View the code on <a href="https://gist.github.com/mayeenulislam/de3af92c59497867950b">Gist</a>.
</div></figure>


<div class="wp-block-image">
<figure class="alignright"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2015/09/taxonomy-meta-extra-field-added.png"><img decoding="async" width="401" height="145" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2015/09/taxonomy-meta-extra-field-added.png" alt="ট্যাক্সোনমি মেটা হিসেবে অতিরিক্ত ফিল্ড যোগ" class="wp-image-710" srcset="https://mayeenulislam.github.io/tuts/wp-content/uploads/2015/09/taxonomy-meta-extra-field-added.png 401w, https://mayeenulislam.github.io/tuts/wp-content/uploads/2015/09/taxonomy-meta-extra-field-added-300x108.png 300w" sizes="(max-width: 401px) 100vw, 401px" /></a><figcaption class="wp-element-caption">ট্যাক্সোনমি মেটা হিসেবে অতিরিক্ত ফিল্ড যোগ</figcaption></figure></div>


<p>পরিবর্তনটা&nbsp;দেখা যাবে লাইন নং ৭&nbsp;এবং ১৬-তে। আমরা লাইন নং ৭-এ <code>options</code> টেবিল থেকে সেই ফিল্ডটা তুলে আনছি (কী কী তথ্য উঠে আসছে, বুঝতে হলে লাইন নং ৮টা আনকমেন্ট করে নিতে পারেন)। তারপর সেই ফিল্ড-এ তথ্য আমাদের কী (<code>extra_input</code>) ধরে ১৬ নং লাইনে value ফিল্ডে দেখাচ্ছি। ব্যস, কাজ শেষ। আমরা সফলভাবে ট্যাক্সোনমিতে মেটা ফিল্ড যোগ করতে পেরেছি, এবং সেখান থেকে তথ্য নিয়ে ডাটবেযে যোগও করতে পেরেছি। আবার ডাটাবেয থেকে তথ্য বের করে এনে দেখতেও পেরেছি।</p>



<p>সবটুকু কোড একত্রে দেখতে যেমনটা হবে:</p>



<figure class="wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler"><div class="wp-block-embed__wrapper">
View the code on <a href="https://gist.github.com/mayeenulislam/de3af92c59497867950b">Gist</a>.
</div></figure>



<h4>কাস্টম ট্যাক্সোনমির ক্ষেত্রে মেটা ফিল্ড?</h4>



<p>আমরা তো এতক্ষণ ডিফল্ট ট্যাক্সোনমি Category-তে মেটা ফিল্ড যোগ করে দেখছিলাম, কিভাবে সেটা করতে হয়, কিন্তু আমরা তো স্কুলের Classes-এ বিভিন্ন ফুলের ছবি যোগ করতে চাইছিলাম। এবারে দেখা যাক সেটা কিভাবে করতে হয়:</p>



<p>আমরা নতুন ট্যাক্সোনমি তৈরি করার সময় ওয়ার্ডপ্রেসের দেয়া <a href="https://codex.wordpress.org/Function_Reference/register_taxonomy" target="_blank" rel="noopener"><code>register_taxonomy()</code>^</a> ফাংশনটা ব্যবহার করে থাকি। সুতরাং আমাদের এপর্যন্ত যতগুলো হুক আমরা ব্যবহার করেছি, সেগুলোতে <code>{$taxonomy}</code> অংশে আমরা সেই প্রথম প্যারামিটারটা ব্যবহার করলেই আমাদের মেটা ফিল্ডগুলো সেই ট্যাক্সোনমিতে দেখা যাবে। অর্থাৎ যদি ট্যাক্সোনমির নাম হয় <code>student_classes</code>:</p>



<pre class="wp-block-preformatted">register_taxonomy( 'student_classes', array( 'post' ) );</pre>



<p>তাহলে হুক করার সময়ে লিখতে&nbsp;হবে এভাবে:</p>



<pre class="wp-block-preformatted">add_action( 'student_classes_add_form_fields', 'function_name_here' );</pre>



<h4>যদি একাধিক ট্যাক্সোনমিতে একই ফিল্ডের দরকার পড়ে?</h4>



<p>এমনকি হতে পারে না যে, এমন একটা ফিল্ড আমাদের লাগবে, যা আমাদের একাধিক ট্যাক্সোনমিতেই লাগবে, তখন আসলে ব্যাপারটা পানির মতো সহজ: সবটুকু কাজ এভাবেই করতে হবে, শুধু হুকটা প্রতিটার জন্য একেকবার করে করে নিলেই হয়ে যাবে:</p>



<figure class="wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler"><div class="wp-block-embed__wrapper">
View the code on <a href="https://gist.github.com/mayeenulislam/de3af92c59497867950b">Gist</a>.
</div></figure>



<p>খুব সহজ, তাই না? 🙂</p>



<h3>সীমাবদ্ধতা</h3>



<p>এটা ঠিক সীমাবদ্ধতা বলা যাবে না, তবে সাবধানতার স্বার্থে উল্লেখ করা: মনে রাখতে হবে, এধরণের টুইকিং বা পরিবর্তনগুলো সাধারণত ওয়ার্ডপ্রেসের থিম ডিভলপমেন্টের সাথে জড়িত নয়, এগুলো প্লাগইন টেরিটরির আলোচ্য বিষয়। যদি থিমে এধরণের কাজ করেন, তাহলে মনে রাখতে হবে যে, থিম পরিবর্তনের সাথে সাথে এই ফাংশনালিটিগুলো হারিয়ে যাবে। কিন্তু প্লাগইন দিয়ে করলে, থিম বদলে নিলেও তা আগের মতোই কাজ করবে।</p>



<p>এবারে সত্যিকারের একটা সীমাবদ্ধতার কথা জানা যাক: যেহেতু আমরা <code>options</code> টেবিল ব্যবহার করছি, সেহেতু <code>options</code> টেবিল কিভাবে কাজ করে তা জানা খুব দরকার। <code>options</code> টেবিলে <code>option_name</code>-এর অধীনে একক তথ্য যেমন রাখা যায়, তেমনি array-ও রাখা যায়। অ্যারের তথ্য ডাটাবেযে রাখার ক্ষেত্রে তা দু&#8217;ভাবে রাখা যায়:&nbsp;<code>json_encode()</code> করে কিংবা <code>serialize()&nbsp;</code>করে, এক্ষেত্রে ওয়ার্ডপ্রেস ব্যবহার করে serialization পদ্ধতি। সিরিয়ালাইযেশন ব্যাপারটা কেমন, দেখা যাক: যদি আমাদের কাছে একটা অ্যারে থাকে, আর আমরা তাকে সিরিয়ালাইয করি, তাহলে:</p>



<figure class="wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler"><div class="wp-block-embed__wrapper">
View the code on <a href="https://gist.github.com/mayeenulislam/de3af92c59497867950b">Gist</a>.
</div></figure>



<p>ফলাফল হবে এরকম:</p>



<pre class="wp-block-preformatted">a:2:{s:11:"extra_input";s:13:"data I stored";s:8:"file_url";s:61:"http://localhost/project/wp-content/uploads/2015/09/image.jpg";}</pre>



<p>দেখাই যাচ্ছে, সিরিয়ালাইয্‌ড তথ্যে সব তথ্যই সংক্ষেপে রাখা হয়, যেমন: array-কে লেখা হচ্ছে <code>a</code>, string-কে লেখা হচ্ছে <code>s</code>; এছাড়াও অ্যারে কিংবা স্ট্রিং-এর দৈর্ঘ্যও (length) জমা করে রাখে সে। যেমন: <code>extra_input</code> কী-র স্ট্রিং-এর দৈর্ঘ্য <code>১১</code>, আবার তাতে রক্ষিত তথ্যের স্ট্রিংটার দৈর্ঘ্য <code>১৩</code> ক্যারেক্টার;&nbsp;&#8230;এবং এখানেই আসল সমস্যার সূচনা।&nbsp;আমরা একটা প্রকল্পে&nbsp;<em>Bainternet</em>-এর Tax Meta Class ব্যবহার করছিলাম, তখন এই সমস্যাটির কারণে মহা ঝামেলায় পড়েছিলাম, যদিও অবশ্য পরে সমস্যাটার সমাধান আমরা করতে পেরেছিলাম একটা তৃতীয় পক্ষের কোডের মাধ্যমে।</p>



<p>সমস্যাটা কী?</p>



<p>ঐ ক্লাসটা দিয়ে কোনো ছবি আপলোড করে সংরক্ষণ করা হলে, সে ঠিক আমাদের সিরিয়ালাইয্‌ড তথ্যটার মতো একটা স্ট্রিং ডাটাবেযে সংরক্ষণ করতো। আমরা যখন লোকাল সার্ভার থেকে ডেভলপমেন্ট শেষ করে প্রকল্পটা সার্ভারে তুললাম, তখন আমরা ডাটাবেযের সবগুলো লোকাল পাথ বদলে সার্ভারের পাথ বানিয়ে নিতাম, অর্থাৎ <code>http://localhost/project/</code> বদলে সেখানে লিখতাম <code>http://project.com/</code> কিংবা হয়তো <code>http://dev.project.com/</code> ইত্যাদি। খুব সুন্দর! কিন্তু, এভাবে করার কারণে কিন্তু ঐ স্ট্রিংটার ক্যারেক্টারের সংখ্যা (character count) বদলাতো না। যেমন: আমাদের উদাহরণে, file_url-এ রাখা URL-টার দৈর্ঘ্য হচ্ছে <code>৬১</code>, যদি আমি এই স্ট্রিংটাকে এভাবে বদলে নেই,&nbsp;<code>http://project.com/wp-content/uploads/2015/09/image.jpg</code>, তাহলে তা হয়ে যায় <code>৫৫</code>, আর যদি dev দিয়ে করি তাহলে হয় <code>৫৯</code>। <strong>যখনই সিরিয়ালাইয্‌ড স্ট্রিং-এ স্ট্রিং কাউন্ট বদলে যায়, তখন পুরো সিরিয়ালাইয স্ট্রিং-এ থাকা কোনো তথ্যই আর ওয়ার্ডপ্রেস [কিংবা পিএইচপি] পড়তে পারে না</strong>। (ঘটনার লগ এবং সমাধান কৌশল পাওয়া যাবে &#8220;<a href="#more-to-read">বাড়তি পঠন অংশে</a>&#8220;)</p>



<p>তাই আমাদের পর্যবেক্ষণে যেটা বেরিয়ে আসে, তা হলো: যেখানেই প্রজেক্টের ইউআরএল সংরক্ষণ করার দরকার পড়বে, সেখানে ইউআরএল স্ট্রিং সরাসরি সংরক্ষণ না করে, সম্ভব হলে তার কোনো আইডি সংরক্ষণ করা উচিত।</p>



<h4>সমাধান</h4>



<p>যেভাবে সমাধান করলাম আমরা: আমরা ওয়ার্ডপ্রেসের মিডিয়া লাইব্রেরি ব্যবহার করে ছবি যোগ করে নিচ্ছিলাম একটা ফিল্ডে। তো আমরা তখন আর সরাসরি ছবির ইউআরএল ডাটাবেযে না পাঠিয়ে অ্যাটাচমেন্টটার আইডি পাঠিয়ে দিলাম ডাটাবেযে, ফলে যখন ছবিটা দেখানো দরকার, আমরা আইডি থেকে আবার ছবিটা পুণরুদ্ধার করে নিতে পারি।</p>



<p>আমরা টেক্সট ফিল্ড থেকে যেহেতু&nbsp;ছবিটার absolute URL পাচ্ছিলাম, আমরা <a href="https://pippinsplugins.com/retrieve-attachment-id-from-image-url/" target="_blank" rel="noopener">পিপিন-এর এই কোডটা^</a> তখন কাজে লাগিয়ে ছবিটার ইউআরএল থেকে তার আইডিটা বের করে নিলাম, এবং সংরক্ষণের সময় ইউআরএলটা না পাঠিয়ে সেই আইডিটা পাঠালাম:</p>



<figure class="wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler"><div class="wp-block-embed__wrapper">
View the code on <a href="https://gist.github.com/mayeenulislam/de3af92c59497867950b">Gist</a>.
</div></figure>



<p>ফলে যেটা হলো, আমাদের <code>options</code> টেবিলে <code>image_id</code> কী&#8217;র অধীনে ফাইলের ইউআরএল না গিয়ে তার অ্যাটাচমেন্ট আইডিটা গেল। এটা এজন্য করছি, যাতে ইউআরএল বদলে গিয়ে ক্যারেক্টারের সংখ্যায় উলটপালট হয়ে পুরো ফিল্ডটাই ঝামেলা না পাকায়।</p>



<h3>সংরক্ষিত তথ্য দেখানো</h3>



<p>যা সংরক্ষণ করলাম, তা ডাটাবেয থেকে বের করে দেখানোটা খুব দরকার। সেটা আমরা edit পাতায় করেওছি। কিন্তু কাজের সুবিধার্থে আমরা কয়েকটা ফাংশন বানিয়ে নিলাম, যাতে আমরা খুব সহজে তথ্যগুলো বের করে দেখাতে পারি: প্রথম ফাংশনটা দিয়ে যেকোনো রকমের তথ্য বের করে দেখানো যাবে, আর দ্বিতীয় ফাংশন দিয়ে আমরা যেভাবে ছবির ইউআরএল না নিয়ে আইডি সংরক্ষণ করছিলাম, সেখান থেকে ছবিটার ইউআরএল বের করা যাবে:</p>



<figure class="wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler"><div class="wp-block-embed__wrapper">
View the code on <a href="https://gist.github.com/mayeenulislam/de3af92c59497867950b">Gist</a>.
</div></figure>



<h4>ব্যবহারবিধি</h4>



<ul>
<li><code>nano_get_tax_meta( 1 );</code> &#8211;&nbsp;<code>1</code> নং টার্মের জন্য রাখা সকল মেটা ফিল্ড বের করে দিবে, array আকারে।&nbsp;(দ্বিতীয় প্যারামিটার ঐচ্ছিক)</li>



<li><code>nano_get_tax_meta( 1, 'extra_input' );</code> &#8211; <code>1</code> নং টার্মের জন্য রাখা সকল মেটা ফিল্ড থেকে শুধুমাত্র <code>'extra_input'</code> কী&#8217;র তথ্যগুলো বের করে দিবে। (দ্বিতীয় প্যারামিটার ঐচ্ছিক)</li>



<li><code>nano_get_tax_meta_img_src( 1, 'extra_input', 'thumbnail' );</code> &#8211; <code>1</code> নং টার্মের জন্য&nbsp;রাখা <code>'extra_input'</code> ফিল্ডটা যদি কোনো ছবির আইডি (attachment ID) হয়, তাহলে এটি সেটার thumbnail আকারের ছবিটির URL বের করে দিবে। তৃতীয় প্যারামিটারের সম্ভাব্য মানগুলো হলো: <code>'thumbnail'</code>, <code>'medium'</code>, <code>'large'</code>, <code>'full'</code>, কিংবা নিজস্ব তৈরি করে নেয়া যেকোনো ইমেজ সাইয।&nbsp; (তৃতীয় প্যারামিটার ঐচ্ছিক, পূর্বনির্ধারিত মান: <code>thumbnail</code>)</li>



<li><code>nano_delete_tax_meta( 1 );</code> &#8211; <code>1</code> নং টার্মের জন্যে&nbsp;রাখা সকল তথ্য মুছে ফেলবে। (দ্বিতীয় প্যারামিটার ঐচ্ছিক)</li>



<li><code>nano_delete_tax_meta( 1, 'extra_input' );</code> &#8211; <code>1</code> নং টার্মের জন্য রাখা সকল তথ্য থেকে শুধুমাত্র <code>'extra_input'</code> কী-তে রাখা তথ্যগুলো মুছে ফেলবে। (দ্বিতীয় প্যারামিটার ঐচ্ছিক)</li>



<li><code>nano_update_tax_meta( 1, 'extra_input', 'Some value' );</code> &#8211; <code>1</code> নং টার্মের জন্য রাখা মেটা তথ্যের <code>'extra_input'</code> কী&#8217;র জন্য রাখা তথ্যকে <code>'Some value'</code> লেখাটি দিয়ে আপডেট করে দিবে। (তিনটি প্যারামিটারই দেয়া বাধ্যতামূলক)</li>
</ul>



<h3>উপসংহার</h3>



<p>তো, আর দেরি কেন? নেমে পড়ুন কাজে। আর এই তথ্যগুলো নিয়ে বানিয়ে ফেলুন নিজের পছন্দমতো ট্যাক্সোনমি মেটা। হয়তো আপনি খুব সহজে একটা কার্যকরী মেটা ক্লাসও বানিয়ে ফেলতে পারেন পিএইচপি দিয়ে। এগুলো কাজে লাগিয়ে আপনি কী বানালেন, আমাদের সাথে শেয়ার করতে ভুলবেন না কিন্তু। আর ওপেন সোর্স করে দিলে আপনার কাজ আরো অনেকে ব্যবহার করে উপকৃতও হবেন কিন্তু। তো, স্বাগতম! 😉</p>



<p><strong>-মঈনুল ইসলাম</strong><br><img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a rel="noreferrer noopener" href="https://mayeenulislam.github.io/" target="_blank">mayeenulislam.github.io</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 id="more-to-read">বাড়তি পঠন</h3>



<ul>
<li><a href="http://wordpress.stackexchange.com/q/184850/22728" target="_blank" rel="noopener">Tax Meta Class ব্যবহার করে পড়া সমস্যার লগ ও সমাধান-যাত্রা^</a> &#8211; WordPress StackExchange</li>



<li><a href="http://wordpress.stackexchange.com/q/183475/22728" target="_blank" rel="noopener">ওয়ার্ডপ্রেস কেন <code>json_encode()</code> ব্যবহার না করে <code>serialize()</code> ব্যবহার করে^</a> &#8211; WordPress StackExchange</li>
</ul>



<h3 id="update-20150909">হালনাগাদ</h3>



<p>Bainternet এই পোস্টে মন্তব্য করেন যে, যে পদ্ধতিতে আমরা ডাটাবেযে সার্চ-রিপ্লেস করছিলাম, ওয়ার্ডপ্রেসে তা করা ঠিক নয়। তাই তিনি তাঁর তৈরি ক্লাসের তথ্য সংরক্ষণ-পদ্ধতিকে ত্রুটি (bug) বলতে নারাজ। আমরা সেটা মেনে নিয়েছি, এবং এই প্রকাশনার তথ্যগুলো এমনভাবে বদলে নেয়া হয়েছে যে, <em>আমাদের কাজের ধারায় আমরা সমস্যার সম্মুখিন হয়েছিলাম</em>। আমরা যেহেতু মৌলিক জ্ঞান নিয়ে আলোচনা করেছি, তাই তা আমাদের আলোচনার সাথে সাংঘর্ষিকও নয়। Bainternet-কে ধন্যবাদ তাঁর বক্তব্যের জন্য। (<strong>Translation:</strong> Bainternet commented on this post that, search-and-replace site URL in database, is a big <em>no-no</em> in WordPress. So as we said earlier that, it&#8217;s a bug of his class, he doesn&#8217;t think so. And we admit it too, and made changes to this article in the way that, <em>we faced issues because we went through a process</em>. As we discussed the basics of Taxonomy Meta, it&#8217;s not contradictory to our main motive. Thanks to Bainternet for his concern.)</p>
<p>The post <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/wordpress-taxonomy-meta-complete-guide/">ওয়ার্ডপ্রেসে ট্যাক্সোনমি মেটা ব্যবহার &#8211; সম্পূর্ণ গাইড</a> appeared first on <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/">Tuts by Mayeenul Islam</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mayeenulislam.github.io/tuts/wordpress-taxonomy-meta-complete-guide/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>ওয়ার্ডপ্রেসে অ্যাডভান্সড সার্চ তৈরির উপায়</title>
		<link>https://mayeenulislam.github.io/tuts/advanced-search-wordpress/</link>
					<comments>https://mayeenulislam.github.io/tuts/advanced-search-wordpress/#comments</comments>
		
		<dc:creator><![CDATA[মঈনুল ইসলাম]]></dc:creator>
		<pubDate>Tue, 21 Oct 2014 05:46:21 +0000</pubDate>
				<category><![CDATA[ওয়ার্ডপ্রেস টিউটোরিয়াল]]></category>
		<category><![CDATA[ওয়েব ডেভলপমেন্ট টিউটোরিয়াল]]></category>
		<category><![CDATA[জ্ঞান-স্তরভিত্তিক টিউটোরিয়াল]]></category>
		<category><![CDATA[থিম টিউটোরিয়াল]]></category>
		<category><![CDATA[প্লাগইন টিউটোরিয়াল]]></category>
		<category><![CDATA[মাধ্যমিক স্তরের টিউটোরিয়াল]]></category>
		<guid isPermaLink="false">https://mayeenulislam.github.io/tuts/?p=507</guid>

					<description><![CDATA[<p> [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/advanced-search-wordpress/">ওয়ার্ডপ্রেসে অ্যাডভান্সড সার্চ তৈরির উপায়</a> appeared first on <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/">Tuts by Mayeenul Islam</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="has-background" style="background-color:#f4dd9d"><img src="https://s.w.org/images/core/emoji/14.0.0/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>সচেতন থাকুন:</strong> এই টিউটোরিয়ালটি অতি সাধারণ ধারণার ভিত্তিতে তৈরি, এবং এক প্রকারের বাংলা পদ্ধতি বলা যায়, মানে চলে, ব্যস চলছে-ঘরাণার সমাধান। প্রকৃত ওয়ার্ডপ্রেসভিত্তিক সমাধান নিয়ে একটি কিংবা একাধিক পোস্ট লেখার পর্যায়ে রয়েছে। সমাপ্ত হওয়ামাত্র আমরা এই tuts nano-তেই তা প্রকাশ করতে পারবো ইনশাল্লাহ।</p>



<p>ওয়ার্ডপ্রেস সার্চ বা অনুসন্ধান করার বিষয়টি ডিফল্টভাবেই থাকে, <code>&lt;?php get_search_form(); ?&gt;</code> লিখেই আমরা সার্চ ফর্মটা লোড করে নিতে পারি থিম কিংবা প্লাগইন ইন্টাফেসে। আর সার্চ করার পর ফলাফল দেখার জন্য <code>search.php</code> টেমপ্লেটটা সাজিয়ে নিতে হয়, তাহলেই অনুসন্ধানের ফলাফল দেখা যায়। কিন্তু ডিফল্ট সার্চ সুবিধাটি শুধুমাত্র keyword বা লেখার টুকরা নিয়ে অনুসন্ধান করে, যা সাধারণত পোস্ট, পেজ ইত্যাদিতেই সীমাবদ্ধ — কাস্টম ফিল্ড, ট্যাক্সোনমি ইত্যাদিতে অতিরিক্ত উপাদানের ভিতরকার তথ্যাদি অনুসন্ধান করার জন্য আপনাকে অ্যাডভান্সড সার্চ তৈরি করার কোনো বিকল্প নেই। এছাড়া এমন অনেক ক্ষেত্র আছে, যেখানে কয়েকটা আলাদা আলাদা উপাদানের বিভিন্ন মিশ্রণের প্রেক্ষিতে কিছু খুঁজে নেয়ার দরকার হতে পারে। যেমন: একটা অনলাইন স্টোর ওয়েবসাইট, কিংবা অনলাইনে গাড়ি বিক্রীর ওয়েবসাইট, যেখানে পণ্যের বা গাড়ির দাম, পণ্যের বা গাড়ির আকার, পণ্যের বা গাড়ির রং ইত্যাদি আলাদা আলাদা মিশ্রণে পণ্য বা গাড়ি খুঁজে নেয়ার দরকার হতে পারে — কেউ লাল রঙের গাড়ি ১টি চাইতে পারে, কেউ নীল রঙের গাড়ি ৩টি চাইতে পারে। তো এসব ক্ষেত্রে অ্যাডভান্সড সার্চ তৈরি করার দরকার পড়ে। আমরা আজকে ধারণা নিবো কিভাবে তা করা যায়:</p>



<h4>ধাপ ১</h4>



<span id="more-507"></span>



<p>আপনার থীমে শুরুতেই একটা HTML ফর্ম বানিয়ে নিতে হবে। যা দিয়ে আমরা ব্যবহারকারী থেকে তথ্য নিবো। অর্থাৎ ব্যবহারকারী কী কী মিলিয়ে অনুসন্ধান করতে চান, আমরা সেই তথ্যগুলো নেবার জন্য একটা ফর্ম বানাবো:</p>



<figure class="wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler"><div class="wp-block-embed__wrapper">
View the code on <a href="https://gist.github.com/mayeenulislam/c21bc1ae03fc7503baddc15af16036e7">Gist</a>.
</div></figure>



<p>ফর্মটি আমরা একটা নাম দিয়ে সেভ করবো, কিন্তু তা অবশ্যই <code>searchform.php</code> <strong>হবে না</strong>। উদাহরণস্বরূপ আমরা দিলাম <code>advanced-searchform.php</code> — কিন্তু বুঝতেই পারছেন অন্যান্য টেমপ্লেটের সাথে সাংঘর্ষিক নয় এরকম যেকোনো নামই হতে পারে।</p>



<p class="has-background" style="background-color:#dae1e7">ফর্মের সিনট্যাক্স কেমন, কোডেক্স-এ ডিফল্ট সার্চ ফর্ম থেকে তার একটা ধারণা নেয়া যেতেই পারে।<br><a href="http://codex.wordpress.org/Function_Reference/get_search_form"><code>get_search_form()</code>&nbsp;– Codex</a></p>



<p>এবারে আমাদের বানানো সার্চ ফর্মটি থীমের যেখানে দেখাতে চাচ্ছি, সেখানে নিচের কোডটি বসাতে হবে:</p>



<pre class="wp-block-preformatted">&lt;?php get_template_part( 'advanced', 'searchform' ); ?&gt;</pre>


<div class="wp-block-image">
<figure class="alignright"><a href="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/10/advanced-search-form-by-nanodesigns.png"><img decoding="async" width="205" height="214" src="https://mayeenulislam.github.io/tuts/wp-content/uploads/2014/10/advanced-search-form-by-nanodesigns.png" alt="Advanced Search form WordPress by nanodesigns" class="wp-image-513"/></a></figure></div>


<p>আমরা ওয়ার্ডপ্রেসের Default থিম TwentyFourteen-এর সাইডবারে কোডটা বসিয়ে পরীক্ষা করতে পারি:</p>



<p>তো আপনার সার্চ ফর্ম তৈরি। এবারে আপনার ব্যবহারকারীদের পছন্দ আপনি একটা URL-এ নিয়ে নিতে পারছেন। অথ্যাৎ যদি আপনি গাড়ির নামের জায়গায় &#8220;Ferrari&#8221; আর মডেলের জায়গায় &#8220;Model2&#8221; বাছাই করে সাবমিট করেন, তাহলে URL-টা দাঁড়াবে এরকম:</p>



<p><code>http://example.com/?search=advanced&amp;name=Ferrari&amp;model=model2</code></p>



<h4>ধাপ ২</h4>



<p>এবারে আপনার যা দরকার: ডাটাবেজে কুয়েরি করা এবং কাস্টম ফিল্ডে সার্চ কুয়েরি অনুযায়ী খুঁজে মিলিয়ে নেয়া। মনে রাখবেন, সার্চ কুয়েরি কিন্তু আপনার URL, যা আপনি ফর্মটা সাবমিট করার পরে পেয়েছেন। &#8230;এপর্যায়ে আপনি ওয়ার্ডপ্রেসকে বলে দিবেন যে, যখন আপনার ব্যবহারকারীরা সার্চ করবেন, তখন যেন আপনার নিজস্ব অনুসন্ধান পাতাটি খুঁজে এনে সেখানে ফলাফল দেখায়। এজন্য নিচের ফাংশনটি আপনার <code>functions.php</code> ফাইলে বসিয়ে নিন। এটি বসালে ফর্ম সাবমিট করার পরে ডিফল্ট সার্চ টেমপ্লেট না খুলে আপনার নিজস্ব সার্চ পাতা খুলবে।</p>



<pre class="wp-block-preformatted">&lt;?php
function wpse_load_custom_search_template() {
        if ( 'advanced' === isset($_REQUEST['search']) ) {
                require( 'advanced-search-result.php' );
                die();
        }
}

add_action( 'init', 'wpse_load_custom_search_template' );
</pre>



<p>এই কোডটি আমি ওয়ার্ডপ্রেস স্ট্যাকএক্সচেঞ্জ থেকে নিয়েছি (দুর্ভাগ্যবশত আমি এর উৎসটা ভুলে গেছি), কিন্তু এই কোডটি ব্যবহারে মতদ্বৈততা আছে, বিশেষ করে <code>init</code>-তে অ্যাকশটা হুক করার বিষয়ে। কিন্তু সত্যি কথা বলতে কি তবু কোডটি কাজের (<em>দুর্বল যুক্তি নিশ্চিত!</em>)</p>



<p>ইতালির Giuseppe (G.M.) <a href="http://wordpress.stackexchange.com/a/125515/22728" target="_blank" rel="noopener">এব্যাপারে আরেকটি পথ বাৎলে দিয়েছেন^</a>, তাও দেখা যেতে পারে।</p>



<h4>ধাপ ৩</h4>



<p>আরেকটি নতুন ফাইল তৈরি করুন, যাকে <code>advanced-search-result.php</code> নাম দিয়ে সংরক্ষণ করা যাক (কারণ <code>functions.php</code>-তে আমরা এই নামটিই দিয়েছিলাম)। আর তাহলেই আপনি এবার মুক্ত &#8211; অবশ্যই। কারণ কনসেপ্ট বা মূল ধারণাটা হলো:</p>



<ul>
<li>URL থেকে তথ্যটা ধরুন,</li>



<li>একটা সাধারণ <code>WP_Query()</code> কাজে লাগান (কুয়েরি জটিল কিছু হলে <code>$wpdb</code> কুয়েরি ব্যবহার করুন)</li>



<li>কমান্ডগুলো কুয়েরিতে পাস করুন, আর ডাটাবেজ থেকে তথ্য বের করে নিন, এবং</li>



<li>ফলাফলটা দেখান</li>
</ul>



<p>উদাহরণ হিসেবে দেখা যাক:</p>



<figure class="wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler"><div class="wp-block-embed__wrapper">
View the code on <a href="https://gist.github.com/mayeenulislam/c21bc1ae03fc7503baddc15af16036e7">Gist</a>.
</div></figure>



<div class="is-layout-constrained wp-block-group has-background" style="background-color:#dae1e7"><div class="wp-block-group__inner-container">
<p><code>WP_Query()</code>&nbsp;ব্যবহার করার সময় আপনার সেরা বন্ধু হতে পারে কোডেক্স পাতাটি, এবং কাস্টম ফিল্ড সংক্রান্ত প্যারামিটারগুলো:</p>



<ul>
<li><a href="http://codex.wordpress.org/Function_Reference/WP_Query"><code>WP_Query()</code>&nbsp;– Codex^</a></li>



<li><a href="http://codex.wordpress.org/Function_Reference/WP_Query#Custom_Field_Parameters">কাস্টম ফিল্ড প্যারামিটারগুলো^</a></li>
</ul>
</div></div>



<p>তো আপনার পুরো জিনিসটা তৈরি এখন। কিন্তু তবু এখনও আপনার জন্য অনেক চ্যালেঞ্জ বাকি রয়ে গেলে:</p>



<ul>
<li><strong>বদলি অনুসন্ধান তথ্য:</strong> অ্যাডভান্সড সার্চ যেমন সবগুলো ফিল্ড মিলিয়ে হতে পারে, তেমনি যেকোনো একটি ফিল্ড দিয়েও হতে পারে, তাই আপনাকে নিশ্চিত হতে হবে যে, আপনার কুয়েরি সব ধরণের অবস্থায়ই ডাটাবেজে থাকা তথ্য ঠিক ঠিক বের করে আনছে।</li>



<li><strong>শুদ্ধিকরণ আর যাচাইকরণ:</strong> টেক্সট ফিল্ড আর টেক্সটএরিয়াগুলো খুবই মারাত্মক, কারণ এগুলো দিয়ে খুব সহজেই ডাটাবেজে অযাচিত তথ্য পাঠিয়ে ওয়েবসাইটের বারোটা বাজিয়ে দেয়া যেতে পারে। তাই বলে অন্যান্য ফর্ম এলিমেন্টও কম ঝুঁকির না। তাই সরাসরি তথ্য পাঠিয়ে দেয়াটা সবসময়ই অনিরাপদ, আপনাকে অবশ্যই আগে তথ্যকে পরিশুদ্ধ করে নিয়ে যথাযথ যাচাই-বাছাইয়ের মধ্য দিয়ে তথ্যকে ডাটাবেজ কুয়েরিতে পাঠাতে হবে &#8211; যাকে বলে Sanitization &amp; Validation। (<a href="http://code.tutsplus.com/articles/data-sanitization-and-validation-with-wordpress--wp-25536" target="_blank" rel="noopener"><strong>Data Sanitization and Validation with WordPress</strong> &#8211; TutsPlus^</a>)</li>



<li><strong>নকশায়ন:</strong> সাজিয়ে নেয়ার বিষয়টিও আসতে পারে, কিভাবে আপনি আপনার অনুসন্ধান পাতাটি সাজাবেন, সেক্ষেত্রে আপনি <code>page.php</code> (কিংবা <code>search.php</code>) টেমপ্লেটটির সহায়তা নিতে পারেন।</li>
</ul>



<p>তো, আপনি আসল ধারণাটি পেয়ে গেছেন, এবারে বাকি পথটা আপনাকেই চলতে হবে — <em>পথ</em> ধরুন, নতুন পথ আবিষ্কার করুন। মনে রাখবেন, পৃথিবীতে প্রত্যেকের পথই আলাদা। আপনারটা তৈরি করে নিন, যাতে একদিন আমি আপনাকে অনুসরণ করতে পারি। 🙂</p>



<p><strong>&#8211; মঈনুল ইসলাম</strong><br><img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a rel="noreferrer noopener" href="https://mayeenulislam.github.io/" target="_blank">mayeenulislam.github.io</a></p>
<p>The post <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/advanced-search-wordpress/">ওয়ার্ডপ্রেসে অ্যাডভান্সড সার্চ তৈরির উপায়</a> appeared first on <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/">Tuts by Mayeenul Islam</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mayeenulislam.github.io/tuts/advanced-search-wordpress/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>ওয়ার্ডপ্রেস ফ্রন্টএন্ড ও ব্যাকএন্ডে ফেভিকন যোগ</title>
		<link>https://mayeenulislam.github.io/tuts/wordpress-favicon/</link>
					<comments>https://mayeenulislam.github.io/tuts/wordpress-favicon/#respond</comments>
		
		<dc:creator><![CDATA[মঈনুল ইসলাম]]></dc:creator>
		<pubDate>Sat, 12 Apr 2014 17:01:29 +0000</pubDate>
				<category><![CDATA[ওয়ার্ডপ্রেস টিউটোরিয়াল]]></category>
		<category><![CDATA[ওয়েব ডেভলপমেন্ট টিউটোরিয়াল]]></category>
		<category><![CDATA[জ্ঞান-স্তরভিত্তিক টিউটোরিয়াল]]></category>
		<category><![CDATA[থিম টিউটোরিয়াল]]></category>
		<category><![CDATA[প্রাথমিক স্তরের টিউটোরিয়াল]]></category>
		<category><![CDATA[প্লাগইন টিউটোরিয়াল]]></category>
		<category><![CDATA[মাধ্যমিক স্তরের টিউটোরিয়াল]]></category>
		<guid isPermaLink="false">https://mayeenulislam.github.io/tuts/?p=445</guid>

					<description><![CDATA[<p> [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/wordpress-favicon/">ওয়ার্ডপ্রেস ফ্রন্টএন্ড ও ব্যাকএন্ডে ফেভিকন যোগ</a> appeared first on <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/">Tuts by Mayeenul Islam</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="has-text-align-center has-background" style="background-color:#fed6df"><strong>হালনাগাদ: জুন ৪, ২০১৬:</strong> ওয়ার্ডপ্রেস <a href="https://codex.wordpress.org/Creating_a_Favicon#WordPress_Version_4.3_or_later" target="_blank" rel="noopener">৪.৩ সংস্করণ</a> থেকে কাস্টোমাইযার ব্যবহার করে লগো আপলোডের সুবিধা যোগ করা হয়েছে এবং এই লগোই সাইটের জন্য ফেভিকনের কাজ করে। সুতরাং এই টিউটোরিয়ালটি অনুসরণের আগে নিশ্চিত হয়ে নিন, আপনার সাইটে লগো-সুবিধাটি থাকাসত্ত্বেয় আপনি এটি ব্যবহার করতে চান। ধন্যবাদ।</p>



<p class="has-text-align-center has-background" style="background-color:#c2ecdb">Grab the <strong><a href="http://wordpress.stackexchange.com/q/138098/22728" data-type="URL" data-id="http://wordpress.stackexchange.com/q/138098/22728" target="_blank" rel="noreferrer noopener">Original English version</a></strong> here on WordPress StackExchange</p>



<p><strong>জ্ঞানস্তর:</strong>&nbsp;প্রাথমিক/মাধ্যমিক স্তর</p>



<p><strong>সময়:</strong>&nbsp;৫ মিনিট</p>



<p>ফেভিকন (favicon) হলো ওয়েবসাইটের একটা সংক্ষিপ্ততম পরিচিতি বা ব্র্যান্ডিং, যা, আপনি ওয়েবসাইট খুললে ব্রাউযারের ট্যাবে কিংবা টাইটেল বারে, ওয়েবসাইটের নামের পাশে দেখা যায়। সাধারণত ওয়েবসাইটের লগো&#8217;র ছোট্ট রূপটাই ফেভিকন হিসেবে ব্যবহার করতে দেখা যায়, তবে এক্ষেত্রে ফেভিকনটা সম্পূর্ণই আপনার ব্যক্তিগত পছন্দ &#8211; যা ইচ্ছা তা হতে পারে। কোনো ওয়েবসাইটে ফেভিকন যুক্ত করার জন্য HTML <code>&lt;head&gt;</code> ট্যাগের ভিতর নিচের লাইনটি লিখতে হয়, আর যথাস্থানে <code>.ico</code> (Icon) এক্সটেনশানের একটা ইমেজ ফাইল রাখতে হয়:</p>



<pre class="wp-block-preformatted">&lt;link rel="shortcut icon" href="images/favicon.ico" /&gt;</pre>



<p>ওয়ার্ডপ্রেস ওয়েবসাইটেও একইভাবে ফেভিকন যুক্ত করা যায়, তবে ওয়ার্ডপ্রেসে ফাইলের পাথ (মানে কোথায় ফাইলটি আছে) বোঝানো একটু অন্যরকম, তাছাড়া সর্বত্র ফেভিকনকে দেখানোর বিষয়টিও আমরা এখানে আলোচনা করতে যাচ্ছি।</p>



<p>প্রথমত জেনে নেয়া দরকার, আপনি এই কাজটি থিম কিংবা প্লাগইন উভয় পদ্ধতিতেই করতে পারেন &#8211; আমরা উভয় পদ্ধতিই আলোচনা করছি:</p>



<h3>প্রস্তুতি</h3>



<p>যে ছবিটিকে ফেভিকন হিসেবে দেখাতে চান, তা নির্বাচন করুন, এবং যেকোনো ছবি এডিট করার টুল (যেমন: পেইন্ট, ফটোশপ, গিম্প ইত্যাদি) দিয়ে ছবিটিকে 16px × 16px কিংবা 32px × 32px-এ সংরক্ষণ করুন। ছবির ফাইলটি <code>.jpg</code> (JPEG), <code>.png</code> (PNG), <code>.gif</code> (GIF) ইত্যাদি যেকোনো ফর্মেটেরই হতে পারে। তবে ব্যাকগ্রাউন্ডহীন ছবি হলে <code>.png</code>-তে সংরক্ষণ করতে হবে।</p>



<p>ফাইলটিকে রিনেম করুন, এবং এক্সটেনশানটা বদলে <code>.ico</code> করে ফেলুন। ধরা যাক আপনার ছবিটি ছিল favicon.png, এবারে তা হয়ে গেল favicon.ico।</p>



<p>ব্যস, প্রস্তুতি শেষ। এবারে কাজে নামার পালা।</p>



<h3>থিম-এর মাধ্যমে ফেভিকন যোগ</h3>



<span id="more-445"></span>



<h4>স্ট্যাটিক বা স্থির কোড</h4>



<p>থিম তৈরি করার সময় থিমের images ফোল্ডারের ভিতর ফেভিকন আইকন ফাইলটি রেখে, থিমের&nbsp;হেডারে <code>&lt;head&gt;</code>&nbsp;ট্যাগের ভিতর উপরের কোডটি বসিয়ে দিলেই কাজটা হয়ে যাবে। তবে কোডটিতে একটু পরিবর্তন করে নিতে হবে:</p>



<pre class="wp-block-preformatted">&lt;link rel="shortcut icon" href="&lt;?php echo get_template_directory_uri(); ?&gt;/images/favicon.ico" /&gt;</pre>



<p>লক্ষ করুন এখানে&nbsp;<code>get_template_directory_uri()</code>ব্যবহার করা হয়েছে। ওয়ার্ডপ্রেসে থিমের ফোল্ডারটির পাথ সনাক্ত করাবার জন্য এটি ব্যবহার করা হয়ে থাকে। আপনি যদি চাইল্ড থিম নিয়ে কাজ করেন, তাহলে এক্ষেত্রে <code>get_stylesheet_directory_uri()</code>-এর ব্যবহার করুন।</p>



<p>আপনার ফেভিকনটি সাইটের ফ্রন্টএন্ডে দেখা যাবে, কিন্তু অ্যাডমিন প্যানেলে দেখা যাবে না। তাই আমরা একটি ডায়নামিক কোড লিখতে যাচ্ছি, যা দিয়ে আমরা, উপরের কোডটি ব্যবহার না করেই, সাইটের ফ্রন্টএন্ড এবং ব্যাকএন্ডে ফেভিকন লোড করতে পারবো।</p>



<h4>ডায়নামিক কোড</h4>



<p>ওয়ার্ডপ্রেস থিমের হেডারের <code>&lt;head&gt;</code> সেকশনে <code>wp_head()</code>-এর ব্যবহার উত্তম, এবং একটি আধুনিক পদ্ধতি &#8211; অনেক প্লাগইনই এর হুকটা ব্যবহার করে প্রয়োজনীয় কোড লোড করে। আপনার থিমে এই হুকটা যদি হেড সেকশনে বসানো থাকে, তাহলে থিমের <code>functions.php</code> ফাইলে নিচের কোডটি বসাতে হবে:</p>



<figure class="wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler"><div class="wp-block-embed__wrapper">
View the code on <a href="https://gist.github.com/mayeenulislam/312bfefcdb008599377c27ccb5513adb">Gist</a>.
</div></figure>



<p>এখানে আমরা একটা ফাংশনের ভিতরে আমাদের আগের স্ট্যাটিক কোডটাই লিখেছি। তারপর <code>add_action()</code> দিয়ে দুটো আলাদা জায়গায় হুক করেছি, পাশের কমেন্ট দেখে আপনারা বুঝতে পারছেন, কোন হুকটা দিয়ে আমাদের ফেভিকনটা কোথায় চলে যাচ্ছে &#8211; তবু বলে দিচ্ছি, প্রথম অ্যাকশন দিয়ে <code>wp_head()</code> হুকের মাধ্যমে সাইটের ফ্রন্টএন্ডে ফেভিকনটা দেখা যাবে, আর দ্বিতীয়টার ব্যবহারে সাইটের ব্যাকএন্ডেও ফেভিকনটা দেখা যাবে।</p>



<h4>রেফারেন্স লিংক:</h4>



<ul>
<li><a title="get_template_directory_uri() - WordPress Codex" href="http://codex.wordpress.org/Function_Reference/get_template_directory_uri" target="_blank" rel="noopener"><code>get_template_directory_uri()</code> &#8211; ওয়ার্ডপ্রেস কোডেক্স^</a></li>



<li><a title="get_stylesheet_directory_uri() - WordPress Codex" href="http://codex.wordpress.org/Function_Reference/get_stylesheet_directory_uri" target="_blank" rel="noopener"><code>get_stylesheet_directory_uri()</code> &#8211; ওয়ার্ডপ্রেস কোডেক্স^</a></li>
</ul>



<h3>প্লাগইন-এর মাধ্যমে ফেভিকন যোগ</h3>



<p>কখনও কখনও এমনও তো হতে পারে, আপনার সাইটের থিম পরিবর্তন করা লাগতে পারে। এক্ষেত্রে ধরা যাক আপনার ফেভিকনটা পরিবর্তন হচ্ছে না, তখন কিন্তু আগের থিমের সাথে আপনার ফেভিকনের কোডটাও চলে যাচ্ছে, অর্থাৎ সাইটে ফেভিকন নিষ্ক্রীয় হয়ে যাচ্ছে। এই সমস্যা দূর করতে আমরা আমাদের সাইটে ফেভিকন, একটা প্লাগইন ব্যবহার করেও দেখাতে পারি।</p>



<p>এজন্য শুরুতেই একটা <a title="Creating a site-specific snippets plugin - OttoPress.com" rel="noopener" href="http://ottopress.com/2011/creating-a-site-specific-snippets-plugin/" target="_blank">নিজস্ব প্লাগইন^</a> বানিয়ে নিতে পারি। কোড এডিটর খুলে নিচের কোডগুলো লিখুন:</p>



<figure class="wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler"><div class="wp-block-embed__wrapper">
View the code on <a href="https://gist.github.com/mayeenulislam/312bfefcdb008599377c27ccb5513adb">Gist</a>.
</div><figcaption class="wp-element-caption">Favicon যোগ করার জন্য ছোট্ট একটা প্লাগইন বানানো যেতে পারে</figcaption></figure>



<p>লক্ষ করুন, এখানে আমরা আগের ফাংশনটার বদলে <code>plugins_url()</code> ফাংশনটা ব্যবহার করেছি, কারণ আমরা প্লাগইনের ভিতরে আমাদের আইকন ফাইলটি রাখতে যাচ্ছি। এবারে ফাইলটি ধরা যাক <code>my-favicon.php</code> লিখে সংরক্ষণ করলাম। ফাইলটা একটা <code>my-favicon</code> নামক একটা ফোল্ডারে রেখে আমাদের <code>favicon.ico</code> ফাইলটি ঐ ফোল্ডারে রাখি। এবারে এই পুরো ফোল্ডারটি <code>wp-content/plugins</code> ফোল্ডারের ভিতর পেস্ট করি। তাহলে ব্যাপারটা যা দাঁড়ালো:</p>



<pre class="wp-block-preformatted">wp-content/
 &nbsp; &nbsp;plugins/
 &nbsp; &nbsp; &nbsp; my-favicon/
 &nbsp; &nbsp; &nbsp; &nbsp; -my-favicon.php
 &nbsp; &nbsp; &nbsp; &nbsp; -favicon.ico</pre>



<p>এখন আপনার ওয়ার্ডপ্রেস অ্যাডমিন প্যানেলের প্লাগইন্‌স পাতায় (সাধারণত <code>/wp-admin/plugins.php</code>) গিয়ে <code>My Favicon</code> নামক প্লাগইনটি অ্যাক্টিভেট বা সক্রীয় করুন।</p>



<p>ব্যস, এবার আপনার সাইটের ফ্রন্টএন্ড এবং ব্যাকএন্ডে উপভোগ করুন ফেভিকন!</p>



<h4>রেফারেন্স লিংক:</h4>



<ul>
<li><a title="plugins_url‎() - WordPress Codex" href="https://codex.wordpress.org/Function_Reference/plugins_url‎" target="_blank" rel="noopener"><code>plugins_url()</code>&nbsp;&#8211; ওয়ার্ডপ্রেস কোডেক্স^</a></li>
</ul>



<h3>বোনাস &#8211; অ্যাপল টাচ আইকন যোগ!</h3>



<p>অ্যাপলের মোবাইল (আইফোন) কিংবা আইপ্যাডে অ্যাপল টাচ আইকন দেখা যায়, যা আপনার সাইটের প্রতিনিধিত্ব করবে অনেকটা ফেভিকনের মতো। &nbsp;যদিও ফেভিকন এবং অ্যাপল টাচ আইকন ভিন্ন বিষয়, তবু এদের পদ্ধতিটা যেহেতু এক, তাই বিষয়টা এখানেই আলোচনা করা হলো:</p>



<p>ফেভিকন যেখানে ১৬-১৬ কিংবা ৩২-৩২ ডাইমেনশনে তৈরি করা হয়েছিল, অ্যাপল টাচ আইকনটা সেখানে তৈরি করতে হবে 129px × 129px ডাইমেনশনে, তবে ফাইলটা <code>.png</code> হলেও সমস্যা নেই। এবারে আগের কোডের মতোই হবে এবারের কোডটিও, লিখতে হবে:</p>



<figure class="wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler"><div class="wp-block-embed__wrapper">
View the code on <a href="https://gist.github.com/mayeenulislam/312bfefcdb008599377c27ccb5513adb">Gist</a>.
</div></figure>



<p>বাকিটা এবারে আপনিও পারবেন ইনশাল্লাহ। 🙂</p>



<p>এই অংশটির জন্য&nbsp;<a title="helgatheviking" href="http://wordpress.stackexchange.com/users/6477/helgatheviking" target="_blank" rel="noopener"><em>helgatheviking</em>^</a>-কে ধন্যবাদ (<a title="What's the proper way to add a favicon in WordPress without a plugin? - WordPress Development" href="http://wordpress.stackexchange.com/a/43932/22728" target="_blank" rel="noopener">মূল উৎস^</a>)।</p>



<p><strong>-মঈনুল ইসলাম</strong><br><img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f517.png" alt="🔗" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a rel="noreferrer noopener" href="https://mayeenulislam.github.io/" target="_blank">mayeenulislam.github.io</a></p>



<p>______________________________</p>



<p><sup>পুরো টিউটোরিয়ালটা আগে, ইংরেজিতে প্রকাশ করেছিলাম StackExchange-এর WordPress Development প্রশ্নোত্তর সাইটে ১৬ মার্চ ২০১৪ তারিখে। (<a title="How to add favicon to my site - in both front end and admin panel - WordPress Stack Exchange" href="http://wordpress.stackexchange.com/q/138098/22728" target="_blank" rel="noopener">মূল লিংক^</a>)</sup></p>
<p>The post <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/wordpress-favicon/">ওয়ার্ডপ্রেস ফ্রন্টএন্ড ও ব্যাকএন্ডে ফেভিকন যোগ</a> appeared first on <a rel="nofollow" href="https://mayeenulislam.github.io/tuts/">Tuts by Mayeenul Islam</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mayeenulislam.github.io/tuts/wordpress-favicon/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
