मैं जितना संभव हो उतना स्वचालित करने का प्रयास कर रहा हूं, सेटिंग्स एपीआई फ़ंक्शन एक प्लगइन में प्रत्येक सेटिंग के लिए कॉल करता है। विकल्प सरणी के माध्यम से लूपिंग, और आउटपुट add_settings_section()
और add_settings_field()
सरल पर्याप्त है:
add_settings_section()
:
$oenology_hooks_tabs = oenology_hooks_get_settings_page_tabs();
foreach ( $oenology_hooks_tabs as $tab ) {
$tabname = $tab['name'];
$tabtitle = $tab['title'];
$tabsections = $tab['sections'];
foreach ( $tabsections as $section ) {
$sectionname = $section['name'];
$sectiontitle = $section['title'];
$sectiondescription = $section['description'];
// Add settings section
add_settings_section(
'oenology_hooks_' . $sectionname . '_section',
$sectiontitle,
'oenology_hooks_' . $sectionname . '_text',
'oenology_hooks_' . $tabname . '_tab'
);
}
}
और `add_settings_field ():
global $oenology_hooks;
$oenology_hooks = oenology_hooks_get_hooks();
foreach ( $oenology_hooks as $hook ) {
$hookname = $hook['name'];
$hooktitle = $hook['title'];
$hooktab = $hook['tab'];
$hooksection = $hook['section'];
add_settings_field(
'oenology_hooks_' . $hookname,
$hooktitle,
'oenology_hooks_setting_callback',
'oenology_hooks_' . $hooktab . '_tab',
'oenology_hooks_' . $hooksection . '_section',
$hook
);
}
साथ add_settings_field()
, मैं आसानी से एक सामान्य कॉलबैक लिख सकते हैं पारित करके $hook
, कॉलबैक करने के लिए चर समारोह कॉल में पांचवें पैरामीटर के रूप में:
function oenology_hooks_setting_callback( $hook ) {
$oenology_hooks_options = get_option( 'plugin_oenology_hooks_settings' );
$hookname = $hook['name'];
$hooktitle = $hook['title'];
$hookdescription = $hook['description'];
$hooktype = $hook['type'];
$hooktab = $hook['tab'];
$hooksection = $hook['section'];
$inputvalue = $hookname . '_hide';
$inputname = 'plugin_oenology_hooks_settings[' . $inputvalue . ']';
$textareaname = 'plugin_oenology_hooks_settings[' . $hookname . ']';
$textareavalue = $oenology_hooks_options[$hookname];
if ( 'Filter' == $hooktype ) {
?>
<input type="checkbox" name="<?php echo $inputname; ?>" value="<?php echo $inputvalue;?>" <?php checked( true == $oenology_hooks_options[$inputvalue] ); ?> />
<span>Hide <?php echo $hooktitle; ?> content?</span><br />
<?php
}
?>
<span class="description"><?php echo $hooktype; ?> Hook: <?php echo $hookdescription; ?></span><br />
<textarea name="<?php echo $textareaname; ?>" cols="80" rows="3" ><?php
echo esc_textarea( $textareavalue );
?></textarea>
<?php
}
हालांकि, ऐसा प्रतीत होता है कि add_settings_section()
एक अनुरूप $args
पैरामीटर नहीं है ; इस प्रकार, मैं $section
चर को कॉलबैक में भेजने के लिए उसी विधि का उपयोग नहीं कर सकता ।
इस प्रकार, मेरा प्रश्न: क्या add_settings_section()
कॉलबैक के लिए एक वैरिएबल को पास करने का कोई तरीका है , या किसी अन्य तरीके से कॉलबैक बनाने के लिए जो मैं कर रहा हूं उसके अनुरूप add_settings_field()
?
संपादित करें:
@Bainternet ने इसे रद्द कर दिया! यहाँ मेरा काम कोड है:
/**
* Callback for add_settings_section()
*
* Generic callback to output the section text
* for each Plugin settings section.
*
* @param array $section_passed Array passed from add_settings_section()
*/
function oenology_hooks_sections_callback( $section_passed ) {
global $oenology_hooks_tabs;
$oenology_hooks_tabs = oenology_hooks_get_settings_page_tabs();
foreach ( $oenology_hooks_tabs as $tab ) {
$tabname = $tab['name'];
$tabsections = $tab['sections'];
foreach ( $tabsections as $section ) {
$sectionname = $section['name'];
$sectiondescription = $section['description'];
$section_callback_id = 'oenology_hooks_' . $sectionname . '_section';
if ( $section_callback_id == $section_passed['id'] ) {
?>
<p><?php echo $sectiondescription; ?></p>
<?php
}
}
}
}
extract( $args, EXTR_SKIP );
शुरुआत में ऐसा क्यों नहीं करतेoenology_hooks_setting_callback()
, इसलिए आपको सरणी के हर हिस्से को एक नए में सहेजने की ज़रूरत नहीं है$var
? ये तो$'name_inside_the_array
पूर्व के साथ , avaible हो जाएगा । '$ शीर्षक,
$ टैब`, इत्यादि