2012-11-24 107 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功能处理这种情况的最佳方式。让我知道,当你找到一个替代品。事实上,我不知道另一个解决方案,做这个“更清洁”或“更好” –