Я столкнулся с проблемой, из-за которой я не могу получить уведомление администратора после добавления сайта в многосайтовую установку.
В одном классе я подключаюсь к действию wpmu_new_blog
для вызова некоторых функций очистки на только что созданном сайте:
Site_Creation_Provider.php
class Site_Creation_Provider implements ServiceProviderInterface {
public function register( Container $container ) {
$this->filters( $container )
}
private function filters( Container $container ) {
add_action( 'wpmu_new_blog', function ( $blog_id, $user_id, $domain, $path, $site_id, $meta ) use ( $container ) {
global $wpdb;
$old_blog = $wpdb->blogid;
switch_to_blog( $blog_id );
$processes = new Processes();
$processes->run();
wp_cache_flush();
switch_to_blog( $old_blog );
}, 10, 6 );
}
}
ВКласс Processes, я запускаю эти функции очистки, а затем использую класс Notices, чтобы попытаться написать соответствующие уведомления на странице:
Processes.php
class Processes {
public function run() {
$this->activate_theme();
/* More function calls */
}
private function activate_theme() {
switch_theme( 'standard-theme' );
new Notices( ['notice-success', 'is-dismissible'], 'Activated Standard Theme' );
}
/* More Functions */
}
Notices.php
class Notices {
private $_classes;
private $_message;
public function __construct( $classes, $message ) {
$this->_message = $message;
if ( ! empty( $classes ) && is_array( $classes ) ) {
$this->_classes = implode( ' ', $classes );
}
add_action( 'network_admin_notices', array( $this, 'render' ) );
}
public function render() {
printf( "<div class='%s'>%s</div>", $this->_classes, $this->_message );
}
}
Все работает нормально, пока я не попытаюсь подключиться к network_admin_notices
в конструкторе Notices, но функция рендеринга никогда не вызывается.Я предполагаю, что это может быть связано с вложенным add_actions
, но я с трудом пытался это выяснить.
У кого-нибудь есть какие-либо идеи относительно того, что я здесь делаю неправильно,или лучший подход?