双重转发器克隆textarea中的内容

问题描述 投票:0回答:1

我正在忙着构建一个带有转发器元数据(排序和克隆)的自定义帖子类型,用于存储信息组。

第一个转发器元数据是一个单一的文本输入,完美地工作。

问题子:第二个转发器元框是一个双重转发器,带有标签的文本输入和内容的文本区域。数据保存并排序,但是当我单击克隆按钮时,textarea会继承列表中最后一项的值。可以覆盖此值,但是当我删除该行时,它也会从上面的行中删除内容。

我怀疑问题可能在于行计数。经过调查,我发现新行的编号与上面的编号相同。遗憾的是,我很难解决如何解决这个问题,而且Codex没有得到太多答案。

function show_country_facts_meta_box() {
    global $facts_meta_fields, $post;
    echo '<input type="hidden" name="facts_meta_box_nonce" value="'.wp_create_nonce(basename(__FILE__)).'" />';
    echo '<table class="form-table">';
    foreach ($facts_meta_fields as $field) {
        $meta = get_post_meta($post->ID, $field['id'], true);
        echo '<tr>
                <td style="display: inline-block; width: 100%; padding: 0;">';
                switch($field['type']) {
                    case 'double_repeatable':
                        echo ' <ul id="'.$field['id'].'-repeatable" class="custom_repeatable">';
                        $i = 0;
                        if ($meta) {
                            foreach($meta as $row) {
                                echo '<li>
                                    <span class="sort hndle">|||</span>
                                    <div class="rowMiddle">
                                        <label>'.$field['options'][0].'</label>
                                        <input type="text" name="'.$field['id'].'['.$i.'][0]" id="'.$field['id'].'" value="'.$row[0].'" size="15"/>
                                        <label>'.$field['options'][1].'</label>
                                        <textarea name="'.$field['id'].'['.$i.'][1]" id="'.$field['id'].'" cols="60" rows="4">'.$row[1].'</textarea>
                                    </div>
                                    <a class="repeatable-remove button" href="#">&#8211;</a>
                                </li>';
                                $i++;
                            }
                        } else {
                            echo '<li>
                                <span class="sort hndle">|||</span>
                                <div class="rowMiddle">
                                    <label>'.$field['options'][0].'</label>
                                    <input type="text" name="'.$field['id'].'['.$i.'][0]" id="'.$field['id'].'" value="'.$row[0].'" size="15"/>
                                    <label>'.$field['options'][1].'</label>
                                    <textarea name="'.$field['id'].'['.$i.'][1]" id="'.$field['id'].'" cols="60" rows="4"></textarea>
                                </div>
                                <a class="repeatable-remove button" href="#">&#8211;</a>
                            </li>';
                        }
                        echo '</ul>
                            <span class="description">'.$field['desc'].'</span><br />
                            <a style="margin-top:10px;" class="repeatable-add button" href="#">+</a>';
                    break;
                } 
        echo '</td></tr>';
    } 
    echo '</table>'; 
}
// saving the repeater
function save_facts_custom_meta($post_id) {
    global $facts_meta_fields;
    if ( !isset( $_POST['facts_meta_box_nonce'] ) || !wp_verify_nonce( $_POST['facts_meta_box_nonce'], basename(__FILE__) ) )
        return $post_id;
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
        return $post_id;
    if ('page' == $_POST['post_type']) {
        if (!current_user_can('edit_page', $post_id))
            return $post_id;
        } elseif (!current_user_can('edit_post', $post_id)) {
            return $post_id;
    }
    foreach ($facts_meta_fields as $field) {
        $old = get_post_meta($post_id, $field['id'], true);
        $new = $_POST[$field['id']];
        if($field['type'] == 'repeatable')
            $new = array_values($new);
        if ($new && $new != $old) {
            update_post_meta($post_id, $field['id'], $new);
        } elseif ('' == $new && $old) {
            delete_post_meta($post_id, $field['id'], $old);
        }
    } 
}
add_action('save_post', 'save_facts_custom_meta');

任何人都可以解释我如何解决这个问题?

php wordpress repeater custom-post-type meta-boxes
1个回答
0
投票

解决了:问题出在jQuery中。

脚本计算输入但不计算textarea - 包括此表单字段解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.