在WooCommerce单一产品标题下显示自定义字段

Tom*_*tBe 2 php wordpress product woocommerce hook-woocommerce

我在WooCommerce中的自定义字段有问题。

我有产品(书),我想添加具有自定义字段的作者。我在主题自定义字段中进行了注册,并在Wordpress custome字段中添加了新内容。

自定义字段调用:(product_author这是我的)和mbt_publisher_name(来自主题)

我已经title.php在主题和woocommerce目录中找到了模板文件。

我尝试添加:

<?php echo get_post_meta($id, "product_author", true); ?> 
Run Code Online (Sandbox Code Playgroud)

并没有任何变化... title.php的原始资料

    <?php
/**
 * Single Product title
 *
 * @author  WooThemes
 * @package WooCommerce/Templates
 * @version 1.6.4
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly
}

?>

<h2 itemprop="name" class="product_title entry-title"><?php the_title(); ?></h2>
Run Code Online (Sandbox Code Playgroud)

如何在标题下显示该自定义字段?
在哪里可以找到那个钩子?

谢谢

Loi*_*tec 6

如果您查看woocommerce模板,content-single-product.php您将看到以下代码(从第54行开始):

/**
 * woocommerce_single_product_summary hook.
 *
 * @hooked woocommerce_template_single_title - 5
 * @hooked woocommerce_template_single_rating - 10
 * @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
 * @hooked WC_Structured_Data::generate_product_data() - 60
 */
do_action( 'woocommerce_single_product_summary' );
Run Code Online (Sandbox Code Playgroud)

因此woocommerce_template_single_title,钩在woocommerce_single_product_summary动作钩子中的优先级为(因此优先)。5

您可以通过2种方式完成此操作:

1)您可以使用自定义函数woocommerce_single_product_summary挂钩,其优先级介于69之间,方法是:

add_action( 'woocommerce_single_product_summary', 'custom_action_after_single_product_title', 6 );
function custom_action_after_single_product_title() { 
    global $product; 

    $product_id = $product->get_id(); // The product ID

    // Your custom field "Book author"
    $book_author = get_post_meta($product_id, "product_author", true);

    // Displaying your custom field under the title
    echo '<p class="book-author">' . $book_author . '</p>;
}
Run Code Online (Sandbox Code Playgroud)

代码在您的活动子主题(或主题)的function.php文件中,或者在任何插件文件中。

此代码已经过测试,可在WooCommerce 3.0+上运行


要么

2)您可以直接编辑single-product/title.php位于活动主题 的WooCommerce文件夹的模板请参阅下面的参考,有关通过主题覆盖WooCommerce模板

<?php
/**
 * Single Product title
 *
 * @author  WooThemes
 * @package WooCommerce/Templates
 * @version 1.6.4
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly
}

// Calling global WC_Product object
global $product;

$product_id = $product->get_id(); // The product ID

// Your custom field "Book author"
$book_author = get_post_meta($product_id, "product_author", true);

?>

<h2 itemprop="name" class="product_title entry-title"><?php the_title(); ?></h2>

<p class="book-author"><?php echo $book_author; ?></p>
Run Code Online (Sandbox Code Playgroud)

官方参考:模板结构+通过主题覆盖WooCommerce模板

我建议您使用第一种方法,因为它更干净,因为它使用了一个钩子,并且如果更新模板,则无需进行任何更改。您还应该更好地使用儿童主题…