Wordpress PHP表单 - 离开页面

时间:2017-07-03 03:03:27

标签: php wordpress forms

我希望有人可以帮我处理我的特定问题。

我目前正在处理一个问题/答案表单,该表单显示在名为' lp_lesson'的自定义帖子类型上。在Wordpress中。

我已成功创建了一个位于Wordpress管理端的问题表单。您可以生成多个问题字段,并将其动态保存到SQL数据库中。 这些问题在post_meta中保存为数组。

在网站的前端,对于特定的自定义帖子类型,它将显示问题字段,并且在每个问题字段下方将具有textarea字段,供用户输入他们对该特定问题的答案。 答案将保存为user_meta中的数组。

所有表单并成功提交到数据库。

BUT

提交表单并离开页面后,一旦您返回,它将删除曾在那里提交的所有数据。

我怀疑可能是因为我在表单之前有update_user_meta,它可能是提交空白表单数据,但我尝试在表单后面放置update_user_meta并且它没有什么区别。

请参阅下面的功能。

function activity_form_function() {
    global $current_user;

    $course         = LP()->global['course'];
    $item       = LP()->global['course-item'];
    $courseID   = $course->ID;
    $itemID     = $item->ID;

    $lp_lesson_activity = get_post_meta( $item->ID, 'activities', true );

    if ( !empty( $lp_lesson_activity[0] ) ) {

         ?>

        <div class="lp-lesson-activity">
            <h4>Activity</h4>
            <form name="lessonactivity" action="" method="POST">
                <ul>
                    <?php
                    $c = 0;
                    foreach ($lp_lesson_activity as $activity) {
                    $activity_question_push = "AID" . $courseID . $itemID . $c++;
                    $assessment = $activity['assessment'];

                    $fieldname = 'activities_' . $itemID;
                    $activity_question_answer = $_POST['activities'];
                    update_user_meta( $current_user->ID, $fieldname, $activity_question_answer);
                    $activity_question_answerGUD = get_user_meta( $current_user->ID, $fieldname, true);
                    ?>
                        <li class="lp-activity-question">
                            <span><?php echo $activity['title']; ?></span>
                            <div class="lp-activity-answer-container">
                                <input type="hidden" name="activities[<?php echo $activity_question_push; ?>][question]" value="">
                                <textarea placeholder="Enter answer here" name="activities[<?php echo $activity_question_push; ?>][answer]"><?php echo $activity_question_answerGUD[$activity_question_push]['answer']; ?></textarea>
                                <?php if ( $assessment ) { ?>
                                    <span class="notice">This activity will be assessed and will contribute to your final grade. Please take your time.</span>
                                <?php } ?>
                            </div>
                        </li>
                    <?php } ?>
                </ul>
                <button type="submit">Save</button>
            </form>
        </div>
    <?php }

}

1 个答案:

答案 0 :(得分:0)

首先使用functions.php

中的以下功能检查user_post_meta是否被删除
add_action( 'show_user_profile', 'my_show_extra_profile_fields' );
add_action( 'edit_user_profile', 'my_show_extra_profile_fields' );

function my_show_extra_profile_fields( $user ) { 
global $current_user;

    $course         = LP()->global['course'];
    $item       = LP()->global['course-item'];
    $courseID   = $course->ID;
    $itemID     = $item->ID;

    $lp_lesson_activity = get_post_meta( $item->ID, 'activities', true );
$fieldname = 'activities_' . $itemID; ?>
<h3>Extra profile information</h3>

<table class="form-table">

    <tr>
        <th><label for="twitter">activities No</label></th>

        <td>
            <input type="text" name="activities-no" id="activities-no" value="<?php echo esc_attr( get_user_meta( $current_user->ID,'$fieldname',true ) ); ?>" class="regular-text" /><br />
            <span class="description">Please enter your activities No.</span>
        </td>
    </tr>

</table>
<?php }

add_action( 'personal_options_update', 'my_save_extra_profile_fields' );
add_action( 'edit_user_profile_update', 'my_save_extra_profile_fields' );

function my_save_extra_profile_fields( $user_id ) {

if ( !current_user_can( 'edit_user', $user_id ) )
    return false;


update_user_meta( $current_user->ID, '$fieldname', sanitize_text_field($_POST['activities-no']) );
}

它将在用户中显示活动 - &gt; wp管理面板中的个人资料

如果显示更新未删除