আপনি archive_template
নীচের স্কিমটি ব্যবহার করে কোনও থিমের সংরক্ষণাগার টেমপ্লেটের বিষয়বস্তু প্রসেস করতে হুক ব্যবহার করতে পারেন তবে স্পষ্টতই আপনি কেবল থিমগুলির একটি ভগ্নাংশ প্রক্রিয়া করতে সক্ষম হবেন, প্রদত্ত যে কোনও টেমপ্লেট মূলত কোনও পুরানো জিনিস থাকতে পারে ।
প্রকল্পটি হ'ল ফিল্টারটিতে টেমপ্লেটটি স্ট্রিংয়ের ( $tpl_str
) এ লোড করা archive_template
, আপনার সামগ্রীর বিকল্প তৈরি করা, স্ট্রিংটি অন্তর্ভুক্ত করা (ট্রিকটি ব্যবহার করে eval( '?>' . $tpl_str );
), এবং একটি ফাঁকা ফাইল ফিরিয়ে include
আনুন যাতে "wp-অন্তর্ভুক্ত / টেম্পলেট-লোডার.পিপি" একটি অপ-বিকল্প হয়ে ওঠে।
নীচে আমি প্লাগইনে ব্যবহার করি কোডটির একটি হ্যাক সংস্করণ রয়েছে, যা "ক্লাসিক" টেম্পলেটগুলিকে লক্ষ্য করে যেগুলি ব্যবহার করে get_template_part
এবং সংরক্ষণাগার থেকে একক টেমপ্লেট প্রসেসিংয়ের সাথে বেশি উদ্বেগযুক্ত তবে আপনাকে শুরু করতে সহায়তা করা উচিত। সেটআপটি হ'ল প্লাগইনটিতে "টেমপ্লেটস" নামে একটি উপ-ডিরেক্টরি রয়েছে যা একটি ফাঁকা ফাইল ("নাল। পিএফপি") এবং সামগ্রী টেম্পলেট (যেমন "সামগ্রী-একক-পোস্ট টাইপ 1.php", "সামগ্রী-সংরক্ষণাগার-পোস্ট টাইপ 1.php") ধারণ করে পাশাপাশি একটি একক ক্ষেত্রে "পিছনে পিছনে টেমপ্লেট" "একক। পিএফপি", এবং get_template_part
এই ডিরেক্টরিতে দেখায় এর একটি কাস্টম সংস্করণ ব্যবহার করে ।
define( 'MYPLUGIN_FOLDER', dirname( __FILE__ ) . '/' );
define( 'MYPLUGIN_BASENAME', basename( MYPLUGIN_FOLDER ) );
add_filter( 'single_template', 'myplugin_single_template' );
add_filter( 'archive_template', 'myplugin_archive_template' );
function myplugin_single_template( $template ) {
static $using_null = array();
// Adjust with your custom post types.
$post_types = array( 'posttype1', );
if ( is_single() || is_archive() ) {
$template_basename = basename( $template );
// This check can be removed.
if ( $template == '' || substr( $template_basename, 0, 4 ) == 'sing' || substr( $template_basename, 0, 4 ) == 'arch' ) {
$post_type = get_post_type();
$slug = is_archive() ? 'archive' : 'single';
if ( in_array( $post_type, $post_types ) ) {
// Allow user to override.
if ( $single_template = myplugin_get_template( $slug, $post_type ) ) {
$template = $single_template;
} else {
// If haven't gone through all this before...
if ( empty( $using_null[$slug][$post_type] ) ) {
if ( $template && ( $content_template = myplugin_get_template( 'content-' . $slug, $post_type ) ) ) {
$tpl_str = file_get_contents( $template );
// You'll have to adjust these regexs to your own case - good luck!
if ( preg_match( '/get_template_part\s*\(\s*\'content\'\s*,\s*\'' . $slug . '\'\s*\)/', $tpl_str, $matches, PREG_OFFSET_CAPTURE )
|| preg_match( '/get_template_part\s*\(\s*\'content\'\s*,\s*get_post_format\s*\(\s*\)\s*\)/', $tpl_str, $matches, PREG_OFFSET_CAPTURE )
|| preg_match( '/get_template_part\s*\(\s*\'content\'\s*\)/', $tpl_str, $matches, PREG_OFFSET_CAPTURE )
|| preg_match( '/get_template_part\s*\(\s*\'[^\']+\'\s*,\s*\'' . $slug . '\'\s*\)/', $tpl_str, $matches, PREG_OFFSET_CAPTURE ) ) {
$using_null[$slug][$post_type] = true;
$tpl_str = substr( $tpl_str, 0, $matches[0][1] ) . 'include \'' . $content_template . '\'' . substr( $tpl_str, $matches[0][1] + strlen( $matches[0][0] ) );
// This trick includes the $tpl_str.
eval( '?>' . $tpl_str );
}
}
}
if ( empty( $using_null[$slug][$post_type] ) ) {
// Failed to parse - look for fall back template.
if ( file_exists( MYPLUGIN_FOLDER . 'templates/' . $slug . '.php' ) ) {
$template = MYPLUGIN_FOLDER . 'templates/' . $slug . '.php';
}
} else {
// Success! "null.php" is just a blank zero-byte file.
$template = MYPLUGIN_FOLDER . 'templates/null.php';
}
}
}
}
}
return $template;
}
function myplugin_archive_template( $template ) {
return myplugin_single_template( $template );
}
প্রথা get_template_part
:
/*
* Version of WP get_template_part() that looks in theme, then parent theme, and finally in plugin template directory (sub-directory "templates").
* Also looks initially in "myplugin" sub-directory if any in theme and parent theme directories so that plugin templates can be kept separate.
*/
function myplugin_get_template( $slug, $part = '' ) {
$template = $slug . ( $part ? '-' . $part : '' ) . '.php';
$dirs = array();
if ( is_child_theme() ) {
$child_dir = get_stylesheet_directory() . '/';
$dirs[] = $child_dir . MYPLUGIN_BASENAME . '/';
$dirs[] = $child_dir;
}
$template_dir = get_template_directory() . '/';
$dirs[] = $template_dir . MYPLUGIN_BASENAME . '/';
$dirs[] = $template_dir;
$dirs[] = MYPLUGIN_FOLDER . 'templates/';
foreach ( $dirs as $dir ) {
if ( file_exists( $dir . $template ) ) {
return $dir . $template;
}
}
return false;
}
সম্পূর্ণতার জন্য এখানে "সিঙ্গল.এফপি" ফলের পিছনে ফিরে আসে, এটি কাস্টমটি ব্যবহার করে get_template_part
:
<?php
get_header(); ?>
<div id="primary" class="content-area">
<div id="content" class="clearfix">
<?php while ( have_posts() ) : the_post(); ?>
<?php if ( $template = myplugin_get_template( 'content-single', get_post_type() ) ) include $template; else get_template_part( 'content', 'single' ); ?>
<?php
// If comments are open or we have at least one comment, load up the comment template
if ( comments_open() || '0' != get_comments_number() ) :
comments_template();
endif;
?>
<?php endwhile; ?>
</div><!-- #content -->
</div><!-- #primary -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>