web-dev-qa-db-ja.com

既存のWooCommerceフックに自分の機能を追加する

私はWooCommerceの子テーマを親テーマのStorefrontでカスタマイズしようとしています。親テーマは、次のように単一の商品テンプレート(content-single.php)を作成します。

/**
 * @hooked storefront_post_header - 10
 * @hooked storefront_post_meta - 20
 * @hooked storefront_post_content - 30
 */
do_action( 'storefront_single_post' );

そしてこれらの関数はページ(/inc/structure/hooks.php)を構築するためにフックされています。

add_action( 'storefront_single_post', 'storefront_post_header', 10 );
add_action( 'storefront_single_post', 'storefront_post_meta', 20 );
add_action( 'storefront_single_post', 'storefront_post_content', 30 );

参考までに、これは storefront_post_header 関数(inc/structure/post.php)です。

if ( ! function_exists( 'storefront_post_header' ) ) {
/**
   * Display the post header with a link to the single post
   * @since 1.0.0
 */
function storefront_post_header() { ?>
    <header class="entry-header">
    <?php

    if ( is_single() ) {
        storefront_posted_on();
        the_title( '<h1 class="entry-title" itemprop="name headline">', '</h1>' );

    } else {
        if ( 'post' == get_post_type() ) {
            storefront_posted_on();
        }

        the_title( sprintf( '<h1 class="entry-title" itemprop="name headline"><a href="%s" rel="bookmark">', esc_url( get_permalink() ) ), '</a></h1>' );
    }
    ?>
    </header><!-- .entry-header -->
    <?php
}

storefront_post_header の後に、 storefront_post_header_categories を出力します。私はそれを行うために私の子供のテーマfunctions.phpに以下を追加することができるだろうと思いました:

add_action( 'storefront_single_post', 'storefront_post_header_categories', 15 );
function storefront_post_header_categories() {
  echo "code to display categories here";
}

これは機能しないか、フロントエンドに何も出力しません。 WP_DEBUGエラーも発生しません。

何がおかしいのですか?あなたの助けをありがとう、そしてあなたがこれ以上の情報が必要であれば私に知らせてください。

2
Rhecil Codes

storefront_single_postフックは単一の投稿にのみ関連し、商品には関連しませんが、商品は 'product'タイプの投稿と見なされます。

これはあなたが必要とするフックです:

add_action( 'woocommerce_single_product_summary', 'storefront_post_header_categories', 6 );
function storefront_post_header_categories() {
    echo "code to display categories here";
}

Plugins/woocommerce/content-single-product.phpにあります。

/**
         * 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
         */
        do_action( 'woocommerce_single_product_summary' );
1
Scriptonomy