私は別のプラグインを必要とするプラグインを書いています。だから私は他のプラグインが正しいバージョンで存在するかどうかを最初にチェックしなければなりません。
もしそうなら私はサブメニューページをプラグインページに追加したいのですが、ここで私のコードはうまくいかないようです。
私は問題は私が遅いフック(admin_init)で他のプラグインの存在を確認することができるだけであるということです。しかし、サブメニューを追加するには、以前のフック(admin_menu)を使用する必要があります。それを解決する方法?
class acf_multisite_sync {
function __construct() {
add_action('admin_init', array($this, 'acf_sync_init'));
}
function acf_sync_init() {
$plugins = get_plugins();
if (isset($plugins['advanced-custom-fields-pro/acf.php'])) {
if ($plugins['advanced-custom-fields-pro/acf.php']['Version'] >= 5
&& is_plugin_active('advanced-custom-fields-pro/acf.php')
&& is_main_site()) {
add_action('admin_menu', array($this, 'acf_sync_submenu'));
}
}
}
function acf_sync_submenu() {
add_submenu_page(
'edit.php?post_type=acf-field-group',
'Multisite',
'Multisite',
'manage_options',
'acf-sync',
array($this, 'acf_sync_callback')
);
}
function acf_sync_callback() {
echo 'My Submenu Content';
}
}
new acf_multisite_sync();
はい、分かりました。解決策はプラグインをチェックするために以前のフックを使うことです。しかし、その場合はget_plugins()関数は使用できないので、使用するにはそれを含める必要があります。作業コード:
class acf_multisite_sync {
function __construct() {
add_action('plugins_loaded', array($this, 'acf_sync_init'));
}
function acf_sync_init() {
if (!function_exists('get_plugins')) {
require_once ABSPATH . 'wp-admin/includes/plugin.php';
}
$plugins = get_plugins();
if (isset($plugins['advanced-custom-fields-pro/acf.php'])) {
if ($plugins['advanced-custom-fields-pro/acf.php']['Version'] >= 5
&& is_plugin_active('advanced-custom-fields-pro/acf.php')
&& is_main_site()) {
add_action('admin_menu', array($this, 'acf_sync_submenu'), 100);
}
}
}
function acf_sync_submenu() {
add_submenu_page(
'edit.php?post_type=acf-field-group',
'Multisite',
'Multisite',
'manage_options',
'acf-sync',
array($this, 'acf_sync_callback')
);
}
function acf_sync_callback() {
echo 'My Submenu Content';
}
}
new acf_multisite_sync();