php - 文本区域中的双中继器克隆内容
问题描述
我正忙于构建一个带有转发器元框(排序和克隆)的自定义帖子类型,用于存储信息组。
第一个中继器元框是一个单一的文本输入并且完美地工作。
问题的孩子:第二个转发器元框是一个双转发器,带有一个用于标签的文本输入和一个用于内容的文本区域。数据会保存并排序,但是当我单击克隆按钮时,textarea 会继承列表中最后一项的值。该值可以被覆盖,但是当我删除该行时,它也会从上面的行中删除内容。
我怀疑问题可能与行计数有关。经过调查,我发现新行的 [number] 与上面的行相同。不幸的是,我对如何解决这个问题感到困惑,而 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="#">–</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="#">–</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');
谁能阐明我如何解决这个问题?
解决方案
已解决:问题出在 jQuery 中。
该脚本正在计算输入而不是 textarea - 包括这个表单字段解决了这个问题。
推荐阅读
- typescript - 打字稿中的“扩展”实际上是什么意思?
- ios - 多平台 cocoapods 库配置
- java - 尽管 hashCode() 和 equals() 为真,但 HashMap containsKey() 返回假
- android - 如何使用 Intents 将 INT 值从活动 A 传递到活动 B
- node.js - ElasticSearch 有没有办法只显示聚合?
- javascript - 如何将mysql查询翻译为sequelize orm
- javascript - 组件未使用消费者显示
- php - 来自 html 的正则表达式匹配短语,链接和标题除外
- tfs - 迁移到 Azure DevOps Server 2019 时,TFS 2018 的 Wiki 会发生什么变化
- c++ - 从 CGAL::Polyhedron_3 继承