আমি যখন এই উত্তরটি শুরু করেছি তখন এটি কেবল একটি ছোট নোট হওয়া উচিত। ঠিক আছে, আমি ব্যর্থ হয়েছি। দুঃখিত! আমার সাথে থাকুন, এখানে একটি গুড্ড লুকিয়ে আছে ...
ওয়ার্ডপ্রেস উইজেটগুলি কীভাবে সংরক্ষণ করা হয়
উইজেটের তালিকা নামের একটি বিকল্পে সংরক্ষণ করা হয় 'sidebars_widgets'
। এ var_export()
নিম্নলিখিতগুলির মতো কিছু দিতে পারে:
array (
'wp_inactive_widgets' =>
array (
),
'top-widget' =>
array (
),
'bottom-widget' =>
array (
),
'array_version' => 3,
)
উপেক্ষা করুন 'wp_inactive_widgets'
এবং 'array_version'
। আমাদের সেগুলির যত্ন নেওয়ার দরকার নেই।
অন্যান্য কীগুলি নিবন্ধিত সাইডবারগুলির জন্য সনাক্তকারী। এক্ষেত্রে সাইডবারগুলি এই কোড দিয়ে নিবন্ধিত হতে পারে:
// Register two sidebars.
$sidebars = array ( 'a' => 'top-widget', 'b' => 'bottom-widget' );
foreach ( $sidebars as $sidebar )
{
register_sidebar(
array (
'name' => $sidebar,
'id' => $sidebar,
'before_widget' => '',
'after_widget' => ''
)
);
}
ডিফল্টরূপে সাইডবারগুলি নিবন্ধের পরে খালি থাকে। অবশ্যই.
প্রতিটি নিবন্ধিত উইজেট শ্রেণীর জন্য একটি পৃথক বিকল্প তৈরি করা হয়, এতে সমস্ত প্রয়োজনীয় বিকল্প রয়েছে। বিকল্পটি স্ট্রিং দ্বারা উপসর্গ করা হয় widget_
। সমস্ত সক্রিয় আরএসএস উইজেটের জন্য বিকল্পগুলি দেখতে আমাদের দেখতে হবে ...
get_option( 'widget_rss' );
সম্ভাব্য আউটপুট:
array (
2 =>
array (
'title' => 'WordPress Stack Exchange',
'url' => 'http://wordpress.stackexchange.com/feeds',
'link' => 'http://wordpress.stackexchange.com/questions',
'items' => 5,
'show_summary' => 1,
'show_author' => 0,
'show_date' => 0,
),
)
নোট 2 নোট করুন । একাধিক উদাহরণের জন্য যুক্তিগুলি সমস্ত সংখ্যার অনুসারে বাছাই করা এই একটি বিকল্পে সঞ্চিত থাকে।
ওয়ার্ডপ্রেসটিতে ইতিমধ্যে কোন উইজেট শ্রেণীর পরিচিত রয়েছে তা wp-admin/options.php
দেখার জন্য আপনি এই জাতীয় কিছু না দেখা পর্যন্ত নীচে স্ক্রোল করে যান :
হ্যাঁ, সিরিয়ালযুক্ত ডেটা। না, আপনি এখানে পড়তে পারবেন না। চিন্তা করবেন না, আপনার দরকার নেই।
একটি ডেমো উইজেট
অভ্যন্তরীণ কাজগুলি আরও ভালভাবে বর্ণনা করার জন্য আমি একটি খুব সাধারণ ডেমো উইজেট লিখেছি:
/**
* Super simple widget.
*/
class T5_Demo_Widget extends WP_Widget
{
public function __construct()
{ // id_base , visible name
parent::__construct( 't5_demo_widget', 'T5 Demo Widget' );
}
public function widget( $args, $instance )
{
echo $args['before_widget'], wpautop( $instance['text'] ), $args['after_widget'];
}
public function form( $instance )
{
$text = isset ( $instance['text'] )
? esc_textarea( $instance['text'] ) : '';
printf(
'<textarea class="widefat" rows="7" cols="20" id="%1$s" name="%2$s">%3$s</textarea>',
$this->get_field_id( 'text' ),
$this->get_field_name( 'text' ),
$text
);
}
}
উল্লেখ্য কন্সট্রাকটর: 't5_demo_widget'
হয় $id_base
, এই উইজেটের আইডেন্টিফায়ার। আপনি যেমন স্ক্রিনে দেখতে পাচ্ছেন তার যুক্তিগুলি বিকল্পটিতে সঞ্চিত রয়েছে widget_t5_demo_widget
। আপনার সমস্ত কাস্টম উইজেটগুলি এ জাতীয় আচরণ করা হবে। আপনার নামটি অনুমান করার দরকার নেই। এবং যেহেতু আপনি আপনার উইজেটগুলি লিখেছেন (সম্ভবত) আপনি নিজের শ্রেণীর $instance
পরামিতিগুলি থেকে সমস্ত যুক্তি জানেন ।
থিম বেসিক
প্রথমে আপনাকে কিছু সাইডবার এবং কাস্টম উইজেট নিবন্ধন করতে হবে। এই সঠিক কর্ম মনে রাখা সহজ হয়: 'widgets_init'
। একটি ধারক - একটি বর্গ বা একটি ফাংশন মধ্যে সবকিছু রাখুন। সরলতার জন্য আমি নামের একটি ফাংশন ব্যবহার করব t5_default_widget_demo()
।
নিম্নলিখিত কোডের সবগুলিতে চলে যায় functions.php
। ক্লাসটি T5_Demo_Widget
ইতিমধ্যে লোড করা উচিত। আমি কেবল এটি একই ফাইলের মধ্যে রেখেছি ...
add_action( 'widgets_init', 't5_default_widget_demo' );
function t5_default_widget_demo()
{
// Register our own widget.
register_widget( 'T5_Demo_Widget' );
// Register two sidebars.
$sidebars = array ( 'a' => 'top-widget', 'b' => 'bottom-widget' );
foreach ( $sidebars as $sidebar )
{
register_sidebar(
array (
'name' => $sidebar,
'id' => $sidebar,
'before_widget' => '',
'after_widget' => ''
)
);
}
এতদূর, এত সহজ। আমাদের থিম এখন উইজেট প্রস্তুত, ডেমো উইজেট পরিচিত। এখন মজা।
$active_widgets = get_option( 'sidebars_widgets' );
if ( ! empty ( $active_widgets[ $sidebars['a'] ] )
or ! empty ( $active_widgets[ $sidebars['b'] ] )
)
{ // Okay, no fun anymore. There is already some content.
return;
}
আপনি সত্যই ব্যবহারকারীর সেটিংস নষ্ট করতে চান না। সাইডবারগুলিতে ইতিমধ্যে যদি কিছু সামগ্রী থাকে তবে আপনার কোডটি এটির উপর দিয়ে চলবে না। সে কারণেই আমরা এই ক্ষেত্রে থামি।
ঠিক আছে, ধরে নেওয়া হয়েছে পাশেরগুলি খালি রয়েছে ... আমাদের একটি কাউন্টার দরকার:
$counter = 1;
উইজেটগুলি নম্বরযুক্ত । এই সংখ্যাগুলি ওয়ার্ডপ্রেসের জন্য দ্বিতীয় শনাক্তকারী।
অ্যারে এটি পরিবর্তন করতে পান:
$active_widgets = get_option( 'sidebars_widgets' );
আমাদেরও একটি কাউন্টার দরকার (আরও পরে এটি):
$counter = 1;
এবং এখানে আমরা কীভাবে কাউন্টারটি ব্যবহার করব, সাইডবারের নামগুলি এবং উইজেট আর্গুমেন্টগুলি (ভাল, আমাদের কেবল একটি যুক্তি রয়েছে text
:)।
// Add a 'demo' widget to the top sidebar …
$active_widgets[ $sidebars['a'] ][0] = 't5_demo_widget-' . $counter;
// … and write some text into it:
$demo_widget_content[ $counter ] = array ( 'text' => "This works!\n\nAmazing!" );
$counter++;
উইজেট শনাক্তকারী কীভাবে তৈরি হয় তা দ্রষ্টব্য: একটি id_base
, বিয়োগ -
এবং কাউন্টার। বিষয়বস্তু উইজেট এর অন্য পরিবর্তনশীল মধ্যে সংরক্ষিত হয় $demo_widget_content
। এখানে কাউন্টার কী এবং উইজেট আর্গুমেন্টগুলি একটি অ্যারেতে সংরক্ষণ করা হয়েছে।
সংঘর্ষ এড়াতে যখন করা হয় তখন আমরা কাউন্টারটিকে বাড়িয়ে তুলি।
এটা সহজ. এখন আরএসএস উইজেট। আরও ক্ষেত্র, আরও মজা!
$active_widgets[ $sidebars['a'] ][] = 'rss-' . $counter;
// The latest 15 questions from WordPress Stack Exchange.
$rss_content[ $counter ] = array (
'title' => 'WordPress Stack Exchange',
'url' => 'http://wordpress.stackexchange.com/feeds',
'link' => 'http://wordpress.stackexchange.com/questions',
'items' => 15,
'show_summary' => 0,
'show_author' => 1,
'show_date' => 1,
);
update_option( 'widget_rss', $rss_content );
$counter++;
এখানে নতুন কিছু আছে: update_option()
এটি আরএসএস উইজেট যুক্তি একটি পৃথক বিকল্পে সংরক্ষণ করবে। ওয়ার্ডপ্রেস এগুলি পরে স্বয়ংক্রিয়ভাবে খুঁজে পাবেন।
আমরা ডেমো উইজেট আর্গুমেন্টগুলি সংরক্ষণ করি নি কারণ আমরা এখন আমাদের দ্বিতীয় সাইডবারে একটি দ্বিতীয় উদাহরণ যুক্ত করি…
// Okay, now to our second sidebar. We make it short.
$active_widgets[ $sidebars['b'] ][] = 't5_demo_widget-' . $counter;
#$demo_widget_content = get_option( 'widget_t5_demo_widget', array() );
$demo_widget_content[ $counter ] = array ( 'text' => 'The second instance of our amazing demo widget.' );
update_option( 'widget_t5_demo_widget', $demo_widget_content );
... এবং সমস্ত t5_demo_widget
ভিড়ের জন্য একযোগে সংরক্ষণ করুন । একই বিকল্পটি দুইবার আপডেট করার দরকার নেই।
ঠিক আছে, আজকের জন্য পর্যাপ্ত উইজেটগুলি আসুন, sidebars_widgets
এটিও সংরক্ষণ করুন :
update_option( 'sidebars_widgets', $active_widgets );
এখন ওয়ার্ডপ্রেস জানবে যে এখানে কিছু নিবন্ধিত উইজেট রয়েছে এবং যেখানে প্রতিটি উইজেটের আর্গুমেন্ট সংরক্ষণ করা হয়। var_export()
সাইডবার_উইজেটগুলিতে একটি এটিকে দেখায়:
array (
'wp_inactive_widgets' =>
array (
),
'top-widget' =>
array (
0 => 't5_demo_widget-1',
1 => 'rss-2',
),
'bottom-widget' =>
array (
0 => 't5_demo_widget-3',
),
'array_version' => 3,
)
সম্পূর্ণ কোড আবার
add_action( 'widgets_init', 't5_default_widget_demo' );
function t5_default_widget_demo()
{
// Register our own widget.
register_widget( 'T5_Demo_Widget' );
// Register two sidebars.
$sidebars = array ( 'a' => 'top-widget', 'b' => 'bottom-widget' );
foreach ( $sidebars as $sidebar )
{
register_sidebar(
array (
'name' => $sidebar,
'id' => $sidebar,
'before_widget' => '',
'after_widget' => ''
)
);
}
// Okay, now the funny part.
// We don't want to undo user changes, so we look for changes first.
$active_widgets = get_option( 'sidebars_widgets' );
if ( ! empty ( $active_widgets[ $sidebars['a'] ] )
or ! empty ( $active_widgets[ $sidebars['b'] ] )
)
{ // Okay, no fun anymore. There is already some content.
return;
}
// The sidebars are empty, let's put something into them.
// How about a RSS widget and two instances of our demo widget?
// Note that widgets are numbered. We need a counter:
$counter = 1;
// Add a 'demo' widget to the top sidebar …
$active_widgets[ $sidebars['a'] ][0] = 't5_demo_widget-' . $counter;
// … and write some text into it:
$demo_widget_content[ $counter ] = array ( 'text' => "This works!\n\nAmazing!" );
#update_option( 'widget_t5_demo_widget', $demo_widget_content );
$counter++;
// That was easy. Now a RSS widget. More fields, more fun!
$active_widgets[ $sidebars['a'] ][] = 'rss-' . $counter;
// The latest 15 questions from WordPress Stack Exchange.
$rss_content[ $counter ] = array (
'title' => 'WordPress Stack Exchange',
'url' => 'http://wordpress.stackexchange.com/feeds',
'link' => 'http://wordpress.stackexchange.com/questions',
'items' => 15,
'show_summary' => 0,
'show_author' => 1,
'show_date' => 1,
);
update_option( 'widget_rss', $rss_content );
$counter++;
// Okay, now to our second sidebar. We make it short.
$active_widgets[ $sidebars['b'] ][] = 't5_demo_widget-' . $counter;
#$demo_widget_content = get_option( 'widget_t5_demo_widget', array() );
$demo_widget_content[ $counter ] = array ( 'text' => 'The second instance of our amazing demo widget.' );
update_option( 'widget_t5_demo_widget', $demo_widget_content );
// Now save the $active_widgets array.
update_option( 'sidebars_widgets', $active_widgets );
}
আপনি যদি wp-admin/widgets.php
এখন যান তবে আপনি তিনটি প্রাক-সেট উইজেট দেখতে পাবেন:
এবং এটাই. ব্যবহার করুন ...
dynamic_sidebar( 'top-widget' );
dynamic_sidebar( 'bottom-widget' );
... উইজেটগুলি মুদ্রণ করতে।
একটি ছোট ত্রুটি রয়েছে: প্রাথমিক রেজিস্ট্রেশনের জন্য আপনাকে প্রথম বারের প্রান্তটি লোড করতে হবে। যদি কেউ এখানে সহায়তা করতে পারে তবে আমি খুব কৃতজ্ঞ হব।