WooCommerce:安装钩子后

时间:2019-06-18 作者:Lucas Vendramini

WooCommerce安装后会触发一些钩子(我指的是WooCommerce向导,而不是插件安装)?我没有找到一个钩子来实现这一点,向导类(WC\\u Admin\\u Setup\\u Wizard)也没有多少钩子来实现这一点。有什么想法吗?

我想解决的问题是WooCommerce正在设置fresh_site 选项到0 (我相信是因为它在安装过程中创建的帖子)。所以我想reset it to 1 安装并设置我的主题后。谢谢

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

WooCommerce本身没有设置fresh_site0 直接(字符串fresh_site 不会出现在WooCommerce的源代码中),但您可以正确地知道,这是因为WooCommerce正在创建页面。

WordPress将网站设置为不刷新(从wp-includes/default-filters.php):

// Mark site as no longer fresh
foreach ( array( \'publish_post\', \'publish_page\', \'wp_ajax_save-widget\', \'wp_ajax_widgets-order\', \'customize_save_after\' ) as $action ) {
    add_action( $action, \'_delete_option_fresh_site\', 0 );
}
所以当WooCommerce创建页面时,publish_page 被解雇,网站不再被视为新鲜。

遗憾的是,在安装向导完成时、在向导中完成任何步骤时,甚至在创建默认WooCommerce页面时,似乎都没有任何特定触发的挂钩。不过,我想我已经找到了一个解决办法。

整个WooCommerce安装向导都在管理页面上进行,?page=wc-setup, 这是WooCommerce使用admin_init 挂钩,默认优先级为10. 所以我们能做的就是admin_init 以较高的优先级(较低的数字),检查我们是否在WooCommerce向导中,如果是,请删除将站点设置为不新鲜的挂钩。这样,安装向导期间发生的任何事情都不会使站点不再新鲜:

function wpse_340803_keep_setup_wizard_fresh() {
    if ( isset( $_GET[\'page\'] ) && \'wc-setup\' === $_GET[\'page\'] ) {
        foreach ( array( \'publish_post\', \'publish_page\', \'wp_ajax_save-widget\', \'wp_ajax_widgets-order\', \'customize_save_after\' ) as $action ) {
            remove_action( $action, \'_delete_option_fresh_site\', 0 );
        }
    }
}
add_action( \'admin_init\', \'wpse_340803_keep_setup_wizard_fresh\', 0 );
因为页面创建是在内部触发的admin_init 优先考虑10, 作为安装向导的一部分_delete_option_fresh_site 当页面创建时,不再被激活,这意味着站点在创建之后应该仍然是新鲜的。

相关推荐

Multisite installation steps?

我启动了Multisite 特色我想在子域中创建一个站点。我有两个问题:在多站点管理仪表板中创建站点之前,还是之后,我必须在服务器上创建子域</如果是,在multisite admindashboard中创建站点之前,还是之后,我必须在此子域中安装WordPress安装我在StackExchange上找到了这个,但它对我没有帮助,或者我就是不明白。Subdomain multisite gives 404 on sub sites谢谢弗朗索瓦