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