在Woocommerce中,我在“常规设置”标签下的管理产品页面中添加了一些自定义字段,并且可以正常使用。但是,我添加了一些第三方插件,该插件会在每次处理订单时删除已保存在这些字段中的所有内容。
常规选项卡上的默认字段,甚至另一个第三方的字段都不会被删除。我想知道是否有比我做的更好的创建字段和存储数据的方法。
这是我的代码:
add_action( 'woocommerce_product_options_pricing', 'mpq_add_location_textbox_to_products' );
function mpq_add_location_textbox_to_products() {
if ( (has_term( 'workshops', 'product_cat' ) )){
woocommerce_wp_textarea_input( array(
'id' => 'mpq_location',
'class' => '',
'label' => 'Location:',
'placeholder' => 'Enter Location'
)
);
}
}
add_action( 'save_post', 'mpq_save_location_textbox_to_post_meta' );
function mpq_save_location_textbox_to_post_meta( $product_id ) {
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return;
if ( isset( $_POST['mpq_location'] ) ) {
update_post_meta( $product_id, 'mpq_location', $_POST['mpq_location'] );
} else delete_post_meta( $product_id, 'mpq_location' );
}
答案 0 :(得分:0)
存在一些错误和遗漏的东西……尝试以下方法可以解决您的问题:
add_action( 'woocommerce_product_options_pricing', 'add_location_product_custom_textaread_field' );
function add_location_product_custom_textaread_field() {
global $post;
$term = 'workshops'; // Product category term slug
if ( has_term( $term, 'product_cat', $post->ID ) ){
woocommerce_wp_textarea_input( array(
'id' => '_mpq_location',
'class' => '',
'label' => 'Location:',
'placeholder' => 'Enter Location'
) );
echo '<input type="hidden" name="_mpq_location_nonce" value="' . wp_create_nonce() . '">';
}
}
add_action( 'save_post_product', 'save_location_product_custom_textaread_field', 20, 1 );
function save_location_product_custom_textaread_field( $post_id ) {
if ( ! isset( $_POST[ '_mpq_location_nonce' ] ) ) {
return $post_id;
}
if ( ! wp_verify_nonce( $_POST[ '_mpq_location_nonce' ] ) ) {
return $post_id;
}
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
return $post_id;
}
if ( ! current_user_can( 'edit_product', $post_id ) ) {
return $post_id;
}
if ( isset( $_POST['_mpq_location'] ) ) {
update_post_meta( $post_id, '_mpq_location', sanitize_textarea_field($_POST['_mpq_location']) );
}
}
代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试,可以正常工作。
我已将肉键更改为
_mpq_location
,并删除了else delete_post_meta()