Restrict Any WordPress Post/Page for Any Specific User Role

Sometimes we need to restrict any specific wordpress post or page for any specific user role. For this there are lots of plugin. While replying to a facebook group post where someone asked something lightweight or no heavy plugin. So tried to write a simple one file plugin with hard coded page or post id and user role which can be used in theme. Here I am sharing the code if that helps other who is reading this article.

হইচই

প্রিয়তমা,

এই সুন্দর পরিবেশে এসো আমরা দুদন্ড হইচই করি।

তুমি এক মুঠো কাঁদা আমায় ছিটিয়ে দাও, আমিও এক মুঠো তোমার গায়ে।

এরপর এই কাঁদাকাঁদির সুন্দর পরিবেশে এসো আমরা আলিঙ্গন করি, হইচই করি।

প্রিয়তমা,

তোমাকে এই সুন্দর পরিবেশে যে কোন মূল্যে হইচই করতে হবে। সুন্দর দিনের শেষে তুমি আমার গায়ে পানি ঢেলে দাও, আমিও তোমার গায়ে … পানি ঢেলে দেই…ই ?

প্রিয়তমা,

দিন শেষে রাতের সুন্দর পরিবেশেও তোমাকে হইচই করত হবে। ডিসি না মার্ভেল এর মুভি দেখব এটা নিয়ে আমাদের ভেতর তুমুল হইচই হবে।

প্রিয়তমা,

গভীর রাতের সুন্দর পরিবেশে আমরা হইচই করতে করতে একে উপরের গায়ে এলিয়ে পড়ব।

আমরা তুমুল হইচই করব।
আমরা তুমুল হইচই করব।
আমরা তুমুল হইচই করব।

//২৮/০৮/২০১৯

Move to Hash Using JQuery – Three Cases

Sometimes we need to implement smooth jump for hash link click, we can do it in many ways using javascript or jquery. There are lots of jquery plugins to do that, here I am trying to write simple jquery tricks that handles some specific situation to handle jump or hash link click or tracking.

My Target:

  1. Jump based on window hash url
  2. Hash link click for same page
  3. Hash based external link

#1 Jump based on window hash url

First case: if user is visiting with a hash url , so our duty is to help the user jump to the hash id

#2 & 3# Jump based on click

Second and third case is user click on any user, it can be simple hash link or a link with hash at end, So, only hash as link should be for same page, but any valid link with hash at end should be another page or external page.

All three cases are handled in below code sample, Marked the 3 situation in code using #

I covered the situation when there is hash link or hash in url but the hash id or html element doesn’t exists

Another thing to consider, while we move the user to the hash id/html element without moving to screen to that vertical point, it’s better to move 90-100 px less so that user can see the html element more clear, in terms of ux.

গুটেনবার্গ ব্লক(ডাইনামিক) মাল্টি সিলেক্ট ফিল্ড(Gutenberg Block (Dynamic) Multi Select Field)

গুটেনবার্গ ব্লক(ডাইনামিক) মাল্টি সিলেক্ট ফিল্ডঃ

গুটেনবার্গ ব্লক এর ডাইনামিক ব্লকের(স্টাটিক কি হয় পরীক্ষা করি নাই) মাল্টি সিলেক্ট ফিল্ড এর ক্ষেত্রে আমি একটা সমস্যায় পড়েছিলাম ফিল্ডটাইপ কি লিখব সেটা নিয়ে। যেহেতু ডাইনামিক ব্লকের ক্ষেত্রে পিএইচপি থেকে ফিল্ড টাইপ এবং ডিফল্ট ভ্যালু গুলো ডিক্লেয়ার করতে হয় তাই আমি এই রকম লিখেছিলাম

‘id’ => array(
‘type’ => ‘array’,
‘default’ => array()
),

ব্লক এর আউটপুট একটা শর্টকোড ছিল। শর্টকোড সরসরি ব্যবহার করলে কোন ইরর পাচ্ছিলাম না কিন্ত ব্লকের আউটপুট থেকে আসলে ইরর পাচ্ছিলাম এই রকম

PHP Notice: Undefined index: items in … \wp-includes\rest-api.php on line 1150

আমি যে প্লাগিন নিয়ে কাজ করছিলাম সেটার কোডের ভেতর কাকতলীয় ভাবে অনেক জায়গায় এরের ইন্ডেক্স হিসাবে ‘items’ কীটা ব্যবহার করেছি কিন্তু এটার সাথে রেস্ট এপি এর সম্পর্ক খুঁজে পাচ্ছিলাম না। পরে গুগল সার্চ করে পেলাম মাল্টি সিলেক্ট ফিল্ড এর ক্ষেত্রে array এর আইটেম গুলোর টাইপও ডিক্লেয়ার করে হয় যা নিচে

‘id’ => array(
‘type’ => ‘array’,
‘default’ => array(),
‘items’ => array(
‘type’ => ‘integer’
)
),

‘items’ কী টার সাথে array এর আইটেম গুলোর টাইপ ডিক্লেয়ার করার ক্ষেত্রে ‘items’ কীটা ব্যবহার আমাকে বেশি কনফিউজ করে দিয়েছিল সমস্যাটা বুঝতে।

২য় হচ্ছে, আমার জ্ঞানের অভাব কিভাবে মাল্টি সিলেক্ট ফিল্ড এর ক্ষেত্রে array এর আইটেম গুলোর টাইপ ডিক্লেয়ার করতে হয় কিনা সেইটা না জানা

৩য়, আমি এটার সমাধান খুঁজে পেয়েছি ওয়ার্ডপ্রেস এর রেস্ট এপি নিয়ে খুঁজতে গিয়ে, এর সাথে গুটেনবার্গ এর ডাইনামিক ব্লক এর সম্পর্ক আছে কারন গুটেনবার্গ ডাইনামিক ব্লক এর আউটপুট পিএইচপি থেকে রেন্ডার করে আর এর জন্য json রিকোয়েস্ট পাঠায় যা রেস্ট এপি রিকোয়েস্ট।

৪র্থ, এটা এখানে শেয়ার করলাম যদি কারো উপকার হয় কারণ গতকাল এই সমস্যার সমাধান না করা অবস্থায় অফিস ক্লোজ করে বাসায় চলে গিয়েছিলাম, সকালে এসেই আগে এটা নিয়ে বসলাম।

শেষঃ কোণ সমস্যা যখন বুঝতে পারি না বা কিভাবে সমাধান করব বুঝতে পারি না বা সমস্যার সমাধান খুঁজে পাই না তখন আমি একটা গ্যাপ দেই কাজ থেকে বা কোড করা থেকে। এই গ্যাপটা অফিস থেকে বের হয়ে চা, বিড়ি, পান খাওয়া বা ফেসবুকে অভিনেত্রী জয়া আহসান এর ফেসবুক পেজে ঢু মারা যে কোন কিছুই হতে পারে।

My post in wordpressian facebook group
https://www.facebook.com/groups/wordpressians/permalink/1397270923744425/

Gutenberg Block (Dynamic) Multi Select Field:

In the Gutenberg block’s dynamic block (whether static or not tested) in the multi select field, I had a problem with what to write on the fieldtype. Since dynamic block requires field type and default values ​​to be declared from PHP, I wrote like this.

‘id’ => array (
   ‘type’ => ‘array’,
   ‘default’ => array ()
),

The block’s output was a shortcode. I could not get any error when using shortcode sarsera but I was actually getting error from block output.

PHP Notice: Undefined index: items in … \ wp-includes \ rest-api.php on line 1150

I used the ‘items’ key as the index of the error in many places inside the code of the plugin I was working with but I could not find the relation of Rest AP with it. After doing a Google search, I can also declare the type of the items in the array in the Multi Select field below.

‘id’ => array (
   ‘type’ => ‘array’,
   ‘default’ => array (),
   ‘items’ => array (
      ‘type’ => ‘integer’
   )
),

Using the ‘items’ key to declare the type of the items in the array with the ‘items’ key made me more confused to understand the problem.

Secondly, my lack of knowledge on how to declare the type of array items in the multi select field is not known.

Third, I found a solution to this with WordPress’s Rest AP, but it has links to Gutenberg’s Dynamic Block because Gutenberg Dynamic Block’s output renders it from PHP and sends the json request to the Rest API request.

Fourth, I shared it here if anyone would benefit because yesterday, after closing the office, I closed the office and did not solve the problem, I sat with it before dawn.

Lastly, when I don’t understand the angle problem or understand how to solve it or I can’t find a solution, I give a Gap from work or code. This Gapta can be anything from leaving the office to drinking tea, bidi, drinking or going to actress Jaya Ahsan’s Facebook page.

Entertainment Talk Show Idea for BD TV Channels

বিনোদন মিডিয়ার জন্য একটা বিনোদন মূলক বিজনেস আইডিয়াঃ

কলকাতার বাংলা সিরিয়াল এর বাংলাদেশী দর্শকদের বাংলাদেশের টিভি চ্যানেলে ফিরিয়ে আনার বিষয়ে আমার একটা চিন্তা।

আমাদের দেশে নিশ্চিৎ ভাবেই কিছু মানুষ টক শো দেখে না হলে প্রতিদিন রাতে প্রায় প্রতিটি টিভি চ্যানেলে টক শো হতো না। কিন্তু তথাকথিত টক শো দেখে দিন শেষে মানুষ একটা হতাশা বা না পাওয়া নিয়ে ঘুমাতে যায়।

“The Walking Dead” নামে একটা ইংলিশ টিভি সিরিয়াল এর বিষয়ে গপসপ করার জন্য আর একটা টক শো সিরিয়াল হয় যার নাম “Talking Dead”. এই কন্সেপ্ট কাজে লাগিয়ে আমরা যেটা করতে পারি সারা দিন কলকাতার বাংলা টিভি চ্যানেল গুলোতে যে জনপ্রিয় টিভি সিরিয়াল হয় বা বাংলাদেশীদের প্রিয় টিভি সিরিয়াল গুলোর কাহিনীর সারাংশ নিয়ে আলোচনার জন্য প্রতিদিন কয়েকজন আংকেল আন্টিকে ডেকে টক শো এর আয়োজন করা যেতে পারে। অন্তত সারাদিন কেউ যদি কোন সিরিয়াল মিসও করে ফেলে সেইটার ফলো আপ আলোচনা সমালোচনা জানা এবং দেখার জন্য বাংলাদেশী টিভি চ্যানেলে নিশ্চিৎ ভাবেই ঢু মারবে। এই ধরনের টক শো এর নাম “Talking Dead” দিলেও চলত কিন্তু ইংরেজি নাম লোকে খাবে না। বাংলা কোন নাম খুঁজতে হবে। যেমন – “মৃতদের কেচ্চা!”

প্রথমত আইডিয়াটা হাস্যকর মনে হলেও যদি কোন টিভি চ্যানেল এটা ইমপ্লিমেন্ট করে আমার ধারণা তাদের অন্তত এই অনুষ্ঠান এর জন্য কোন দিন চ্যানেল বন্ধ করা লাগবে না।

বিঃ দ্রঃ আমি এই আইডিয়ার কপিরাইট এর জন্য আবেদন করব কিনা সবার মতামত চাচ্ছি।

ফাঁসীর রায়ের নথি হারিয়ে গেছে!

ছোট গল্পঃ

এক উদভ্রান্ত প্রেমিক রাগের মাথায় জনসমক্ষে তার প্রেমিকাকে খুন করে ফেলল। তারপর অনুতপ্ত হয়ে নিজেই নিজের নামে থানায় গিয়ে মামলা করে দিল। দীর্ঘ বিচার এর সময় প্রেমিক প্রচন্ড অন্তর্জালায় জর্জরিত হল।

দীর্ঘ অপেক্ষার পর এক দিন আদালত তার ফাঁসীর রায় দিল। ফাঁসী কার্যকর করার দিন শোনা গেল ফাঁসীর রায়ের নথি হারিয়ে গেছে!

হিরকরাজার ডাস্টবিন দর্শন

ছোট গল্পঃ
একদিন হিরকরাজা গেলেন একটা ডাস্টবিনের ভেতর বেড়াতে। গিয়ে দেখলেন, ডাস্টবিনে কোন ময়লা নাই, ডাস্টবিন এর ভেতর সুগন্ধি বাতাস বয়ে যাচ্ছে। উনি তখন সবাইকে ঝাড়ি দিলেন, তোমরা শুধু শুধু ডাস্টবিনকে দোষারোপ কর, আমিতো দেখছি এটা চেটে খাওয়া যায়।

এরপর কিছুদিন পর জাহিদ সাহেব ( Anarja Adim) যাচ্ছিলেন ঐ ডাস্টবিনের পাশ দিয়ে, দুর্গন্ধে নাকে রুমাল চেপে যেতে যেতে অনুভব করলেন সমস্যা তার নাকে।

ভালোবাসার পাল্লা

তুমি এক কেজি ভালোবাসা চাইলে …
আমি ভালোবাসা মেপে দিলাম।
আমার স্বভাব বসত পুরাতন ঝং ধরা বাটখারা ব্যবহার করে ৫০ গ্রাম কম দিলাম।
মাপার সময় দাঁড়িপাল্লা এদিক সেদিক হেলিয়ে দুলিয়ে আরো ৫০ গ্রাম কম দিলাম।
তুমি ভালোবাসা নেওয়ার সময় খেয়াল করনি, আমি ঐখান থেকে আরো ৫০ গ্রাম উঠিয়ে নিয়েছিলাম।
আর হ্যাঁ বলতে ভুলে গেছি, কিছু পচা আর মেয়াদ উত্তীর্ণ ভালোবাসা ছিল যা প্রায় আরও ১৫০ গ্রাম হবে।
তুমি কোন কিছু ভালোমত খেয়াল না করে বেহিসাবীর মত ৩০০ গ্রাম ফাঁকি নিয়ে চলে গেলে।
আচ্ছা যাবার সময় তুমি মুচকি হেসেছিলে কেন ?

আমি ভেবেছিলাম আমি চালাক আর তুমি বুঝি খুব বোকা।
আমার প্রচন্ড ভুল ভাঙল সেদিন যেদিন তুমি ৭০০ গ্রাম ভালোবাসা আমার দাঁড়িপাল্লা বাটখারা দিয়ে মেপে ১ কেজি হিসাবে ফেরত দিয়ে গেলে!

১০ মার্চ, ২০১৯
দুপুরের ভাত ঘুম আসার আগে

Easy PHP Error Debug for Joomla – System Plugin – CBX PHP Debug

I don’t see any easy way to debug or see php error log for Joomla, If I am not wrong. While working with WordPress I just put some constant in wp-config.php file to enable debug and display , log errors.

define('WP_DEBUG', true);
define( 'WP_DEBUG_DISPLAY', true);
define( 'WP_DEBUG_LOG', true);

Then WordPress creates a debug.log file in wp-content folder. I don’t need to go to php error log file in the server to check the error. I know we can configure local domain so that the log file is generated in the joomla local site folder but that is also not native joomla solution ! I was thinking to enable something for Joomla but didn’t find. So, I created a system plugin for Joomla to make this easy. The idea for “System Plugin – CBX PHP Debug” comes here. Just install the system plugin, enable and configure as need “Enable Debug, Display Errors, Log Error in debug file”, save and you are done. This plugin will create a file debug.log inside Joomla’s logs folder as configured in the configuration.php file.

BTW, I copied the debug init function from WordPress 🙂

Download the plugin from here

Version 1.0.0 direct download here.

কোন এলাকায় ব্রীজ হলে সেই এলাকার মাঝিরা পেশা বদল করে !

সারা দিন কাজের স্ট্রেস এর কারণে কতবার রেগে গিয়ে রাগ প্রকাশ করলাম আর কতবার করলাম না সেই হিসাব নিয়ে বাসায় ফিরতে ফিরতে খেয়াল করলাম বাসার কাছেই স্বপ্ন চেইন শপ নতুন শাখা খুলেছে। বাসার পাশের দোকানদারকে জিজ্ঞাসা করলাম ওমুক নাম্বার এর বাসাটা কোন দিকে, দোকানদার বলল, কি ‘স্বপ্ন’ এর ঠিকানা জানতে চাইছেন। অন্যদিন এর তুলনায় আজকে তার চেহারা কিছু্টা ম্লান। অন্যদিন কোন কিছুর দাম ২টাকা কম রাখতে বল্লে মুখের উপর না বলে দিতেন, আজকে দেখলাম মনে হয় কিছুর দাম জিজ্ঞাসা করলেই বলে দেবেন ভাই, আপনি আমাকে প্রতিটি জিনিসের দাম ১০ টাকা কম দিয়েন এখন থেকে। তার দোকান থেকে বের হবার সময় আমাকে খুব যত্ন করে বলল, ভাই আমাদের ভুলে যাবেন না তো!

এরপর গেলাম স্বপ্ন এর নতুন শাখা দেখতে। ঢুকার মুখেই বেশ জটলা। মনে হচ্ছে ৫ টাকা কেজি দরে পোলাউ এর চাল বেচতেছে কেউ ! ভেতরে আর ঢুকা হলা না কারণ প্রচুর লোক আসছে আর কিনতেছে। স্বপ্ন থেকে বের হবার সময় স্বপ্নে প্রবেশ করতে করতে এক কাস্টমার দেখলাম বলতেছে, আজকেই সব কিনে নিয়ে যাবে মনে হচ্ছে !

স্বপ্ন যে বিল্ডিং এ নতুন শাখা খুলেছে আমি তার সামনে থেকে কাচা তরকারি কিনতাম একজনের কাজ থেকে। অনেক দিন ধরে ভ্যানে করে তরকারি বেচত। তার ভালো দিক হচ্ছে, সে দামাদামিতে কিছুটা দাম কম রাখত। সর্বমোট দামের উপর আবার কিছু কম রাখত। আবার বাজার নিয়ে চলে আসার সময় যত্ন করে বলত, স্যার আইসেন, কম রাখার চেস্টা করব যত টুকু পারি। সেই লোকটা আজকে আর সেই জায়গায় নাই। স্বপ্নের সামনে নিশ্চয় ভ্যানে করে কাঁচা তরকারির দোকান দিতে পারবে না।

বাস্তবতা হচ্ছে এক জনের স্বপ্ন অন্যের দুঃস্বপ্নের কারণ হয়ে দাঁড়ায়। আমি অবশ্য কাউকে দোষারোপ করছি না। কোন এলাকায় ব্রীজ হলে সেই এলাকার মাঝিরা পেশা বদল করে !