我一直在使用Wordpress和Woocommerce将自定义元字段添加到我的管理产品页面。我的一切工作正常,但是当我保存产品时,它没有显示我在元框中输入的信息。
我检查了数据库并确实保存了数据,我看到了我在值中输入的数据,元字段名称在元键中。因此,这使我相信一切正常,除非在保存产品后显示管理产品页面上的值。
我认为问题在于这两个函数中的一个但不确定,它可能在save函数中,虽然它调用update_post_meta。
这里是我认为我的问题所在:
function variable_fields( $loop, $variation_data ) {
?>
<tr>
<td>
<div>
<label><?php _e( 'My Custom Field', 'woocommerce' ); ?></label>
<input type="text" size="5" name="my_custom_field[<?php echo $loop; ?>]" value="<?php echo $variation_data['_my_custom_field'][0]; ?>"/>
</div>
</td>
</tr>
<?php
}
function variable_fields_js() {
?>
<tr>
<td>
<div>
<label><?php _e( 'My Custom Field', 'woocommerce' ); ?></label>
<input type="text" size="5" name="my_custom_field[' + loop + ']" />
</div>
</td>
</tr>
<?php
}
这是保存数据的功能,只是问题就在这里?
function variable_fields_process( $post_id ) {
if (isset( $_POST['variable_sku'] ) ) :
$variable_sku = $_POST['variable_sku'];
$variable_post_id = $_POST['variable_post_id'];
$variable_custom_field = $_POST['my_custom_field'];
for ( $i = 0; $i < sizeof( $variable_sku ); $i++ ) :
$variation_id = (int) $variable_post_id[$i];
if ( isset( $variable_custom_field[$i] ) ) {
update_post_meta( $variation_id, '_my_custom_field', stripslashes( $variable_custom_field[$i] ) );
}
endfor;
endif;
}
仔细查看代码没有任何内容对我有用。一切正常,除非我保存产品,输入的数据没有显示(但它在数据库中)所以我认为它可能与保存时相冲突,在字段中显示保存的值。
感谢您的帮助
<小时/> 的更新 具体来说,我认为正是这条线让我感到困惑:
value="<?php echo $variation_data['_my_custom_field'][0]; ?>"
答案 0 :(得分:0)
我知道这有点晚了,但我设法解决了这个问题,并希望与你分享。
基本上WooCommerce已经放弃了$variation_data
。您现在需要将$variation
添加到您的函数并获取ID。使用ID,您可以获取post_meta / custom字段。这可以这样做:
function variable_fields( $loop, $variation_data, $variation ) {
$get_variation_id = $variation->ID;
$data_to_get = get_post_meta($get_variation_id, '_my_custom_field', true );
这一行:
value="<?php echo $variation_data['_my_custom_field'][0]; ?>"
然后成为:
value="<?php echo $data_to_get; ?>"
就是这样!我希望这可以帮助您和遇到此页面的任何其他人。
答案 1 :(得分:-1)
我建议您尝试使用高级自定义字段(ACF)插件,假设这是针对您的网站而不是代码进入已发布的插件。
我也开始尝试将自定义字段编码到网站中,然后在几页代码 way 超出“只添加字段”的业务需求后实现,ACF插件执行10次点击和2分钟相同的工作。有时你必须务实,并且有时候接受调试游戏的最佳方式就是不要首先玩编码游戏。
道歉,如果这不是您或您正在寻找的答案。