web-dev-qa-db-fra.com

Décrocher l'action du thème de l'enfant

J'ai décidé d'utiliser un thème enfant WooCommerce Storefront appelé Galleria. Lorsque j'avais déjà utilisé le thème Storefront, j'avais utilisé l'action remove_action habituelle pour décrocher les valeurs par défaut et la remplacer par mon propre add_action.

Cependant, comme Galleria est un thème enfant de Storefront, il a son propre add_action dans le fichier class-galleria-structure.php bien que la structure de add_action semble différente.

Un add_action typique dans la vitrine ressemble à ceci ...

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

Je voudrais généralement utiliser ce qui suit pour le décrocher dans mon fichier functions.php comme si ...

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

Dans le thème de l'enfant Galleria, add_actions ressemble à ceci ...

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 );

J'ai donc supposé qu'en procédant comme suit, il les décrocherait simplement ...

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 );

Après avoir essayé cela dans mon fichier functions.php, je trouve que cela n’a aucun effet.

J'ai essayé de suggérer l'utilisation de 'init' mais cela a échoué. Cependant, après quelques recherches plus approfondies, j'ai réalisé qu'ils avaient créé ces crochets dans le cadre d'une fonction plus large, comme ici.

<?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();

Est-ce que quelqu'un peut me diriger dans la bonne direction? Je ne comprends pas pourquoi cela ne fonctionne pas.

1
Paul

J'ai finalement compris cela, je ne sais pas exactement pourquoi, mais il semble que le problème soit dû à l'utilisation initiale de init, une fois que je l'ai remplacé par 'wp_head', cela a fonctionné correctement, mon code final ressemblait à ceci

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' );

J'espère que cette information aidera quelqu'un d'autre à l'avenir. Merci

3
Paul

Désolé je ne peux pas encore commenter sur ce site

Pourriez-vous supprimer une action avant qu'elle ne soit enregistrée? Avez-vous essayé d’envelopper ceci avec un crochet d’initialisation? Peut-être que remove_filter serait un meilleur choix.

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