woocommerce - 在 Woocommerce 单个产品页面中获取产品自定义字段值
问题描述
任何人都可以帮助我使以下代码正常运行。我从其他各种帖子中获取了一些代码来创建它。
我需要创建一个自定义字段(数据表)并能够发布指向 PDF 文件的链接。然后它应该出现在每个产品页面上的元数据之前。
当前代码如下:
add_action( 'woocommerce_product_options_general_product_data',
'woo_add_custom_general_fields' );
function woo_add_custom_general_fields() {
global $woocommerce, $post;
echo '<div class="options_group">';
woocommerce_wp_text_input( array( // Text Field type
'id' => '_datasheet_url',
'label' => __( 'Datasheet', 'woocommerce' ),
'placeholder' => 'http://',
'desc_tip' => 'true',
'description' => __( 'Datasheet URL here.', 'woocommerce' )
) );
echo '</div>';
}
add_action( 'woocommerce_process_product_meta',
'woo_save_custom_general_fields' );
function woo_save_custom_general_fields( $post_id ){
$datasheet_field= $_POST['_datasheet_url'];
if( !empty( $datasheet_field ) )
update_post_meta( $post_id, '_datasheet_url', esc_attr( $datasheet_field
) );
}
add_action('woocommerce_product_meta_start',
'woo_display_custom_general_fields_values', 5);
function woo_display_custom_general_fields_values() {
global $product;
$url = get_post_meta( $post->ID, 'Datasheet', true );
echo '<img src="http://www.freemansolutions.co.uk/wp-content/uploads/pdf-
icon.png"> <a href="'.$url.'">Datasheet</a>';
}
解决方案
主要的错误是$url = get_post_meta( $post->ID, 'Datasheet', true );
as $post
is not defined,然后$post->ID
抛出错误就可以获取到URL自定义字段值了。
请尝试以下操作:
add_action( 'woocommerce_product_options_general_product_data', 'add_datasheet_url_custom_field' );
function add_datasheet_url_custom_field() {
echo '<div class="options_group">';
woocommerce_wp_text_input( array(
'id' => '_datasheet_url',
'label' => __('Datasheet URL', 'woocommerce'),
'placeholder' => 'http://',
'desc_tip' => 'true',
'description' => __('Set the "Datasheet" URL here.', 'woocommerce'),
) );
echo '</div>';
}
add_action( 'woocommerce_process_product_meta', 'save_datasheet_url_custom_field', 12, 1 );
function save_datasheet_url_custom_field( $post_id ){
if( isset( $_POST['_datasheet_url'] ) )
update_post_meta( $post_id, '_datasheet_url', sanitize_text_field( $_POST['_datasheet_url'] ) );
}
add_action('woocommerce_product_meta_start', 'use_datasheet_url_custom_field', 5 );
function use_datasheet_url_custom_field() {
$pdf_url = get_post_meta( get_the_id(), '_datasheet_url', true );
if( ! empty( $pdf_url ) ){
$icon_pdf = home_url( '/wp-content/uploads/pdf-icon.png' );
echo '<img src="'.$icon_pdf.'" /> <a href="'.$pdf_url.'">' . __('Datasheet', 'woocommerce') . '</a>';
}
}
代码位于您的活动子主题(或活动主题)的 function.php 文件中。测试和工作。
推荐阅读
- image - 如何在树枝模板中显示图像 GD 资源
- linker - 手动编译OpenSSL:制作共享对象时不能使用符号;使用 -fPIC 重新编译
- ocr - 为什么 Microsoft Cognitive 不返回每个 OCR 字段?
- angular - 在环境上下文中不允许使用 Angular2 打字稿错误初始化程序
- swift - 在单独文件中定义的 Swift 结构是否需要初始化程序?
- autodesk-forge - 下载衍生文件时的 HTTP 状态码
- docker - docker-compose.yml 中指定的资源限制没有被 docker 考虑
- javascript - ChartJS 在 show() 调用时重放图表动画
- c# - 如何替换文本文件中的特定行?
- python - 将具有数字和一些破折号的列转为 int?