如何允许Ultimate Member非管理员用户提交我的自定义插件表单

时间:2018-01-23 00:19:55

标签: php wordpress forms

我正在开发我的第一个Wordpress插件,该插件具有注册会员的前端表单,但我被重定向到类似于此phantom 302 redirect problem的主页。但是如果我使用管理员帐户提交相同的表单,它会通过并插入数据库,所以我认为问题在于会员帐户。我正在使用Ultimate Member插件进行用户注册。

我已经完成了对该特定问题的公认解决方案无济于事。

以下是 HTML表单的示例,您可以看到我为字段名称添加前缀以确保唯一性:

<form action="http://localhost/mysite/wp-admin/admin-post.php" method="post" class="delivery-form">
    <input type="hidden" name="action" value="schedule_delivery">
    <h3>Recipient's Information</h3>
    <div class="form-group">
        <label for="r_first_name">First Name<span class="required">*</span></label>
        <input type="text" class="form-control" name="r_first_name" id="r_first_name" placeholder="First Name" required value="Example">
    </div>
    <div class="form-group">
        <label for="r_last_name">Last Name<span class="required">*</span></label>
        <input type="text" class="form-control" name="r_last_name" id="r_last_name" placeholder="Last Name" required value="Example">
    </div>
    <div class="form-group">
        <label for="r_address">Street Address<span class="required">*</span></label>
        <input type="text" class="form-control" name="r_address" id="r_address" placeholder="Street Address" required value="Example">
    </div>

    ...

    <h3>Package Information</h3>
    <div class="form-group">
        <label for="weight">Weight (kg)<span class="required">*</span></label>
        <input type="number" class="form-control" value="0" name="pkg_weight" id="weight" required>
    </div>

    ...

    <div class="form-group">
        <label for="cost">Cost</label>
        <input type="text" class="form-control" value="0" name="pkg_cost" id="cost" readonly>
    </div>
    <button type="submit" class="btn btn-default">Submit</button>
</form>

这里是数据库对象声明并将插入函数添加到钩子中:

if( class_exists( 'DBClass' ) ) {

        $db = DBClass::getInstance();

}

add_action( 'admin_post_schedule_delivery', array( $db , 'insert_schedule_request' ) );

我还尝试了&#39; admin_post_nopriv&#39; ,但管理员和会员都无法提交。

最后,插入功能

function insert_schedule_request() {

    global $wpdb;

    $wpdb->insert( $this->get_table_name(), array(
        'user_id' => get_current_user_id(),
        'schedule_date' => current_time('mysql'),
        'r_first_name' => $_POST['r_first_name'],
        'r_last_name' => $_POST['r_last_name'],
        'r_address' => $_POST['r_address'],
        ...
        'pkg_weight' => $_POST['pkg_weight'],
        ...
        'pkg_cost' => $_POST['pkg_cost']
    ), array(
        '%d',
        '%s',
        '%s',
        '%s',
        '%s',
        ...
        '%f',
        ...
        '%f'
    ));

    wp_redirect( home_url( 'success-page' ) );

}

我试着整天都在寻找解决方案,但我的搜索问题却用尽了。感谢所有的帮助。 TIA。

0 个答案:

没有答案