আপনার ওয়ার্ডপ্রেস থিমের ফাংশন.পিপি ফাইলগুলিতে কোড সংগঠিত করছেন?


92

ওয়ার্ডপ্রেসে আমি যত বেশি কাস্টমাইজেশন করি ততই আমি এই ফাইলটি সংগঠিত করা বা এটির বিভাজন করা উচিত কিনা তা নিয়ে ভাবতে শুরু করি।

আরও সুনির্দিষ্টভাবে, যদি আমার কাছে একগুচ্ছ কাস্টম ফাংশন থাকে যা কেবলমাত্র অ্যাডমিন অঞ্চল এবং অন্যদের জন্য প্রযোজ্য যা কেবলমাত্র আমার পাবলিক ওয়েবসাইটে প্রয়োগ হয় তাদের সমস্ত ফাইলের অ্যাডমিন ফাংশনগুলি সম্ভবত তাদের নিজস্ব ফাইলের মধ্যে অন্তর্ভুক্ত করার বা তাদের একসাথে গ্রুপ করার কোনও কারণ আছে?

এগুলি আলাদা ফাইলগুলিতে বিভক্ত করা বা তাদের একত্রে গ্রুপিং করা সম্ভবত কোনও ওয়ার্ডপ্রেস ওয়েবসাইটের গতি বাড়িয়ে দেয় বা ওয়ার্ডপ্রেস / পিএইচপি স্বয়ংক্রিয়ভাবে কোনও ফাংশনগুলি বাদ দেয় যা একটি আইসডিন কোড উপসর্গ আছে?

একটি বৃহত ফাংশন ফাইলের সাথে ডিল করার সর্বোত্তম উপায়টি কী (খনিটি 1370 লাইন দীর্ঘ)।

উত্তর:


120

যদি আপনি এমন পয়েন্টে পৌঁছে যাচ্ছেন যেখানে আপনার থিমের কোড functions.phpআপনাকে অভিভূত করতে শুরু করেছে আমি অবশ্যই বলব যে আপনি এটিকে একাধিক ফাইলে বিভক্ত করার বিষয়ে বিবেচনা করতে প্রস্তুত। আমি প্রায় দ্বিতীয় পর্যায়ে এটি করতে ঝোঁক।

ব্যবহার আপনার থিম এর ফাইল অন্তর্ভুক্ত functions.phpফাইল

আমি আমার থিম ডিরেক্টরিতে অন্তর্ভুক্ত "অন্তর্ভুক্ত" নামে একটি উপ-ডিরেক্টরি তৈরি করি এবং আমার কোডটি সেগুলিতে অন্তর্ভুক্ত করা ফাইলগুলিকে অন্তর্ভুক্ত করে যা আমার কাছে সেই সময়টি বোধগম্য করে তোলে (যার অর্থ আমি সাইটের ক্রমবর্ধমান হওয়ার সাথে সাথে ক্রমাগত রিফেক্টরিং এবং কোডটি ঘুরে বেড়াচ্ছি)) আমি খুব কমই কোনও বাস্তব কোড রাখুন functions.php; সবকিছু অন্তর্ভুক্ত ফাইল মধ্যে যায়; শুধু আমার পছন্দ।

কেবলমাত্র এখানে একটি উদাহরণ দেওয়ার জন্য আমার পরীক্ষার ইনস্টল করুন যা আমি এখানে আমার উত্তরগুলির পরীক্ষার জন্য ওয়ার্ডপ্রেস উত্তরগুলিতে ব্যবহার করি। আমি যখনই কোনও প্রশ্নের উত্তর দিই তখন কোডটি আমার আবার প্রয়োজনের মধ্যে রাখি। এটি কোনও লাইভ সাইটের জন্য ঠিক কী করবেন তা নয় তবে এটি কোডটি বিভক্ত করার কৌশলগুলি দেখায়:

<?php 
/*
 * functions.php
 * 
 */
require_once( __DIR__ . '/includes/null-meta-compare.php');
require_once( __DIR__ . '/includes/older-examples.php');
require_once( __DIR__ . '/includes/wp-admin-menu-classes.php');
require_once( __DIR__ . '/includes/admin-menu-function-examples.php');

// WA: Adding a Taxonomy Filter to Admin List for a Custom Post Type?
// http://wordpress.stackexchange.com/questions/578/
require_once( __DIR__ . '/includes/cpt-filtering-in-admin.php'); 
require_once( __DIR__ . '/includes/category-fields.php');
require_once( __DIR__ . '/includes/post-list-shortcode.php');
require_once( __DIR__ . '/includes/car-type-urls.php');
require_once( __DIR__ . '/includes/buffer-all.php');
require_once( __DIR__ . '/includes/get-page-selector.php');

// http://wordpress.stackexchange.com/questions/907/
require_once( __DIR__ . '/includes/top-5-posts-per-category.php'); 

// http://wordpress.stackexchange.com/questions/951/
require_once( __DIR__ . '/includes/alternate-category-metabox.php');  

// http://lists.automattic.com/pipermail/wp-hackers/2010-August/034384.html
require_once( __DIR__ . '/includes/remove-status.php');  

// http://wordpress.stackexchange.com/questions/1027/removing-the-your-backup-folder-might-be-visible-to-the-public-message-generate
require_once( __DIR__ . '/includes/301-redirects.php');  

অথবা প্লাগইন তৈরি করুন

ফাংশন দ্বারা আপনার কোডকে গোষ্ঠীকরণ করা এবং আপনার নিজের প্লাগইনগুলি তৈরি করা এটির আর একটি বিকল্প। আমার জন্য আমি থিমের functions.phpফাইলে কোডিং শুরু করি এবং কোডটি বের হওয়ার সাথে সাথে আমি আমার বেশিরভাগ কোড প্লাগইনগুলিতে সরিয়ে নিয়েছি।

তবে পিএইচপি কোড সংস্থা থেকে কোনও উল্লেখযোগ্য পারফরম্যান্স পাওয়া যায়নি

অন্যদিকে আপনার পিএইচপি ফাইলগুলি কাঠামো তৈরির ক্ষেত্রে রক্ষণাবেক্ষণ এবং রক্ষণাবেক্ষণযোগ্যতা তৈরির বিষয়ে 99% এবং কর্মক্ষমতা সম্পর্কে 1%, যদি তা ( এইচটিটিপি-র মাধ্যমে ব্রাউজার দ্বারা আহ্বান করা .jsএবং .cssফাইলগুলি সম্পূর্ণ ভিন্ন ক্ষেত্রে হয় এবং এর বিশাল কার্যকারিতা জড়িত থাকে)) তবে আপনি কীভাবে সংগঠিত হন সার্ভারে আপনার পিএইচপি কোডটি পারফরম্যান্সের দৃষ্টিকোণ থেকে বেশ কিছু যায় আসে না।

এবং কোড সংস্থা ব্যক্তিগত পছন্দ is

এবং সর্বশেষে তবে সর্বনিম্ন নয় কোড সংগঠনটি ব্যক্তিগত পছন্দ। কিছু লোক ঘৃণা করবে আমি কীভাবে কোডটি সংগঠিত করব ঠিক তেমনই তারা ঘৃণা করতে পারে। আপনার পছন্দ মতো কিছু সন্ধান করুন এবং এটিতে আটকে থাকুন তবে আপনার কৌশলটি আপনি আরও শিখতে এবং এর সাথে আরও আরামদায়ক হওয়ার সাথে সাথে সময়ের সাথে বিকশিত হওয়ার অনুমতি দিন।


সুন্দর উত্তর, আমি সবেমাত্র এই জায়গায় পৌঁছেছি যেখানে আমার ফাংশন ফাইলটি বিভক্ত করা দরকার। আপনি কখন ভাবেন যে frunitions.php থেকে একটি প্লাগইনে সরানো সহজ? আপনি আপনার উত্তরে বলেছিলেন: আমি কোডটি বের হওয়ার সাথে সাথে আমি আমার বেশিরভাগ কোড প্লাগইনগুলিতে সরিয়ে নিয়েছি । আমি পুরোপুরি বুঝতে পারছি না, আপনি কীভাবে বোঝাচ্ছেন do
সাইফ বেকহান

5
"বা প্লাগইন তৈরি করুন" এর জন্য +1। আরও সুনির্দিষ্টভাবে, " কার্যকারিতা প্লাগইন "
ইয়ান ডান

3
আপেক্ষিক পাথ ব্যবহার সব ধরণের সেটিংসে নির্ভরযোগ্য নাও হতে পারে, তার পরিবর্তে সর্বদা সঠিক পথটি ব্যবহার করা উচিত
মার্ক কাপলুন

2
@ মার্কক্যাপলুন - আপনি একেবারে সঠিক। যেহেতু আমি এই উত্তরটি লিখেছি আমি সেই পাঠটি শক্তভাবে শিখেছি। আমি আমার উত্তর আপডেট করতে যাচ্ছি। এই বিষয়টি চিহ্নিত করার জন্য ধন্যবাদ.
মাইকচিন্কেল

আমি পেতে "অনির্ধারিত ধ্রুবক ব্যবহার থেকে DIR - অধিকৃত ' থেকে DIR ' সি: \ wamp \ WWW \ সাইটে \ WP- বিষয়বস্তু \ থিম \ mytheme \ থিমের functions.php" - পিএইচপি v5.6.25 এবং পিএইচপি v7.0.10 - আমি পারব না মন্তব্যে এই ডিআইআর সঠিকভাবে ফর্ম্যাট করুন (আন্ডারসন্ডারসोरসিরউন্ডসরস্কোরসাইনস্কোর) তবে এটি ডেরনামের সাথে কাজ করে (আন্ডারসাইন্ডারসकोरফিল্ডসোর্ডারসাইনসর)
মার্কো

50

বিলম্বিত উত্তর

কীভাবে আপনার ফাইলগুলি সঠিকভাবে অন্তর্ভুক্ত করবেন:

function wpse1403_bootstrap()
{
    // Here we load from our includes directory
    // This considers parent and child themes as well    
    locate_template( array( 'inc/foo.class.php' ), true, true );
}
add_action( 'after_setup_theme', 'wpse1403_bootstrap' );

প্লাগিনগুলিতেও একই কাজ করে।

কীভাবে সঠিক পথ বা ইউআরআই পাবেন

ফাইল সিস্টেমের এপিআই ফাংশনগুলি দেখুন:

  • home_url()
  • plugin_dir_url()
  • plugin_dir_path()
  • admin_url()
  • get_template_directory()
  • get_template_directory_uri()
  • get_stylesheet_directory()
  • get_stylesheet_directory_uri()
  • প্রভৃতি

কিভাবে সংখ্যা হ্রাস করা যায় include/require

আপনার যদি কোনও ডিরেক্টরি থেকে সমস্ত ফাইল আনার প্রয়োজন হয় তবে যান

foreach ( glob( 'path/to/folder/*.php' ) as $file )
    include $file;

মনে রাখবেন যে এটি ব্যর্থতা (উত্পাদন ব্যবহারের পক্ষে ভাল) / লোডযোগ্য ফাইলগুলি উপেক্ষা করে।

এই আচরণটি পরিবর্তন করতে আপনি বিকাশের সময় একটি আলাদা কনফিগার ব্যবহার করতে চাইতে পারেন:

$files = ( defined( 'WP_DEBUG' ) AND WP_DEBUG )
    ? glob( 'path/to/folder/*.php', GLOB_ERR )
    : glob( 'path/to/folder/*.php' )

foreach ( $files as $file )
    include $file;

সম্পাদনা করুন: ওওপি / এসপিএল পদ্ধতির

আমি যখন ফিরে এসেছি এবং দেখেছি যে এই উত্তরটি আরও বেশি পরিমাণে উত্সাহ পাচ্ছে, আমি ভেবেছিলাম যে আমি আজকাল এটি কীভাবে করছি - একটি পিএইচপি 5.3+ বিশ্বে show নীচের উদাহরণটি থিম সাবফোল্ডার নামের একটি ফাইল থেকে সমস্ত ফাইল লোড করে src/। এখানে আমার লাইব্রেরি রয়েছে যা মেনু, চিত্র ইত্যাদির মতো নির্দিষ্ট কাজগুলি পরিচালনা করে যা প্রতিটি ফাইল লোড হওয়ার সাথে সাথে আপনাকে নামটিরও যত্ন নিতে হবে না। এই ডিরেক্টরিতে আপনার যদি অন্য সাবফোল্ডার থাকে তবে সেগুলি উপেক্ষা করা হবে।

\FilesystemIteratorপিএইচপি 5.3+ হয় supercedor উপর \DirectoryIterator। দুজনেই পিএইচপি এসপিএলের অংশ। পিএইচপি 5.2 এর ফলে বিল্টটি এসপিএল এক্সটেনশানটি বন্ধ করা সম্ভব করে (সমস্ত ইনস্টলের 1% এর নীচে এটি করেছে), এসপিএল এখন পিএইচপি মূল অংশ part

<?php

namespace Theme;

$files = new \FilesystemIterator( __DIR__.'/src', \FilesystemIterator::SKIP_DOTS );
foreach ( $files as $file )
{
    /** @noinspection PhpIncludeInspection */
    ! $files->isDir() and include $files->getRealPath();
}

উত্তর: পূর্বে যখন আমি এখনও পিএইচপি 5.2.x সমর্থিত আমি নিম্নলিখিত সমাধান ব্যবহৃত \FilterIteratorমধ্যে src/Filtersডিরেক্টরি শুধুমাত্র ফাইল (ও ফোল্ডারের পয়েন্টার বিন্দু নয়) উদ্ধার করতে হবে এবং একটি \DirectoryIteratorlooping এবং লোডিং না।

namespace Theme;

use Theme\Filters\IncludesFilter;

$files = new IncludesFilter( new \DirectoryIterator( __DIR__.'/src' ) );
foreach ( $files as $file )
{
    include_once $files->current()->getRealPath();
}

\FilterIteratorযে হিসাবে হিসাবে সহজ ছিল:

<?php

namespace Theme\Filters;

class IncludesFilter extends \FilterIterator
{
    public function accept()
    {
        return
            ! $this->current()->isDot()
            and $this->current()->isFile()
            and $this->current()->isReadable();
    }
}

পিএইচপি 5.2 এখনই মারা যাওয়া / ইওএল পাশাপাশি (এবং পাশাপাশি 5.3), সত্য যে এটি আরও কোড এবং গেমটিতে আরও একটি ফাইল রয়েছে, তাই পরবর্তীকালে যাওয়ার এবং পিএইচপি 5.2.x সমর্থন করার কোনও কারণ নেই the

সংকলিত

আরও গভীরতার নিবন্ধটি ডাব্লুপিক্রাটসে এখানে পাওয়া যাবে

সম্পাদনা স্পষ্টতই সঠিক উপায় হল namespaceডি কোড ব্যবহার করা , পিএসআর -4 অটোলয়েডিংয়ের জন্য প্রস্তুত করা হয়েছে যথাযথ ডিরেক্টরিতে যা ইতিমধ্যে নেমস্পেসের মাধ্যমে সংজ্ঞায়িত করা হয়েছে putting তারপরে আপনার নির্ভরতাগুলি পরিচালনা করতে কেবল সুরকার এবং একটি ব্যবহার করুন এবং composer.jsonএটি আপনার পিএইচপি অটোলোডারকে স্বয়ংক্রিয়ভাবে তৈরি করতে দিন (যা কেবল কল করে স্বয়ংক্রিয়ভাবে কোনও ফাইল আমদানি করে use \<namespace>\ClassName)। এটি পিএইচপি ওয়ার্ল্ডের ডি-ফ্যাক্টো স্ট্যান্ডার্ড, যাওয়ার সহজতম উপায় এবং আরও প্রাক-স্বয়ংক্রিয় এবং ডাব্লুপি স্টার্টার দ্বারা সরলীকৃত ।


5

এটি ভেঙে দেওয়ার ক্ষেত্রে, আমার বয়লার প্লেটে আমি থিম ডিরেক্টরিতে ফাংশন নামক একটি ফোল্ডার সন্ধান করতে একটি কাস্টম ফাংশন ব্যবহার করি, যদি এটি না থাকে তবে এটি তৈরি করে। তারপরে সেই সমস্ত ফোল্ডারে এটি খুঁজে পাওয়া সমস্ত .php ফাইলগুলির একটি অ্যারে তৈরি করা হয় (যদি থাকে) এবং একটি অন্তর্ভুক্ত () চালায়; তাদের প্রতিটি উপর।

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

<?php
/* 
FUNCTIONS for automatically including php documents from the functions folder.
*/
//if running on php4, make a scandir functions
if (!function_exists('scandir')) {
  function scandir($directory, $sorting_order = 0) {
    $dh = opendir($directory);
    while (false !== ($filename = readdir($dh))) {
      $files[] = $filename;
    }
    if ($sorting_order == 0) {
      sort($files);
    } else {
      rsort($files);
    }
    return ($files);
  }
}
/*
* this function returns the path to the funtions folder.
* If the folder does not exist, it creates it.
*/
function get_function_directory_extension($template_url = FALSE) {
  //get template url if not passed
  if (!$template_url)$template_url = get_bloginfo('template_directory');


  //replace slashes with dashes for explode
  $template_url_no_slash = str_replace('/', '.', $template_url);

  //create array from URL
  $template_url_array = explode('.', $template_url_no_slash);

  //--splice array

  //Calculate offset(we only need the last three levels)
  //We need to do this to get the proper directory, not the one passed by the server, as scandir doesn't work when aliases get involved.
  $offset = count($template_url_array) - 3;

  //splice array, only keeping back to the root WP install folder (where wp-config.php lives, where the front end runs from)
  $template_url_array = array_splice($template_url_array, $offset, 3);
  //put back togther as string
  $template_url_return_string = implode('/', $template_url_array);
  fb::log($template_url_return_string, 'Template'); //firephp

  //creates current working directory with template extention and functions directory    
  //if admin, change out of admin folder before storing working dir, then change back again.
  if (is_admin()) {
    $admin_directory = getcwd();
    chdir("..");
    $current_working_directory = getcwd();
    chdir($admin_directory);
  } else {
    $current_working_directory = getcwd();
  }
  fb::log($current_working_directory, 'Directory'); //firephp

  //alternate method is chdir method doesn't work on your server (some windows servers might not like it)
  //if (is_admin()) $current_working_directory = str_replace('/wp-admin','',$current_working_directory);

  $function_folder = $current_working_directory . '/' . $template_url_return_string . '/functions';


  if (!is_dir($function_folder)) mkdir($function_folder); //make folder, if it doesn't already exist (lazy, but useful....ish)
  //return path
  return $function_folder;

}

//removed array elements that do not have extension .php
function only_php_files($scan_dir_list = false) {
  if (!$scan_dir_list || !is_array($scan_dir_list)) return false; //if element not given, or not array, return out of function.
  foreach ($scan_dir_list as $key => $value) {
    if (!strpos($value, '.php')) {

      unset($scan_dir_list[$key]);
    }
  }
  return $scan_dir_list;
}
//runs the functions to create function folder, select it,
//scan it, filter only PHP docs then include them in functions

add_action('wp_head', fetch_php_docs_from_functions_folder(), 1);
function fetch_php_docs_from_functions_folder() {

  //get function directory
  $functions_dir = get_function_directory_extension();
  //scan directory, and strip non-php docs
  $all_php_docs = only_php_files(scandir($functions_dir));

  //include php docs
  if (is_array($all_php_docs)) {
    foreach ($all_php_docs as $include) {
      include($functions_dir . '/' . $include);
    }
  }

}

5
@ মিল্ডফুজ : দুর্দান্ত কৌশল আমি ব্যক্তিগতভাবে এটি উত্পাদন কোডের জন্য ব্যবহার করব না কারণ এটি প্রতিটি পৃষ্ঠা লোডের জন্য করে যা আমরা সাইটটি চালু করার সময় একবার সহজেই করতে পারি। এছাড়াও, আমি ফাইলগুলি বাদ দিতে কোনও উপায়ে যুক্ত করব, যেমন আন্ডারস্কোর দিয়ে শুরু করে কোনও কিছু লোড না করা যাতে আমি থিম ডিরেক্টরিতে এখনও কাজ চালিয়ে যেতে পারি। অন্যথায়, দুর্দান্ত!
মাইকচিন্কেল

ধারণাটি পছন্দ করুন তবে আমি সম্মত হচ্ছি এটি সম্ভবত প্রতিটি অনুরোধের জন্য অপ্রয়োজনীয় লোড হতে পারে। কোনও ধারণা যদি চূড়ান্ত ফাংশন.ফ.পি.পি. ফাইল তৈরি করা যায় তবে কিছু ফাইল আপডেটের সাথে স্বয়ংক্রিয়ভাবে ক্যাশে হবে যদি / যখন নতুন ফাইল যুক্ত হয় বা নির্দিষ্ট সময় অন্তর থাকে?
নেটকন্সট্রাক্টর.কম

দুর্দান্ত তবে এটি জটিলতার দিকে নিয়ে যায়, এছাড়াও যদি কোনও আক্রমণকারী তাদের কোডটি সেখানে ফেলে দেওয়ার ব্যবস্থা করে? এবং যদি অন্তর্ভুক্ত করার ক্রমটি গুরুত্বপূর্ণ হয় তবে কী হবে?
টম জে নোয়েল

1
@ মাইকস্কিঙ্কেল আমি কেবল আমার ওয়ার্কিং ফাইলগুলিকে foo._php কল করি, তারপরে যখন আমি এটি চালাতে চাই তখন _ পিএইচপি ছেড়ে দিন।
হালকা Fuzz

@ নেটকন্সট্রাক্টর: কিছুটা সমাধানেও আগ্রহী হবেন।
কায়সার

5

আমি একটি ফোল্ডারের ভিতরে থাকা ফাইলগুলিতে একটি ফাংশন ব্যবহার করতে চাই। এই পদ্ধতির নতুন ফাইল যুক্ত করার সময় নতুন বৈশিষ্ট্য যুক্ত করা সহজ করে তোলে। তবে আমি সর্বদা ক্লাসে বা নেমস্পেসের সাথে লিখি - এটিকে ফাংশন, পদ্ধতি ইত্যাদির নেমস্পেস সম্পর্কে আরও নিয়ন্ত্রণ দেয়

একটি ছোট উদাহরণ নীচে; ক্লাস *। php সম্পর্কে চুক্তির সাথে ইউটিও ব্যবহার

public function __construct() {

    $this->load_classes();
}

/**
 * Returns array of features, also
 * Scans the plugins subfolder "/classes"
 *
 * @since   0.1
 * @return  void
 */
protected function load_classes() {

    // load all files with the pattern class-*.php from the directory classes
    foreach( glob( dirname( __FILE__ ) . '/classes/class-*.php' ) as $class )
        require_once $class;

}

থিমগুলিতে আমি প্রায়শই অন্য দৃশ্যের ব্যবহার করি। আমি একটি সমর্থন আইডিতে এক্সটার্নেল ফাইলটির কার্যকারিতা সংজ্ঞায়িত করি, উদাহরণটি দেখুন। এটি ব্যবহারযোগ্য যদি আমি সহজেই এক্সটার্নেল ফাইলটির ফিউচারটি নিষ্ক্রিয় করব। আমি ডাব্লুপি কোর ফাংশনটি ব্যবহার করি require_if_theme_supports()এবং সে কেবল সমর্থন করে, যদি সমর্থন আইডি সক্রিয় ছিল। নিম্নলিখিত উদাহরণে আমি ফাইলটি লোড করার আগে লাইনে এই সমর্থিত আইডিটি ডিফেন্ড করেছি।

    /**
     * Add support for Theme Customizer
     * 
     * @since  09/06/2012
     */
    add_theme_support( 'documentation_customizer', array( 'all' ) );
    // Include the theme customizer for options of theme options, if theme supported
    require_if_theme_supports( 
        'documentation_customizer',
        get_template_directory() . '/inc/theme-customize.php'
    );

আপনি এই থিমটির রেপোতে আরও দেখতে পারেন ।


4

আমি একটি নেটওয়ার্ক ইনস্টলেশন থেকে সার্ভারাল বিভিন্ন ভাষায় প্রায় 50 অনন্য কাস্টম পৃষ্ঠার ধরণের একটি সাইট পরিচালনা করি। একটি টন প্লাগইন সহ।

আমরা যেখানে এই মুহুর্তে কিছুটা বিভক্ত করতে বাধ্য হয়েছি। কোডের 20-30k লাইনযুক্ত একটি ফাংশন ফাইল মোটেই মজার নয়।

আমরা কোডবেসকে আরও ভালভাবে পরিচালনা করার জন্য সমস্ত কোডের সম্পূর্ণ সংশোধন করার সিদ্ধান্ত নিয়েছি। ডিফল্ট ওয়ার্ডপ্রেস থিম কাঠামো ছোট সাইটের জন্য ভাল তবে বড় সাইটের জন্য নয়।

আমাদের নতুন ফাংশন.এফপিতে কেবলমাত্র সাইটটি শুরু করার জন্য প্রয়োজনীয় যা রয়েছে তবে এটি কোনও নির্দিষ্ট পৃষ্ঠার অন্তর্গত nothing

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

উদাহরণস্বরূপ আমাদের সদস্য পৃষ্ঠা:

পৃষ্ঠা-সদস্য.এফপি । পৃষ্ঠাটি আরম্ভ করার জন্য দায়বদ্ধ। সঠিক এজাক্স ফাংশন বা অনুরূপ কল করা। MCV শৈলীতে নিয়ামক অংশের সাথে সমান হতে পারে।

ফাংশন-সদস্য.এফপি । এই পৃষ্ঠার সাথে সম্পর্কিত সমস্ত ফাংশন রয়েছে। এটি সার্ভারাল অন্যান্য পৃষ্ঠাগুলিতেও অন্তর্ভুক্ত রয়েছে যা আমাদের সদস্যদের জন্য ফাংশন প্রয়োজন।

কন্টেন্ট-সদস্য.এফপি । এইচটিএমএলের জন্য ডেটা প্রস্তুত করে এমসিভিতে মডেলের সমতুল্য হতে পারে।

বিন্যাস-সদস্য.এফপি । এইচটিএমএল অংশ।

এর পরে আমরা এই পরিবর্তনগুলি করেছি বিকাশের সময় সহজেই 50% হ্রাস পেয়েছে এবং এখন পণ্য মালিক আমাদের নতুন কার্যাদি দিতে সমস্যা বোধ করে। :)


7
এটিকে আরও সহায়ক করার জন্য আপনি এই এমভিসি প্যাটার্নটি কীভাবে কাজ করে তা দেখানোর বিষয়ে বিবেচনা করতে পারেন।
কায়সার

আমি আপনার পদ্ধতির উদাহরণ দেখতে আগ্রহী হব, বিশেষত কিছু বিবরণ / বিভিন্ন পরিস্থিতিতে। পদ্ধতির খুব বিরক্তিজনক শোনায়। আপনি অন্যরা যে স্ট্যান্ডার্ড পদ্ধতি ব্যবহার করেন তার সাথে সার্ভার লোড / পারফরম্যান্সটি তুলনা করেছেন? যদি সম্ভব হয় তবে একটি গিথুব উদাহরণ সরবরাহ করুন।
নেটকন্সট্রাক্টর.কম


0

ফাংশন.ফ্পে, প্রয়োজনীয় ফাইলটি কল করার আরও মার্জিত উপায় হ'ল:

প্রযোজনীয়_অনুসন্ধান_প্লেস্টিপলেট ('/ Inc / ফাংশন / শর্টকোড.পিপি');


4
locate_template()তৃতীয় প্যারামিটার রয়েছে…
ফুসিয়া

0

আমি @ কাইজার এবং @ মাইক্সচিনেলের উত্তরগুলি একত্রিত করেছি

আমার থিমটিতে আমার সমস্ত কাস্টমাইজেশন একটি /includesফোল্ডারে রয়েছে এবং সেই ফোল্ডারের মধ্যে আমার সমস্ত ফোল্ডার বিভক্ত হয়ে গেছে।

আমি কেবল চাই /includes/adminএবং এর উপ-সামগ্রীগুলি কখন অন্তর্ভুক্ত করা উচিতtrue === is_admin()

যদি কোনও ফোল্ডারটি iterator_check_traversal_callbackফেরার মাধ্যমে বাদ দেওয়া হয় falseতবে এর উপ-ডিরেক্টরিগুলি পুনরাবৃত্তি হবে না (বা এতে পাস করা হবে iterator_check_traversal_callback)

/**
 *  Require all customizations under /includes
 */
$includes_import_root = 
    new \RecursiveDirectoryIterator( __DIR__ . '/includes', \FilesystemIterator::SKIP_DOTS );

function iterator_check_traversal_callback( $current, $key, $iterator ) {
    $file_name = $current->getFilename();

    // Only include *.php files
    if ( ! $current->isDir() ) {
        return preg_match( '/^.+\.php$/i', $file_name );
    }

    // Don't include the /includes/admin folder when on the public site
    return 'admin' === $file_name
        ? is_admin()
        : true;
}

$iterator_filter = new \RecursiveCallbackFilterIterator(
    $includes_import_root, 'iterator_check_traversal_callback'
);

foreach ( new \RecursiveIteratorIterator( $iterator_filter ) as $file ) {
    include $file->getRealPath();
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.