Javascript Wordpress重复元故障
我在我创建的重复元插件上遇到了一个奇怪的问题。除了一件我将详细解释的事情外,一切都很好(保存到数据库、重新处理数据、添加元节、删除元节)。以下是需要考虑的事项:Javascript Wordpress重复元故障,javascript,php,wordpress,Javascript,Php,Wordpress,我在我创建的重复元插件上遇到了一个奇怪的问题。除了一件我将详细解释的事情外,一切都很好(保存到数据库、重新处理数据、添加元节、删除元节)。以下是需要考虑的事项: 我有3个保存的元节,每个节中保存了三个数据字段 在WordPress中保存页面时,删除第一节或第二节将删除所有三节中的所有数据(错误) 删除第三部分然后保存WordPress页面只会删除第三部分,前两部分仍然保存(良好) 删除第二节,然后创建一个新节,然后保存在WordPress中,将删除除删除第二节(第4节)后添加的节以外的所有节(
- 我有3个保存的元节,每个节中保存了三个数据字段
- 在WordPress中保存页面时,删除第一节或第二节将删除所有三节中的所有数据(错误)
- 删除第三部分然后保存WordPress页面只会删除第三部分,前两部分仍然保存(良好)
- 删除第二节,然后创建一个新节,然后保存在WordPress中,将删除除删除第二节(第4节)后添加的节以外的所有节(第1、2、3节)
jQuery(document).on('click','.removeMeta',function(){
jQuery(this).parent().parent().remove();
var index = metaBoxes.indexOf(parseInt(jQuery(this).attr('slideId')));
if (index > -1) {
metaBoxes.splice(index, 1);
}
jQuery('#metaBoxArray').val(metaBoxes.join());
sortRepMeta();
});
function sortRepMeta() {
jQuery('.meta-box-text').text(function(i, oldVal) {
return "Meta Section "+(i+1);
});
}
以下是重复元节的PHP save函数片段:
if( $_POST ) {
$data = array();
$full_meta_array = array();
foreach (explode(',', $_POST['metaBoxArray']) as $key => $i) {
$meta_box = array();
if(empty($_POST['repTextArea'][$i])){
$full_meta_array = array();
}else{
$meta_box['repTextArea'] = $_POST['repTextArea'][$i];
$meta_box['repTextField'] = $_POST['repTextField'][$i];
$meta_box['image'] = $_POST['image'][$i];
$full_meta_array[] = $meta_box;
}
}
$data = $full_meta_array;
// var_dump($data);
// Update the meta field in the database.
update_post_meta( $post_id, 'repMetaArray', $data );
上面的代码有什么问题吗?我不知道该从哪里解决这个问题。我以为JS会在删除时清空元节中的数据,但当我在存储所有元节信息的数组上运行var_转储时,它表示所有字段仍然填充。如果需要提供任何其他信息,请告诉我
编辑:循环开始回显生成元框的代码的位置:
$rep_meta_array = get_post_meta($post->ID, 'repMetaArray', true );
foreach ($rep_meta_array as $key => $meta_box) {
$jsMeta[] = $meta_box_count = $key;
其中定义了元盒和元计数:
<script type="text/javascript">
var metaCount = <?php echo count($rep_meta_array) + 1; ?>;
var metaBoxes = [<?php if(!empty($jsMeta)){echo implode(',',$jsMeta);}?>];
jQuery('#metaBoxArray').val(metaBoxes.join());
</script>
var元计数=;
变量元盒=[];
jQuery('#metaBoxArray').val(metaBoxes.join());
什么是元数据库
,它在哪里定义?可能会显示更多代码和/或标记。我添加了一个编辑,显示定义metaBoxes和metaCount的代码。首先,您正在使用metaBoxes.join()构建metaBoxArray
,并使用explode(',',$\u POST['metaBoxArray')将其转换回数组。
,所以可能只是因为它在意外的位置拆分了文本。在join()
和explode()
中使用相同的分隔符,并使用字符串中其他任何地方都找不到的字符(如
或`
)和/或在加入它们之前验证没有元素具有该分隔符。