আমাকে এ কথাটি বলার মাধ্যমে এই উপস্থাপনা করা যাক যে আমি ওয়ার্ডপ্রেসের সাথে খুব কমই কাজ করি - বাস্তবে, ওয়ার্ডপ্রেসে শেষবারের মতো আমি কোন সাইটটি 2.2 এর সময় ফিরে এসেছি। গতকাল আমি সবকিছু নিয়ে খুব ঝামেলা করেছি এবং একটি বেসিক মেনু প্লাগইন কাজ করার চেষ্টা করে এখানে বেশ কয়েকটি প্রশ্ন জিজ্ঞাসা করেছি।
আমার কাছে এখন প্লাগিনটি সম্পূর্ণরূপে কার্যকরী এবং আমার প্রত্যাশা মতো ঠিক আচরণ করা হয়েছে, তাই আমি এখানে এবং সেখানে সামান্য পরিবর্তনগুলি কার্যকারিতা এবং সামঞ্জস্য যোগ করার সিদ্ধান্ত নিয়েছি - সেটিংস এপিআই ব্যবহার করে। তবে এই এপিআইতে টিউটোরিয়ালগুলি পড়ার খুব অল্প মুহুর্ত এবং আমি বেশ বিভ্রান্ত হয়ে পড়েছিলাম, তবে আমি যখন পড়ি এবং উদাহরণগুলি প্রয়োগ করার চেষ্টা করি তখন এই বিভ্রান্তি আরও গভীর হয় - যা আমার প্লাগইন একটি শ্রেণি হিসাবে বাস্তবায়িত হওয়ার কারণে আরও জটিল হয়ে পড়েছিল ।
আমি যদি কিছু ভুল করে না দিই, সেটিংস এপিআই ব্যবহার করতে আমি যা বুঝি সে থেকে পার্ট সেটিংয়ের জন্য একটি নতুন ফাংশন তৈরি করা দরকার। এর অর্থ গড় প্লাগইনের জন্য 3-5 ফাংশন এবং আরও উন্নত প্লাগইনগুলির জন্য কয়েকশো অবধি। যখন আপনি ঠিক সহজেই সমস্ত প্রয়োগযোগ্য $_POST
ভেরিয়েবলগুলি একটি অ্যারেতে আমদানি করতে পারেন এবং পুরো জগাখিচুড়িটি ফোরগোতে রেখেছিলেন তখন এই অনেকগুলি ফাংশন (এবং তাদের বিভ্রান্তি থেকে নামকরণের একটি সিস্টেম বিকাশ করা) কেবল হাস্যকর মনে হয়।
সম্ভবত আমি পুরানো ধাঁচের, তবে এর থেকে লাভের কিছু না পাওয়া পর্যন্ত আমি কতটা কোড লিখছি তার দ্বিগুণ বা চতুর্বার কারণ দেখতে পাচ্ছি না। সেটিংস এপিআই যুক্ত করার চেষ্টা করার আগে আমি কীভাবে বিকল্পগুলি পরিচালনা করেছি:
function __construct() {
/* constructor stuff */
$this->options = $this->db_options = get_option( 'de-menu-options' );
if( $this->options === false ){
$this->options = $this->defaults;
}
if (is_admin()) {
add_action('admin_menu', array(&$this, 'admin_menu'));
}
/* more stuff */
// When WordPress shuts down we store changes to options
add_action('shutdown', array(&$this, 'update'));
}
public function admin_menu() {
add_options_page('DE Menu Options', 'DE Menu', 'manage_options', 'de-menu-options', array(&$this, 'options'));
add_option('de-menu-options', $this->options);
}
public function options() {
if (!current_user_can('manage_options')) {
wp_die( __('You do not have sufficient permissions to access this page.') );
}
if ( !empty($_POST) && check_admin_referer('de-menu-options') ) {
// These options are saved to the database at shutdown
$this->options = array(
"columns" => $_POST["de-menu-columns"],
"maintenance" => $_POST["de-menu-maintenance"]
);
echo 'DE Menu options saved';
}
?>
<div class="wrap">
<h2>DE Menu Plugin</h2>
<form method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>">
<?php settings_fields('de-menu-options'); ?>
<input type="checkbox" name="de-menu-maintenance" />
<label for="de-menu-columns">Columns:</label>
<input type="text" name="de-menu-columns" value="<?php echo $this->options['columns']; ?>" />
<p class="submit">
<input type="submit" name="de-menu-submit" value="Update Options »" />
</p>
</form>
</div>
<?php
}
function update() {
// By storing all changes at the end we avoid multiple database calls
$diff = array_diff( $this->options, $this->db_options );
if( !empty( $diff ) ){
update_option('de-menu-options', $this->options);
}
}
এখন সেটিংস এপিআই সহ আমার আরও নীচের মতো কিছু রয়েছে:
function __construct() {
/* constructor stuff */
// Do I load options? Will they be loaded for me? Who knows?
if (is_admin()) {
add_action('admin_menu', array(&$this, 'admin_menu'));
add_action('admin_init', array(&$this, 'admin_init'));
}
/* more stuff */
// Settings API should update options for me... I think
}
public function admin_menu() {
add_options_page('DE Menu Options', 'DE Menu', 'manage_options', 'de-menu-options', array(&$this, 'options'));
add_option('de-menu-options', $this->options);
}
public function admin_init() {
register_setting('de-menu-options','de-menu-options',array(&$this,'validate'));
add_settings_section('de-menu-main-options', 'Main Settings', 'options_section', 'de-menu-options');
add_settings_field('de-menu-maintenance', 'Maintenance Mode', array(&$this,'options_maintenance'), 'de-menu-options', 'de-menu-main-options');
add_settings_field('de-menu-columns', 'Columns', array(&$this,'options_columns'), 'de-menu-options', 'de-menu-main-options');
}
public function options() {
if (!current_user_can('manage_options')) {
wp_die( __('You do not have sufficient permissions to access this page.') );
}
if ( !empty($_POST) && check_admin_referer('de-menu-options') ) {
// These options are saved to the database at shutdown
$this->options = array(
"columns" => $_POST["de-menu-columns"],
"maintenance" => $_POST["de-menu-maintenance"]
);
echo 'DE Menu options saved';
}
?>
<div class="wrap">
<h2>DE Menu Plugin</h2>
<form method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>">
<?php settings_fields('de-menu-options'); ?>
<?php do_settings_sections('de-menu-options'); ?>
<p class="submit">
<input type="submit" name="de-menu-submit" value="Update Options »" />
</p>
</form>
</div>
<?php
}
public function options_section() {
echo '<p>' . __('Main description of this section here.','de-menu-lang') . '</p>';
}
public function options_maintenance() {
echo "<input id='de-menu-maintenance' name='options[maintenance]' type='checkbox' />";
}
public function options_columns() {
echo "<input id='de-menu-columns' name='options[columns]' type='checkbox' value=".$this->options['columns']."/>";
}
function validate($options) {
return $options; // I guess?
}
স্ক্রোলবারগুলি থেকে সম্ভবত এটি বেদনাদায়ক স্পষ্ট যে কোডটি দুটি মাত্র বিকল্পের সাথে ইতিমধ্যে কোড দীর্ঘ longer আমি যে মন্তব্য করছি তা সম্পূর্ণরূপে বুঝতে পারছি না এমন মন্তব্যগুলি থেকে এটি সমালোচিত obvious তারপরে এই সমস্তটি সম্পাদন করার জন্য 5 টি নতুন ফাংশন (এবং কেবল 1 টি অপসারণ) করার বিষয়টি রয়েছে।
সুতরাং এই অতিরিক্ত কাজটি থেকে আমি কী সুবিধা পাচ্ছি?
add_settings_section
এবং add_settings_field
two দুটি ফাংশন আপনার কোডে কোনও কিছুর চেয়ে বেশি ফুল যোগ করে , সেগুলি এড়াতে এবং আপনি ব্লাট এড়ান ..