web-dev-qa-db-ja.com

子供をテーマにしたアクションのフック解除

以前にStorefrontテーマを使用していたときは、デフォルトのフックを解除して独自のadd_actionに置き換えた、GalleriaというWooCommerce Storefront子テーマを使用することにしました。

ただし、GalleriaはStorefrontの子テーマであるため、add_actionの構造は異なりますが、ファイルclass-galleria-structure.phpに独自のadd_actionがあります。

Storefrontの典型的なadd_actionは次のようになります。

add_action( 'storefront_header', 'storefront_site_branding', 20 );

私はいつものように私のfunctions.phpファイルでそれをフック解除するために次のように使用します...

remove_action( 'storefront_header', 'storefront_site_branding', 20 );

Galleriaの子テーマでは、add_actionsは次のようになります。

add_action( 'storefront_header', array( 'Galleria_Structure', 'galleria_top_bar_wrapper' ), 1 );
add_action( 'storefront_header', array( 'Galleria_Structure', 'galleria_top_bar_wrapper_close' ), 6 );

それで、私は次のようにすることによってそれが単にそれらのフックを外すだろうと思いました...

remove_action( 'storefront_header', array( 'Galleria_Structure', 'galleria_top_bar_wrapper' ), 1 );
remove_action( 'storefront_header', array( 'Galleria_Structure', 'galleria_top_bar_wrapper_close' ), 6 );

これを私のfunctions.phpファイルで試したが、効果がないことがわかった。

Initを使用することを提案しようとしましたが失敗しましたが、さらに掘り下げた結果、これらのフックが大きな関数の一部として作成されたことがわかりました。

<?php
/**
 * Galleria Structure
 *
 * @author   WooThemes
 * @since    2.0
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

if ( ! class_exists( 'Galleria_Structure' ) ) :

class Galleria_Structure {

    /**
     * Setup class.
     *
     * @since 1.0
     */
    public function __construct() {
        add_action( 'wp', array( $this, 'layout_adjustments' ) );
        add_filter( 'storefront_products_per_page', array( $this, 'products_per_page' ) );
        add_filter( 'woocommerce_breadcrumb_defaults', array( $this, 'change_breadcrumb_delimeter' ) );
    }

    /**
     * Layout adjustments
     * @return rearrange markup through add_action and remove_action
     */
    public function layout_adjustments() {

        if ( is_woocommerce_activated() ) {
            remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating', 5 );
            remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10 );
            add_action( 'woocommerce_before_shop_loop_item_title', array( 'Galleria_Structure', 'galleria_product_loop_title_price_wrap' ), 11 );
            add_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating', 2 );
            add_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 1 );
            add_action( 'woocommerce_after_shop_loop_item_title', array( 'Galleria_Structure', 'galleria_product_loop_title_price_wrap_close' ), 2 );

            add_action( 'woocommerce_before_subcategory_title', array( 'Galleria_Structure', 'galleria_product_loop_title_price_wrap' ), 11 );
            add_action( 'woocommerce_after_subcategory_title', array( 'Galleria_Structure', 'galleria_product_loop_title_price_wrap_close' ), 2 );

            remove_action( 'storefront_header', 'storefront_header_cart', 60 );
            add_action( 'storefront_header', 'storefront_header_cart', 4 );

            remove_action( 'storefront_header', 'storefront_product_search', 40 );
            add_action( 'storefront_header', 'storefront_product_search', 3 );
        }

        remove_action( 'storefront_header', 'storefront_secondary_navigation', 30 );
        add_action( 'storefront_header', 'storefront_secondary_navigation', 6 );

        remove_action( 'storefront_header', 'storefront_site_branding', 20 );
        add_action( 'storefront_header', 'storefront_site_branding', 5 );

        remove_action( 'woocommerce_cart_collaterals', 'woocommerce_cross_sell_display' );
        add_action( 'woocommerce_after_cart', 'woocommerce_cross_sell_display', 30 );

        add_action( 'storefront_header', array( 'Galleria_Structure', 'galleria_primary_navigation_wrapper' ), 49 );
        add_action( 'storefront_header', array( 'Galleria_Structure', 'galleria_primary_navigation_wrapper_close' ), 61 );

        add_action( 'storefront_header', array( 'Galleria_Structure', 'galleria_top_bar_wrapper' ), 1 );
        add_action( 'storefront_header', array( 'Galleria_Structure', 'galleria_top_bar_wrapper_close' ), 6 );

    }

    /**
     * Product title wrapper
     * @return void
     */
    public static function galleria_product_loop_title_price_wrap() {
        echo '<section class="g-product-title">';
    }

    /**
     * Product title wrapper close
     * @return void
     */
    public static function galleria_product_loop_title_price_wrap_close() {
        echo '</section>';
    }

    /**
     * Primary navigation wrapper
     * @return void
     */
    public static function galleria_primary_navigation_wrapper() {
        echo '<section class="g-primary-navigation">';
    }

    /**
     * Primary navigation wrapper close
     * @return void
     */
    public static function galleria_primary_navigation_wrapper_close() {
        echo '</section>';
    }

    /**
     * Top bar wrapper
     * @return void
     */
    public static function galleria_top_bar_wrapper() {
        echo '<section class="g-top-bar">';
    }

    /**
     * Top bar wrapper close
     * @return void
     */
    public static function galleria_top_bar_wrapper_close() {
        echo '</section>';
    }

    /**
     * Products per page
     * @return int products to display per page
     */
    public function products_per_page( $per_page ) {
        $per_page = 19;
        return intval( $per_page );
    }

    public function change_breadcrumb_delimeter( $defaults ) {
        $defaults['delimiter'] = ' <span>/</span> ';
        return $defaults;
    }
}

endif;

return new Galleria_Structure();

誰かが私を正しい方向に向けてください。どうしてこれがうまくいかないのか迷っています。

1
Paul

私は結局これを理解しました、私は正確にその理由を知りません、しかし、問題がinitの元々の使用に起因していたようです。

function change_default_galleria_header() {
remove_action( 'storefront_header', 'storefront_header_cart', 4 );
remove_action( 'storefront_header', 'storefront_product_search', 3 );
remove_action( 'storefront_header', 'storefront_secondary_navigation', 6 );
remove_action( 'storefront_header', 'storefront_site_branding', 5 );
remove_action( 'storefront_header', array( 'Galleria_Structure', 'galleria_primary_navigation_wrapper' ), 49 );
remove_action( 'storefront_header', array( 'Galleria_Structure', 'galleria_primary_navigation_wrapper_close' ), 61 );
remove_action( 'storefront_header', array( 'Galleria_Structure', 'galleria_top_bar_wrapper' ), 1 );
remove_action( 'storefront_header', array( 'Galleria_Structure', 'galleria_top_bar_wrapper_close' ), 6 );

}
add_action( 'wp_head', 'change_default_galleria_header' );

この情報が将来他の誰かに役立つことを願っています。ありがとう

3
Paul

このサイトではまだコメントできません

登録前にアクションを削除していませんか。これをon initフックでラップしてみましたか?おそらくremove_filterを使用するのがより良い選択でしょう。

function my_init() {
  remove_filter( 'storefront_header', array( 'Galleria_Structure', 'galleria_top_bar_wrapper' ) );
  remove_filter( 'storefront_header', array( 'Galleria_Structure', 'galleria_top_bar_wrapper_close' ) );


}
add_action( 'init', 'my_init', 100 );
2
Antony Gibbs