2012-11-24 194 views
0

我需要在WordPress中創建一個選項頁面,允許爲同一個鍵輸入多個值。爲了以我想要的方式工作,我需要對選項表單發送的$ _POST數據執行一些自定義處理。我還需要使用自定義HTML創建該選項表單,而不是由設置API生成。WordPress自定義選項頁面

製作選項頁面的正常步驟是使用add_options_page()註冊選項頁面,註冊設置並讓WordPress使用do_settings_sections()爲您生成表格。然後<form>標記具有屬性action="options.php"

我的問題是:我可以改變這種方式嗎?例如,我可以看到這樣的回調:

<?php 
add_options_page( 
    'My plugin Options', 
    'My plugin Options', 
    'administrator', 
    'MYPLUGIN_plugin_options', 
    'MYPLUGIN_options' 
); 

function MYPLUGIN_options() 
{ 
    if ('update' == $_POST['action']) // Do some updating 
    else // Generate form 
} 

這項工作?這是實現我想要的嗎?如果不是,我還能怎麼做?我無法在WordPress文檔中找到這樣做的「合法」方式。也許你們中的一個人找到了它。

回答

1

我不知道這是否真的是你要找的答案。這個腳本創建一個插件index.php和parameter-options.php。 index.php添加一個名爲「Your options-pagename」的新頁面來wordpress設置選項卡。您可以通過向表單添加新的輸入值來管理選項。您應該用您自己的項目名稱替換大寫的NAMESPACE文本。另外:此腳本未經測試。

plugindir/yourpluginname/index.php文件

/* 
Plugin Name: Your options page 
Plugin URI: http://www.yourdomain.de 
Description: descriptiontext 
Author: authorname 
Version: v1.0 
Author URI: your uri 
    */ 


if(! function_exists('NAMESPACE_add_admin_menu_items')): 
    function NAMESPACE_add_admin_menu_items() { 

    // add parameter options page to wp admin 
    add_options_page('Your options-pagename', 'Parameter', 'manage_options', 'NAMESPACE-parameter-settings', 'NAMESPACE_display_parameter_options_page'); 
} 

endif; 

add_action('admin_menu', 'NAMESPACE_add_admin_menu_items'); 

if(! function_exists('NAMESPACE_display_parameter_options_page')): 

function NAMESPACE_display_parameter_options_page() { 
    require_once 'parameter-options.php'; 
} 

endif; 

plugindir/yourpluginname /參數options.php

$aPosts = $_POST; 
if(! empty($aPosts)) { 

    foreach($aPosts as $cKey => $aPost) { 
     update_option($cKey, $aPost); 
    } 

} 
<div class="wrap nosubsub"> 
<div class="icon32" id="icon-edit"><br></div> 
<h2><?php echo __('Hello, i am the optionspage', 'NAMESPACE'); ?></h2> 

<form method="post"> 
    <table class="form-table"> 
     <tbody> 
      <?php 
       $aYourOptionsArray = get_option('YourOptionsArray'); 
      ?> 
      <tr valign="top"> 
       <th scope="row" colspan="2"><b><?php echo __('Some Description', 'NAMESPACE'); ?></b></th> 
      </tr> 
      <tr valign="top"> 
       <th scope="row"><?php echo __('Value 1', 'NAMESPACE'); ?></th> 
       <td><input name="YourOptionsArray[value_1]" class="regular-text" type="text" value="<?php echo (isset($aYourOptionsArray['value_1']) ? $aYourOptionsArray['value_1'] : ''); ?>" /></td> 
      </tr> 
      <tr valign="top"> 
       <th scope="row"><?php echo __('Value 2', 'NAMESPACE'); ?></th> 
       <td><input name="YourOptionsArray[value_2]" class="regular-text" type="text" value="<?php echo (isset($aYourOptionsArray['value_2']) ? $aYourOptionsArray['value_2'] : ''); ?>" /></td> 
      </tr> 
          <!-- more options here --> 
      </table> 
     </form> 
    </div> 
+0

嗯,這就是我正要嘗試的東西。問題是這是否是一種「可接受」的方式,因爲WordPress文檔沒有提到這個話題。 – varchar255

+0

對我來說,這種自定義選項頁面的方式是默認wordpress功能處理這種情況的最佳方式。讓我知道,當你找到一個替代品。事實上,我不知道另一個解決方案,做這個「更清潔」或「更好」 –