我一直在使用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;
}
仔细查看代码没有任何内容对我有用 . 一切正常,除非我保存产品,输入的数据没有显示(但它在数据库中)所以我认为它可能与保存时发生冲突,在字段中显示保存的值 .
谢谢你的帮助
Update: 具体来说,我认为正是这条线让我感到困惑:
value="<?php echo $variation_data['_my_custom_field'][0]; ?>"
2 回答
我知道这有点晚了,但我设法解决了这个问题并希望与您分享 .
基本上WooCommerce已经下降
$variation_data
. 您现在需要将$variation
添加到您的函数并获取ID . 使用ID,您可以获取post_meta / custom字段 . 这可以这样做:这一行:
然后成为:
而已!我希望这可以帮助您和遇到此页面的任何其他人 .
我建议尝试高级自定义字段(ACF)插件,假设这是为您的网站而不是代码进入已发布的插件 .
我也开始尝试将自定义字段编码到一个站点中,然后在几页代码超出"just adding a field"的业务需求之后实现,ACF插件在十次点击和两分钟内完成相同的工作 . 有时候你必须要务实,并且有时候接受调试游戏的最佳方式就是不要首先玩编码游戏 .
如果这不是您或SO正在寻找的答案,请道歉 .