খারাপ সংবাদের ধারক হতে ঘৃণা তবে ওয়ার্ডপ্রেস কমপক্ষে v3.0 এ "পৃষ্ঠা" পোস্ট ধরণের পৃষ্ঠা টেম্পলেট কার্যকারিতাটিকে হার্ডকোড করে (এটি ভবিষ্যতের সংস্করণগুলিতে পরিবর্তিত হতে পারে তবে এটি পরিবর্তন করার বিষয়ে আমি সচেতন একটি নির্দিষ্ট উদ্যোগ নেই) তবুও। সুতরাং আমি হ্যাকিং কোর ছাড়াই কীভাবে কোনও কিছু পেতে পারি তা নির্ধারণের জন্য খুব সংগ্রাম করছি times
আমি যে সমাধানটি নিয়ে এসেছি তা হ'ল মূলত ওয়ার্ডপ্রেস কোর থেকে প্রাসঙ্গিক কোডটি অনুলিপি করা এবং এটি আমাদের প্রয়োজনে সংশোধন করা। পদক্ষেপগুলি এখানে রয়েছে (লাইন নম্বরগুলি v3.0.1 এর থেকে রয়েছে):
page_attributes_meta_box()535 এর লাইন থেকে ফাংশনটি অনুলিপি করুন/wp-admin/includes/meta-boxes.php এবং মামলা অনুসারে পরিবর্তন করুন।
add_meta_boxes# 1-এ তৈরি মেটাবক্স যুক্ত করতে একটি হুক কোড করুন।
get_page_templates()166 এর লাইন থেকে ফাংশনটি অনুলিপি করুন/wp-admin/includes/theme.php
এবং মামলা অনুসারে পরিবর্তন করুন।
page_template_dropdown()2550 এর লাইন থেকে ফাংশনটি অনুলিপি করুন/wp-admin/includes/template.php এবং মামলা অনুসারে পরিবর্তন করুন।
আপনার থিমটিতে একটি পোস্ট টেম্পলেট যুক্ত করুন ।
save_postসংরক্ষণের পরে পোস্ট টেম্পলেট ফাইলের নাম সংরক্ষণ করতে সক্ষম করতে একটি হুক কোড করুন।
single_templateসম্পর্কিত পোস্টগুলির জন্য পোস্ট টেমপ্লেটের লোড সক্ষম করতে একটি হুক কোড করুন ।
এখন এটি দিয়ে!
1. page_attributes_meta_box()ফাংশনটি অনুলিপি করুন
আমাদের প্রথম পদক্ষেপ হিসাবে আপনার page_attributes_meta_box()ফাংশনটি 535 এর লাইন থেকে অনুলিপি করা উচিত /wp-admin/includes/meta-boxes.phpএবং আমি এটির নাম পরিবর্তন করতে বেছে নিয়েছি post_template_meta_box()। যেহেতু আপনি কেবল পৃষ্ঠা টেম্পলেটগুলির জন্য বলেছেন, আমি কোনও পিতামাতার পোস্ট নির্দিষ্ট করার জন্য এবং কোডটি আরও সহজ করে তোলে এমন ক্রম নির্দিষ্ট করার জন্য কোড বাদ দিয়েছি। আমি অনিচ্ছাকৃত মিলনের page_templateকারণে সৃষ্ট সম্ভাব্য অসম্পূর্ণতাগুলি এড়ানোর জন্য অবজেক্ট সম্পত্তিটি পুনরায় ব্যবহার করার চেষ্টা করার পরিবর্তে এর জন্য পোস্টমেটা ব্যবহার করাও বেছে নিয়েছি । সুতরাং এখানে কোড:
function post_template_meta_box($post) {
if ( 'post' == $post->post_type && 0 != count( get_post_templates() ) ) {
$template = get_post_meta($post->ID,'_post_template',true);
?>
<label class="screen-reader-text" for="post_template"><?php _e('Post Template') ?></label><select name="post_template" id="post_template">
<option value='default'><?php _e('Default Template'); ?></option>
<?php post_template_dropdown($template); ?>
</select>
<?php
} ?>
<?php
}
২. একটি add_meta_boxesহুক কোড করুন
পরবর্তী পদক্ষেপ add_meta_boxesহুক ব্যবহার করে মেটাবক্স যুক্ত করা :
add_action('add_meta_boxes','add_post_template_metabox');
function add_post_template_metabox() {
add_meta_box('postparentdiv', __('Post Template'), 'post_template_meta_box', 'post', 'side', 'core');
}
৩. get_page_templates()ফাংশনটি অনুলিপি করুন
আমি ধরে নিয়েছি এটি কেবলমাত্র পৃষ্ঠা টেমপ্লেট এবং পোস্ট টেমপ্লেটের মধ্যে পার্থক্য করা বোধগম্য হবে সুতরাং এর লাইন 166 এর get_post_templates()উপর ভিত্তি করে কোনও ফাংশনের প্রয়োজন । তবে কোন পৃষ্ঠার টেমপ্লেটগুলি এই ফাংশনটি ব্যবহার করে তা চিহ্নিতকারী ব্যবহার করার পরিবর্তে আপনি নীচে দেখতে পাচ্ছেন যা পরিবর্তক ব্যবহার করে।get_page_templates()/wp-admin/includes/theme.phpTemplate Name:Post Template:
আমিও পরিদর্শন ফিল্টার functions.php (কীভাবে করবেন নিশ্চিত নন get_page_templates()কি কখনো সঠিকভাবে যে ছাড়া কাজ করেন, কিন্তু যাই হোক না কেন!) আর একমাত্র জিনিস বাম শব্দ পরিবর্তন রেফারেন্স হয় pageথেকে postরাস্তায় রক্ষণাবেক্ষণ পাঠযোগ্যতা জন্য:
function get_post_templates() {
$themes = get_themes();
$theme = get_current_theme();
$templates = $themes[$theme]['Template Files'];
$post_templates = array();
if ( is_array( $templates ) ) {
$base = array( trailingslashit(get_template_directory()), trailingslashit(get_stylesheet_directory()) );
foreach ( $templates as $template ) {
$basename = str_replace($base, '', $template);
if ($basename != 'functions.php') {
// don't allow template files in subdirectories
if ( false !== strpos($basename, '/') )
continue;
$template_data = implode( '', file( $template ));
$name = '';
if ( preg_match( '|Post Template:(.*)$|mi', $template_data, $name ) )
$name = _cleanup_header_comment($name[1]);
if ( !empty( $name ) ) {
$post_templates[trim( $name )] = $basename;
}
}
}
}
return $post_templates;
}
৪. page_template_dropdown()ফাংশনটি অনুলিপি করুন
একইভাবে তৈরি করতে page_template_dropdown()2550 লাইন থেকে অনুলিপি করুন এবং কেবল পরিবর্তে কল করতে এটি পরিবর্তন করুন:/wp-admin/includes/template.phppost_template_dropdown()get_post_templates()
function post_template_dropdown( $default = '' ) {
$templates = get_post_templates();
ksort( $templates );
foreach (array_keys( $templates ) as $template )
: if ( $default == $templates[$template] )
$selected = " selected='selected'";
else
$selected = '';
echo "\n\t<option value='".$templates[$template]."' $selected>$template</option>";
endforeach;
}
৫. একটি পোস্ট টেম্পলেট যুক্ত করুন
পরবর্তী পদক্ষেপটি পরীক্ষার জন্য একটি পোস্ট টেম্পলেট যুক্ত করা হয়। আপনার থিমটি থেকে Post Template:পদক্ষেপ # 3 অনুলিপিটিতে উল্লিখিত চিহ্নিতকারীটি ব্যবহার করে নিম্নলিখিত মন্তব্য শিরোনামটি যুক্ত করুন (এতে কোনও কিছু সংশোধন করতে ভুলবেন না যাতে আপনি এটির পরিবর্তে লোড হচ্ছে তা বলতে পারেন ) :single.phpsingle-test.phpsingle-test.phpsingle.php
/**
* Post Template: My Test Template
*/
আপনি # 1 এর মাধ্যমে # 5 পদক্ষেপগুলি সম্পন্ন করার পরে আপনি আপনার পোস্ট সম্পাদক পৃষ্ঠায় আপনার "পোস্ট টেম্পলেট" মেটাবক্সটি দেখতে পাবেন :

(সূত্র: মাইকসচিনেল.কম )
6. একটি save_postহুক কোড করুন
এখন যখন আপনার এডিটরটি দূরে সরে গেছে তখন ব্যবহারকারী যখন "প্রকাশনা" ক্লিক করেন তখন আপনার পোস্ট টেম্পলেট ফাইলের নামটি পোস্টমেটায় সংরক্ষণ করতে হবে। এর জন্য কোডটি এখানে:
add_action('save_post','save_post_template',10,2);
function save_post_template($post_id,$post) {
if ($post->post_type=='post' && !empty($_POST['post_template']))
update_post_meta($post->ID,'_post_template',$_POST['post_template']);
}
7. একটি single_templateহুক কোড করুন
এবং সর্বশেষে আপনার নতুন পোস্ট টেমপ্লেটগুলি ব্যবহার করার জন্য আপনাকে আসলে ওয়ার্ডপ্রেস নেওয়া দরকার। আপনি যে single_templateপোস্টগুলি নিয়োগ করেছেন তাদের জন্য আপনার কাঙ্ক্ষিত টেম্পলেট নামটি হুক করে এবং ফিরে দিয়ে:
add_filter('single_template','get_post_template_for_template_loader');
function get_post_template_for_template_loader($template) {
global $wp_query;
$post = $wp_query->get_queried_object();
if ($post) {
$post_template = get_post_meta($post->ID,'_post_template',true);
if (!empty($post_template) && $post_template!='default')
$template = get_stylesheet_directory() . "/{$post_template}";
}
return $template;
}
এবং এটি সম্পর্কে!
দ্রষ্টব্য যে আমি কাস্টম পোস্ট প্রকারগুলি বিবেচনা করি নি , কেবলমাত্র । আমার মতে কাস্টম পোস্ট ধরণের সম্বোধনের জন্য বিভিন্ন পোস্টের ধরণের মধ্যে পার্থক্য করা প্রয়োজন এবং অত্যধিক কঠিন না হলেও, আমি এখানে এটি চেষ্টা করি নি।post_type=='post'