我创建了自定义文本字段,但我无法使用操作挂钩在单个产品页面上输出...
如果有人能提供解决方案,我真的很感激吗?
我的代码(functions.php):
// Display Fields
add_action( 'woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields' );
// Save Fields
add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save' );
function woo_add_custom_general_fields() {
global $woocommerce, $post;
echo '<div class="options_group">';
// Custom fields will be created here...
woocommerce_wp_text_input(
array(
'id' => '_text_field',
'label' => __( 'My Text Field', 'woocommerce' ),
'placeholder' => 'http://',
'desc_tip' => 'true',
'description' => __( 'Enter the custom value here.', 'woocommerce' )
)
);
echo '</div>';
}
function woo_add_custom_general_fields_save( $post_id ){
// Text Field
$woocommerce_text_field = $_POST['_text_field'];
if( !empty( $woocommerce_text_field ) )
update_post_meta( $post_id, '_text_field', esc_attr( $woocommerce_text_field ) );
}
add_action( 'woocommerce_single_product_summary', 'output_custom_fields' );
function output_custom_fields() {
echo get_post_meta( $post->ID, '_text_field', true );
}
谢谢! 丹尼斯
答案 0 :(得分:1)
正如@MirzaP在评论中所说,$post
未在函数output_custom_fields()
中定义。所以$post->ID
无效
使它工作(能够在函数中获取post对象)
function output_custom_fields() {
global $post;
echo get_post_meta( $post->ID, '_text_field', true );
}
不要忘记钩住动作的第三个参数,它将设置优先级。这些优先级可以在Woocommerce模板中找到,根据您要放置元数据的位置使用正确的优先级。
/**
* woocommerce_single_product_summary hook
*
* @hooked woocommerce_template_single_title - 5
* @hooked woocommerce_template_single_price - 10
* @hooked woocommerce_template_single_excerpt - 20
* @hooked woocommerce_template_single_add_to_cart - 30
* @hooked woocommerce_template_single_meta - 40
* @hooked woocommerce_template_single_sharing - 50
*/
因此,如果您希望在价格之后立即显示自定义数据,则需要使用11到19之间的积分设置优先级
add_action('woocommerce_single_product_summary', 'output_custom_fields', 15);