Почему wpmu_new_user не запускается внутри плагина, а работает внутри functions.php?

У меня есть проект, чтобы завершить, где сайты в блоге WordPress Multisite будут автоматически добавлять пользователей на соответствующие сайты (где плагин включен)

Надеюсь, я правильно сформулировал это.

Проблема: хук wpmu_new_user не срабатывает внутри плагина, но БУДЕТ внутри functions.php

Это мой код:

 add_action( 'wpmu_new_user', 'register_hack_action', 10, 1 );
 add_action( 'wpmu_activate_user', 'register_hack_action', 10, 1);

 function register_hack_action( $user_id ) {

$this_id = get_current_blog_id();

if ( !defined('ABSPATH') ) {
    // do nothing
} else {
    include_once( ABSPATH . 'wp-admin/includes/plugin.php' ); 
}

$blog_list = get_blog_list( 0, 'all' );
foreach ($blog_list AS $blog) {
    switch_to_blog($blog['blog_id']);
    if ( is_plugin_active( 'register-hack/register-hack.php' ) ) {
        // add user to blog
        add_user_to_blog($blog['blog_id'], $user_id, 'subscriber');
    }       
}   
 }

Это прекрасно работает, когда вы добавляете фрагмент в functions.php. Но когда вы добавляете его в плагин (который входит в wp-content / plugins), а затем активируется на определенных сайтах, просто не будет работать. если вы можете попробовать это сами, вы поймете, что я имею в виду.. Я не понимаю, почему это не сработает. Мне нужно, чтобы он был внутри плагина и работал.

1 ответ

Только небольшая отладка может ответить на этот вопрос... Но такого рода вещи лучше разместить внутри плагина Must Use.

Плагины Must-use (aka mu-plugins) - это плагины, установленные в специальном каталоге внутри папки содержимого и автоматически включаемые на всех сайтах установки. Плагины Must-use не отображаются в списке плагинов по умолчанию на странице плагинов wp-admin - хотя они появляются в специальном разделе Must-Use - и не могут быть отключены, кроме как путем удаления файла плагина из каталога must-use, который находится в wp-content/mu-plugins по умолчанию.

Я не понимаю, почему вы используете это include_once Пожалуйста, проверьте это, удалив это.


Especulations:

  • как обычный плагин, он должен быть активирован по сети и попытаться инкапсулировать действия с помощью:

    add_action( 'plugins_loaded', function() {
         add_action( 'wpmu_new_user', 'register_hack_action', 10, 1 );
         add_action( 'wpmu_activate_user', 'register_hack_action', 10, 1);
    });
    
  • может быть вы вкладываете в основную тему сайта?
Другие вопросы по тегам