如何将简单的自定义字段添加到我的插件中?

时间:2019-03-10 作者:Lz430

我有一个自定义插件,我正在尝试编辑。我没有开发插件。我只需要添加一个文本区域并保存内容。我添加了字段,但无法保存。这只是需要在后台的管理。除此页面外,此字段在任何位置都不可见。

这是我的代码:

<form method="post">
    <table class="widefat">
        <thead>
            <tr>
                <th style="width: 15%;">CHEF Account Info</th>
                <th></th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <th><label><?php echo _e( \'Status\', \'chef\' ); ?></label></th>
                <td>
                    <input type="text" readonly="" onfocus="this.select()" value="<?php echo $chef_config->get_chef_status_title( $user->chef_status ); ?>" class="regular-text">
                    <?php if ( $user->chef_status == \'rejected\' ): ?>
                        <br><br><textarea name="chef_status_rejection_notes" readonly="" onfocus="this.select()" class="um-forms-field um-long-field" rows="6"><?php echo $user->chef_status_rejection_notes; ?></textarea>
                    <?php endif; ?>
                </td>
            </tr>
            <tr>
                <th><label><?php echo _e( \'User Role\', \'chef\' ); ?></label></th>
                <td><input type="text" readonly="" onfocus="this.select()" value="<?php echo $chef_config->get_chef_role_title( $user->roles[0] ); ?>" class="regular-text"></td>
            </tr>
            <tr>
                <th><label><?php echo _e( \'Experience Level\', \'chef\' ); ?></label></th>
                <td><input type="text" readonly="" onfocus="this.select()" value="<?php echo $user->chef_experience_level; ?>" class="regular-text"></td>
            </tr>
            <tr>
                <th><label><?php echo _e( \'Registered\', \'chef\' ); ?></label></th>
                <td><input type="text" readonly="" onfocus="this.select()" value="<?php echo date_format( date_create( $user->user_registered ), "F j\\, Y @ h:i:s A" ); ?>" class="regular-text"></td>
            </tr>
            <tr>
                <th><label><?php echo _e( \'Resources Access\', \'chef\' ); ?></label></th>
                <td>
                    <?php
                        $terms = get_terms(\'resource_category\');
                        $chef_profile_resources_access = $user->chef_profile_resources_access;
                        if ( empty( $chef_profile_resources_access ) ) {
                            $chef_profile_resources_access = [];
                        }
                    ?>
                    <?php $terms = get_terms(\'resource_category\'); ?>
                    <select name="chef_profile_resources_access[]" multiple>
                        <?php foreach ( $terms as $term ): ?>
                            <option value="<?php echo $term->term_id; ?>" <?php if ( in_array( $term->term_id, $chef_profile_resources_access ) ): echo \'selected\'; endif; ?>><?php echo $term->name; ?></option>
                        <?php endforeach; ?>
                    </select>
                </td>
            </tr>
            <tr>
                <th><label><?php echo _e( \'Reporting Form\', \'chef\' ); ?></label></th>
                <td>
                    <?php
                        $form_pages = get_pages( [\'parent\' => 1520 ] );
                        $chef_profile_reporting_form = $user->chef_profile_reporting_form;
                        if ( empty( $chef_profile_reporting_form ) ) {
                            $chef_profile_reporting_form = \'\';
                        }
                    ?>
                    <select name="chef_profile_reporting_form">
                        <option value="">None</option>
                        <?php foreach ( $form_pages as $page ): ?>
                            <option value="<?php echo $page->ID; ?>" <?php if ( $page->ID == $chef_profile_reporting_form ): echo \'selected\'; endif; ?>><?php echo $page->post_title; ?></option>
                        <?php endforeach; ?>
                    </select>
                </td>
            </tr>

            <tr>
                <th><label><?php echo _e( \'CHEF Notes\', \'chef\' ); ?></label></th>
                <td><textarea id="chef_profile_notes" rows="5" onfocus="this.select()" value="<?php echo $user->chef_profile_notes; ?>" class="regular-text" /> </textarea></td>
            </tr>

        </tbody>
    </table>
    <div class="user-approve-reject-actions">
        <input type="hidden" name="action" value="user_permissions" />
        <button class="button button-primary">Save changes</button>
    </div>
</form>
我的文本区域位于底部。我需要做什么才能保存它?

2 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

你的textarea 需要有一个适当的name 以便浏览器将其发送到服务器进行处理,例如保存到数据库。

其次textarea 字段没有value 他们还需要一个结束标记</textarea> 因为textarea 是多行表单字段。

因此,正确的格式是:

<textarea name="chef_profile_notes" id="chef_profile_notes" ...other attributes...>
  <?php echo esc_textarea( $user->chef_profile_notes ): ?><!-- the field value -->
</textarea>
你可以看到我也使用esc_textarea() 这是为了保护发送/显示给用户的输出。看见Data Validation 了解更多详细信息。

SO网友:butalin

此插件使用ajax保存数据,ajax调用user_permissions 插件类中已经定义的函数,如果您可以共享此函数,您可能会发现数据的结构和保存方式,并可以添加您的。

相关推荐

GravityForms是否将每个用户或IP的提交时间限制为30分钟?

我遵循GravityWiz的DIY代码,但作者没有提到如何让代码在30分钟、1小时、2小时等时间内工作。。。?他只解释了如何在24小时内工作-http://gravitywiz.com/better-limit-submission-per-time-period-by-user-or-ip/当查看此处的代码时-https://gist.githubusercontent.com/spivurno/4024361/raw/gw-gravity-forms-submission-limit.php这是否意味