হেই, তুমি নবাগত! আমরা ছিঁড়ে ফেলছি!
জে / কে :) আমরা আপনাকে পেয়ে আনন্দিত, এখানে সমস্ত নবজাতকদের আন্তরিক স্বাগত জানাই।
সুতরাং এই তৃতীয়বারের মতো আমি এই প্রয়োজনীয়তাটি শুনেছি, ক্লায়েন্টের কাছ থেকে দুবার এবং আপনার কাছ থেকে আর না (এবং আপনার ক্লায়েন্ট)) এটি আমাকে বলে যে এটি একটি যুক্তিসঙ্গত সাধারণ প্রয়োজন।
আমি আপনার বিশ্লেষণ পছন্দ করেছি তাই আমি আপনার ২ য় পয়েন্টের জন্য একটি শ্রেণি কোড করার সিদ্ধান্ত নিয়েছি। আমি এটিকে ডাকলাম LittlePromoBoxes
কারণ আমি এই গানটি কখনই আমার মাথা থেকে বের করতে পারি না , তাদের ধন্যবাদ । মূলত আমি ক্লাসটি এনপ্যাপুলেট করতে ব্যবহার করি অন্যথায় আমার যে ফাংশনগুলি লিখতে হবে তার সাথে সম্ভাব্য নামকরণের বিরোধগুলি এড়ানোর জন্য।
আপনি এই থিমটি আপনার থিমের functions.php
ফাইলে বা একটি প্লাগইন এর .PHP ফাইলে রেখে দিতে পারেন যা আপনি লিখতে পারেন (তবে চিন্তা করবেন না, এটি এটি দেখতে অনেক জটিল দেখায়))
প্রথম ফাংশনটি on_load()
একটি স্ট্যাটিক ফাংশন যা আমি ক্লাস ঘোষণার শেষে কল করি আপনার তিনটি (3) হুকের আরম্ভ করার জন্য (ফাই স্ট্যাটিক ফাংশনগুলি মূলত শ্রেণীর সাথে সম্পর্কিত ফাংশন , উদাহরণ নয়) :
init
হুক রেজিস্টার promo-box
পোস্টে ধরন,
add_meta_boxes_post
হুক আপনি metabox সংজ্ঞায়িত করার অনুমতি দেয়, এবং
wp_insert_post_data
হুক আপনার নির্বাচিত প্রচার বক্স ক্যাপচার এবং ডাটাবেস সংরক্ষণ করতে অনুমতি দেয়।
এই হুকগুলির প্রত্যেকটি ক্লাসের আরও একটি স্থিতিশীল ফাংশন উল্লেখ করে (এগুলি ছিল ক্লাস তৈরির মাধ্যমে আমি আবদ্ধ করা ফাংশন))
আপনার প্রশ্নের উপর ভিত্তি করে কোনও পোস্ট টাইপ কীভাবে নিবন্ধ করতে হবে তা ধরে action_init()
নিয়ে আমি এই ফাংশনটি এবং আমার make_labels()
সহায়ক ফাংশনটি বর্ণনা করে এড়িয়ে যাব ।
action_add_meta_boxes_post()
ফাংশন metabox ওয়ার্ডপ্রেস কোর ফাংশন ব্যবহার করে খাতাপত্র add_meta_box()
এবং আমি তা এর পরামিতি মন্তব্য করেছি ব্যাখ্যা করতে কেন আমি পাশ কি আমি প্রত্যেকের জন্য গৃহীত। কলব্যাক ফাংশন the_little_promo_boxes_metabox()
অবশ্যই শ্রেণীর আরেকটি স্থিতিশীল ফাংশন এবং এটি হ'ল মেটাবক্সে সামগ্রীটি প্রদর্শন করে। এটি প্রধানত ওয়ার্ডপ্রেস মূল ফাংশনটি wp_dropdown_pages()
প্রোমো বাক্সগুলির একটি তালিকা প্রদর্শন করতে ব্যবহার করে (নোট করুন যে এটি 'পৃষ্ঠাগুলি' ছাড়াও অন্যান্য পোস্টের প্রকারগুলি প্রদর্শন করবে তবে কেবল যদি 'hierarchical'=>true
তাদের পোস্টের ধরণের নিবন্ধকরণ হিসাবে চিহ্নিত করা হয় only তবে কেবল শ্রেণিবদ্ধ কেন? কারণ তারা এইভাবেই এটি লিখেছেন, সে কারণেই! :)
যেহেতু আমরা তিনটি (3) ড্রপডাউন দেখিয়ে চলেছি আমাদের প্রত্যেককে এইচটিএমএল ( "promo_box_{$i}"
) তে আলাদা আলাদা আইডি দেওয়া দরকার তবে বর্গাকার বন্ধনী ( 'promo_boxes[]'
) সহ একই নামটি যাতে পিএইচপি তাদেরকে $_POST
ভেরিয়েবলের অভ্যন্তরে অ্যারে হিসাবে সংগ্রহ করতে পারে (যা আমাদের জন্য ওয়ার্ডপ্রেস অ্যাক্সেস করে; আপনি দেখতে পাবেন কীভাবে এক মিনিটে) । এবং অবশ্যই আমাদের নির্বাচিত মান ( (empty($promo_boxes[$i]) ? 0 : $promo_boxes[$i])
) নির্ধারণ করতে হবে যদি প্রকৃতপক্ষে কোনও মান আগেই নির্বাচিত হত।
get_post_type_object()
পোস্টের ধরণের লেবেলগুলি কীভাবে পাবেন তা দেখানোর জন্য আমি ওয়ার্ডপ্রেস কোর ফাংশনটিও get_post_meta()
ব্যবহার করেছি এবং কাস্টম ফিল্ড কী '_প্রোম_বক্সেস' ব্যবহার করে প্রোমো বাক্স আইডিগুলির একটি অ্যারের পুনরুদ্ধার করতে ওয়ার্ডপ্রেস কোর ফাংশনটি ব্যবহার করেছি যা আমি আপনাকে দেখাব পরবর্তী সংরক্ষণ করার জন্য (নোট আমি নামে একটি পূর্ববর্তী আন্ডারস্কোর ব্যবহার করেছি '_promo_boxes'
যা ব্যবহারকারীর পোস্ট সম্পাদনা করার সময় ওয়ার্ডপ্রেসকে স্ট্যান্ডার্ড কাস্টম ফিল্ড ইউআই থেকে আড়াল করে ।
কোডটি দেখার আগে বর্ণনার শেষ ফাংশনটি হ'ল filter_wp_insert_post_data()
যা প্রথম প্যারামিটারে বিদ্যমান পোস্ট ডেটা প্রাপ্ত করে ( $data
) এবং $_POST
দ্বিতীয় প্যারামিটার হিসাবে ওয়ার্ডপ্রেসকে অ্যারের সামগ্রীগুলি ( ) ধন্যবাদ জানায় $postarr
। এই ফাংশনের অভ্যন্তরে আমরা ওয়ার্ডপ্রেস মূল ফাংশনটি কল করি এবং অ্যারে (যেমন ) দ্বারা নির্দিষ্ট পোস্টের কীটির জন্য কাস্টম ফিল্ড মান সংরক্ষণ করতে update_post_meta()
প্রোমো বাক্স অ্যারে ( $postarr['promo_boxes']
) বের করি ract'_promo_boxes'
$_POST
$postarr['ID']
বলেছিল, এখানে LittlePromoBoxes
ক্লাসের কোড :
class LittlePromoBoxes {
static function on_load() {
add_action('init',array(__CLASS__,'action_init'));
add_action('add_meta_boxes_post',array(__CLASS__,'action_add_meta_boxes_post'));
add_filter('wp_insert_post_data',array(__CLASS__,'filter_wp_insert_post_data'),10,2);
}
static function action_init() {
register_post_type('promo-box',array(
'labels' => self::make_labels('Promo Box','Promo Boxes'),
'public_queryable'=> false,
'hierarchical' => true, // IMPORTANT!!! wp_dropdown_pages() requires 'hierarchical'=>true
'show_ui' => true,
'query_var' => false,
'supports' => array('title','editor','thumbnail','custom-fields'),
'show_in_nav_menus'=>true,
'exclude_from_search'=>true,
));
}
static function make_labels($singular,$plural=false,$args=array()) {
if ($plural===false)
$plural = $singular . 's';
elseif ($plural===true)
$plural = $singular;
$defaults = array(
'name' =>_x($plural,'post type general name'),
'singular_name' =>_x($singular,'post type singular name'),
'add_new' =>_x('Add New',$singular),
'add_new_item' =>__("Add New $singular"),
'edit_item' =>__("Edit $singular"),
'new_item' =>__("New $singular"),
'view_item' =>__("View $singular"),
'search_items' =>__("Search $plural"),
'not_found' =>__("No $plural Found"),
'not_found_in_trash'=>__("No $plural Found in Trash"),
'parent_item_colon' =>'',
);
return wp_parse_args($args,$defaults);
}
static function action_add_meta_boxes_post($post) {
add_meta_box(
'little-promo-boxes', // Metabox Name, used as the "id" for a wrapping div
'Little Promo Boxes', // Metabox Title, visible to the user
array(__CLASS__,'the_little_promo_boxes_metabox'), // Callback function
'post', // Add to the Edit screen for Post Types of 'post'
'side', // Show it in the sidebar (if center then it would be 'normal'
'low' // Show it below metaboxes that specify 'high'
);
}
static function the_little_promo_boxes_metabox($post) {
$pto = get_post_type_object('promo-box');
$default_options = array(
'post_type' => 'promo-box',
'show_option_none' => "Select a {$pto->labels->singular_name}",
);
$promo_boxes = get_post_meta($post->ID,'_promo_boxes',true);
for($i=0; $i<=2; $i++) {
wp_dropdown_pages(array_merge($default_options,array(
'id' => "promo_box_{$i}",
'name' => 'promo_boxes[]',
'selected' => (empty($promo_boxes[$i]) ? 0 : $promo_boxes[$i]),
)));
}
}
static function filter_wp_insert_post_data($data, $postarr) {
update_post_meta($postarr['ID'],'_promo_boxes',$postarr['promo_boxes']);
return $data;
}
static function get_promo_boxes($post=false) {
static $promo_boxes=array();
if (!$post)
$post = $GLOBALS['post'];
if (!isset($promo_boxes[$post->ID])) {
$promo_boxes[$post->ID] = get_post_meta($post->ID,'_promo_boxes',true);
$index = 0;
foreach($promo_boxes[$post->ID] as $promo_box_id) {
$promo_boxes[$post->ID][$index++] = (is_numeric($promo_box_id) ? get_post($promo_box_id) : false);
}
}
return $promo_boxes[$post->ID];
}
static function get_promo_box($number,$post=false) {
$promo_boxes = self::get_promo_boxes($post);
return $promo_boxes[$number-1];
}
}
LittlePromoBoxes::on_load();
এখনও দুটি (2) স্থির ফাংশন এখনও উল্লেখ করা হয়নি: get_promo_boxes()
এবং get_promo_box()
; এইগুলি post_type='promo-box'
তাদের সাধারণ সংখ্যা ১.৩ দ্বারা পোস্টগুলি পুনরুদ্ধারে আপনাকে সহায়তা করার জন্য সহায়তাকারী ফাংশন । তবে তাদের এখানে আরও ওয়ার্ডপ্রেস তৈরি করার জন্য আপনার থিমের functions.php
ফাইলটিতে যুক্ত করার জন্য দুটি র্যাপার ফাংশন রয়েছে (নোট করুন যে আপনি কোনও পোস্ট প্যারামিটার হিসাবে পাস করতে পারবেন তবে আপনি লুপের যে কোনও আলাদা পোস্ট ব্যবহার না করে তা করতে হবে না ) :
function get_little_promo_boxes($post=false) {
return LittlePromoBoxes::get_promo_boxes($post);
}
function get_little_promo_box($number,$post=false) {
return LittlePromoBoxes::get_promo_box($number,$post);
}
এখন আপনি আপনার single.php
থিম ফাইলে এই দুটি বা দুটি ফাংশনই কোড সহ কল করতে পারেন যা দেখতে এই জাতীয় দেখতে পারে (এই কোডটি কোনও লুপে লেখা যেতে পারে তবে বেশিরভাগ ওয়ার্ডপ্রেস থিমরা কোডকে নকল করতে পছন্দ করে বলে মনে হয় তারা অপ্রয়োজনীয়তা দূর করার পরিবর্তে এটি পড়তে পারে) সুতরাং, যখন রোমে ...):
<?php
$promo_boxes = get_little_promo_boxes();
if (isset($promo_boxes[1]))
echo '<div id="promo-box1" class="promo-box">' . get_the_title($promo_boxes[1]->ID) . '</div>';
if (isset($promo_boxes[2]))
echo '<div id="promo-box2" class="promo-box">' . get_the_title($promo_boxes[2]->ID) . '</div>';
if (isset($promo_boxes[3]))
echo '<div id="promo-box3" class="promo-box">' . get_the_title($promo_boxes[3]->ID) . '</div>';
?>