将操作从子主题中分离

时间:2016-05-02 作者:Paul

我决定使用一个名为Galleria的WooCommerce店面子主题,当我以前使用店面主题时,我使用了常见的remove\\u操作来取消默认设置的挂钩,并替换为我自己的add\\u操作。

然而,由于Galleria是Storefront的子主题,它在文件类Galleria结构中有自己的add\\u操作。尽管add\\u操作的结构似乎有所不同。

storefront中的典型add\\u操作如下所示。。。

add_action( \'storefront_header\', \'storefront_site_branding\', 20 );
在我的函数中,我通常会使用以下命令来解开它。像这样的php文件。。。

remove_action( \'storefront_header\', \'storefront_site_branding\', 20 );
在Galleria儿童主题中,add\\u操作如下所示。。。

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 );
在我的功能中尝试过这一点。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();
有人能给我指一下正确的方向吗?我不知道为什么这不起作用。

2 个回复
最合适的回答,由SO网友:Paul 整理而成

我最终发现了这一点,我不知道确切的原因,但问题似乎是由于最初使用init造成的,一旦我将其替换为“wp\\u head”,它就正常工作了,我的最终代码如下所示

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\' );
我真的希望这些信息将来对其他人有所帮助。谢谢

SO网友:Antony Gibbs

抱歉,我还不能在此网站发表评论

您是否可以在注册操作之前将其删除?你有没有试过用一个初始钩子把它包起来?也许使用remove\\u过滤器会是一个更好的选择。

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

相关推荐

Child-theme breaks site

所以,我有一个子主题,里面除了所需的CSS文件之外什么都没有。一旦我激活了这个儿童主题,我的整个网站就关闭了。最后我有两个问题:激活一个只有CSS的子主题怎么能破坏我的网站</我怎样才能回到我原来的主题</这些是网站给我的错误:Warning: require_once(/wp-content/themes/interio_child/admin/options-framework.php) [function.require-once]: 无法打开流:中没有此类文件或目录/wp-c