Update 29.6.19
我认为
array_map()
错误实际上是由选择项的命名方式引起的。他们的名字是
tax_input[fuel-type]
, 这可能会导致它们被传递到默认的分类法保存函数。由于每个select只传递一个值,并且我假设sax save处理程序需要一个数组
array_map()
发出警告。
这也解释了为什么一些值没有保存。价值观不在$_POST[$valid_taxonomy]
, 但是$_POST[\'tax_input\'][$valid_taxonomy]
(meta\\u box.php:416)。我在编写循环示例时遗漏了这一点。
您可以尝试将选择的名称更改为name="tax_slug"
或者将名称更改为数组格式name="tax_input[fuel-type][]"
. foreach ( $valid_taxonomies as $valid_taxonomy )
应开始使用前一个选项,而不必使用后一个选项。
尝试替换meta\\u框。php第59-60行wp_nonce_field( \'save_car_details_meta\', \'nonce_car_details\');
第361-363行check_admin_referer( \'save_car_details_meta\', \'nonce_car_details\' );
. 对鉴定元数据库及其保存功能做类似的事情。
<小时>
New answer
我快速浏览了一下您在GitHub上的代码,我认为这样应该可以让它工作。
将第372-518行替换为以下代码。具有具有有效键的助手数组,可以比较$_POST
反对分别循环元数据和术语数据,并相应地保存它们-元数据为post meta,将术语数据设置为post terms。
if ( \'revision\' === $post->post_type ) {
return;
};
$valid_meta_keys = array(
\'_vin\',
\'_mileage\',
\'_intcol\',
\'_tot\',
\'_nod\',
\'_trim\',
\'_price\',
);
foreach ( $valid_meta_keys as $valid_meta_key ) {
$current_value = get_post_meta( $post->ID, $valid_meta_key, FALSE );
$new_value = isset( $_POST[$valid_meta_key] ) ? $_POST[$valid_meta_key] : \'\';
if ( ! $new_value && ! $current_value ) {
delete_post_meta($post->ID, $valid_meta_key);
continue;
} else if ( ! $new_value ) {
continue;
}
// If $value is an array, make it a CSV (unlikely)
if ( is_array( $new_value ) ) {
$new_value = implode(\',\', $new_value);
}
// Returns meta_id if the meta doesn\'t exist, otherwise returns true on success and false on failure. It also returns false if the value submitted is the same as the value that is already in the database.
update_post_meta($post->ID, $valid_meta_key, sanitize_text_field( $new_value ) );
}
$valid_taxonomies = array(
\'makes\',
\'model_year\',
\'body_type\',
\'colors\',
\'drivetrain\',
\'transmissions\',
\'fuel-type\',
\'engine\',
);
foreach ( $valid_taxonomies as $valid_taxonomy ) {
$new_value = isset( $_POST[$valid_taxonomy] ) ? intval( $_POST[$valid_taxonomy] ) : NULL;
// Replace previous terms or clear with NULL $new_value
wp_set_object_terms( $post->ID, $new_value, $valid_taxonomy, false );
}
用以下代码替换第597-610行。这里不需要循环,因为只有一个元键。
$customer_name = isset( $_POST[\'_customer\'] ) ? $_POST[\'_customer\']: \'\';
if ( get_post_meta( $post->ID, \'_customer\', FALSE ) ) {
update_post_meta($post->ID, \'_customer\', sanitize_text_field( $customer_name ) );
} else {
delete_post_meta($post->ID, \'_customer\');
}
<小时>
First answer
正如Jacob Peattie在评论中指出的那样,您的问题有相当多的代码,因此很难进行审查罢工>但是根据您提供的屏幕截图,您应该深入查看PHP警告中提到的主题文件,并在相关行中添加一些保护条款。这里有一些一般的例子,
未定义索引
// key is set in array and the value is not empty
if ( ! empty( $array[\'some_key\'] ) ) {
// some code
}
或
// key is set in array, but value can be empty
if ( isset( $array[\'some_key\'] ) ) {
// some code
}
参数应为数组或为foreach提供的无效参数
// make sure the variable is array
if ( is_array( $something ) ) {
// foreach loops
// array_maps
}
未定义变量
// variable exists and is different than NULL
if ( isset( $variable ) ) {
// some code
}
或
// variable exists and value equals FALSE
if ( ! empty( $variable ) ) {
// some code
}
确实为添加回退
if
s与
else
s、 如果需要。E、 g。
将键添加到具有空值或某些默认值的数组