0

同じキーに複数の値を入力できるオプションページをWordPressで作成する必要があります。希望どおりに機能させるには、オプションフォームから送信された$_POSTデータに対してカスタム処理を行う必要があります。また、カスタムHTMLを使用してそのオプションフォームを作成する必要があり、設定APIによって生成されないようにする必要があります。

オプションページを作成する通常の手順は、を使用してオプションページを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のドキュメントでこれを行う「合法的な」方法を見つけることができませんでした。多分あなたの一人がそれを見つけました。

4

1 に答える 1

1

これが本当にあなたが探しているものに対する答えであるかどうかはわかりません。このスクリプトは、プラグイン index.php と parameter-options.php を作成します。index.php は、wordpress の設定タブに「Your options-pagename」という新しいページを追加します。そこで、フォームに新しい入力値を追加してオプションを管理できます。大文字の NAMESPACE テキストを独自のプロジェクト名に置き換える必要があります。さらに : このスクリプトはテストされていません。

プラグインディレクトリ/あなたのプラグイン名/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/parameter-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>
于 2012-11-24T17:57:10.297 に答える