こんにちは、Justified Galleryプラグインを使用しています。必要なリソースは、ギャラリーを使用しているページでのみロードしようとしています.
プラグインはいくつかのインライン要素とスクリプトをロードしますが、右側のページにない場合はロードできませんでした。
<?php
// Exit if accessed directly
if ( !defined( 'ABSPATH' ) ) {
exit;
}
$fspath = dirname(__FILE__) . '/includes/fs/config.php';
if ( file_exists($fspath) ) {
require_once $fspath;
}
if ( !class_exists( 'DGWT_JG_Core' ) ) {
final class DGWT_JG_Core {
private static $instance;
private $tnow;
public $detector;
public $settings;
public $gallery;
public $lightbox;
public $tilesStyle;
public static function get_instance() {
if ( !isset( self::$instance ) && !( self::$instance instanceof DGWT_JG_Core ) ) {
self::$instance = new DGWT_JG_Core;
self::$instance->constants();
if ( !self::$instance->check_requirements() ) {
return;
}
self::$instance->load_textdomain();
self::$instance->includes();
self::$instance->hooks();
self::$instance->detector = new DGWT_JG_MobileDetect;
self::$instance->settings = new DGWT_JG_Settings;
self::$instance->gallery = new DGWT_JG_Gallery;
self::$instance->lightbox = new DGWT_JG_Lightbox_Loader;
self::$instance->tilesStyle = new DGWT_TilesStyle_Loader;
}
self::$instance->tnow = time();
return self::$instance;
}
/**
* Constructor Function
*/
private function __construct() {
self::$instance = $this;
}
/*
* Check requirements
* @since 1.2.2
*/
private function check_requirements() {
if ( version_compare( PHP_VERSION, '5.3.0' ) < 0 ) {
add_action( 'admin_notices', array( $this, 'admin_notice_php' ) );
return false;
}
return true;
}
/**
* Setup plugin constants
*/
private function constants() {
$this->define( 'DGWT_JG_VERSION', '1.2.3' );
$this->define( 'DGWT_JG_NAME', 'Justified Gallery' );
$this->define( 'DGWT_JG_FILE', __FILE__ );
$this->define( 'DGWT_JG_DIR', plugin_dir_path( __FILE__ ) );
$this->define( 'DGWT_JG_URL', plugin_dir_url( __FILE__ ) );
$this->define( 'DGWT_JG_DOMAIN', 'justified-gallery' );
$this->define( 'DGWT_JG_SETTINGS_KEY', 'dgwt_jg_settings' );
$this->define( 'DGWT_JG_DEBUG', false );
}
/**
* Define constant if not already set
* @param string $name
* @param string|bool $value
*/
private function define( $name, $value ) {
if ( !defined( $name ) ) {
define( $name, $value );
}
}
/**
* Include required core files.
*/
public function includes() {
require_once DGWT_JG_DIR . 'includes/Utils/Helpers.php';
require_once DGWT_JG_DIR . 'includes/Utils/MobileDetect.php';
require_once DGWT_JG_DIR . 'includes/Install.php';
require_once DGWT_JG_DIR . 'includes/admin/settings/SettingsApi.php';
require_once DGWT_JG_DIR . 'includes/admin/settings/Settings.php';
require_once DGWT_JG_DIR . 'includes/RegisterScripts.php';
require_once DGWT_JG_DIR . 'includes/admin/admin.php';
require_once DGWT_JG_DIR . 'includes/admin/Promo/FeedbackNotice.php';
require_once DGWT_JG_DIR . 'includes/Gallery.php';
require_once DGWT_JG_DIR . 'includes/TilesStyle/Loader.php';
require_once DGWT_JG_DIR . 'includes/Lightbox/Loader.php';
}
/**
* Actions and filters
*/
private function hooks() {
add_action( 'admin_init', array( $this, 'admin_scripts' ) );
}
/*
* Enqueue admin sripts
*/
public function admin_scripts() {
// Register CSS
wp_register_style( 'dgwt-jg-admin-style', DGWT_JG_URL . 'assets/css/admin-style.css', array(), DGWT_JG_VERSION );
// Enqueue CSS
wp_enqueue_style( array(
'dgwt-jg-admin-style',
//'wp-color-picker'
) );
//wp_enqueue_script( 'wp-color-picker' );
}
/*
* Register text domain
*/
private function load_textdomain() {
$lang_dir = dirname( plugin_basename( DGWT_JG_FILE ) ) . '/languages/';
load_plugin_textdomain( DGWT_JG_DOMAIN, false, $lang_dir );
}
/*
* Notice: PHP version less than 5.3
*/
public function admin_notice_php() {
?>
<div class="error">
<p>
<?php
printf(__( '<b>Justified Gallery Plugin</b>: You need PHP version at least 5.3 to run this plugin. You are currently using PHP version %s. Please upgrade PHP version or uninstall this plugin.', 'justified-gallery' ), PHP_VERSION);
?>
</p>
</div>
<?php
}
}
}
// Init the plugin
function DGWT_JG() {
return DGWT_JG_Core::get_instance();
}
DGWT_JG();
class DGWT_JG_Gallery {
/**
* Store array with options
* @var array
*/
public $options;
function __construct() {
$this->set_options();
add_filter( 'post_gallery', array( $this, 'post_gallery' ), 15, 3 );
add_action( 'wp_footer', array( $this, 'init_gallery' ), 90 );
}
function remove_justified_gallery() {
remove_action( 'wp_footer', array( $gallery, 'init_gallery' ), 90 );
// remove_action( 'wp_footer', 'include_modal', 90 );
// remove_action( 'wp_footer', 'gallery_init', 90 );
}
add_action( 'wp_head', 'remove_justified_gallery', 1);
ここでの闘争は、関数を保持するクラスにアクセスすることです。
codexに従って、アクションからクラス内の関数を削除するには: https://codex.wordpress.org/Function_Reference/remove_action
プラグインなどによってクラス内からアクションが追加されている場合、それを削除するには、クラスインスタンスを保持する変数を介してクラスにアクセスする必要があります。関数が静的でない限り、その場合はクラスと関数を直接呼び出すことができます。
add_action( 'wp_head', 'remove_my_class_action' );
function remove_my_class_action(){
global $my_class;
remove_action( 'wp_footer', array( $my_class, 'class_function_being_removed' ) );
}
プラグインの構造上の理由から、フック関数はが最終的にDGWT_JG_Core
クラスのgallery
プロパティのinstance
プロパティに存在するように見えます。
DGWT_JG_Core
のインスタンスが作成されると、DGWT_JG_Gallery
クラスがインスタンス化され、DGWT_JG_Core
インスタンスのgallery
プロパティに追加されます。そのため、プラグインの実行時に作成されたDGWT_JG_Core
のインスタンスのgallery
プロパティからアクションを削除する必要があります。
DGWT_JG_Core
は シングルトン なので、DGWT_JG_Core
のインスタンスは1つしかなく、get_instance()
メソッドでアクセスできます。私たちにとって役立つプラグインは、このメソッドを呼び出す関数を定義しています。それは最後にそのDGWT_JG()
関数です。
アクションを削除できるようにするには、DGWT_JG()
を使用してDGWT_JG_Core
のインスタンスを取得し、gallery
プロパティを介してDGWT_JG_Gallery
クラスにアクセスします。
function wpse_284486_remove_justified_gallery() {
$instance = DGWT_JG();
remove_action( 'wp_footer', array( $instance->gallery, 'init_gallery' ), 90 );
}
add_action( 'wp_head', 'wpse_284486_remove_justified_gallery', 0 );
私はこれをシングルフックを実装したクラスの偽バージョンでテストしましたが、うまくいきました。ここに投稿するので、何が起こっているのかを確認できます。
class My_Test_Gallery {
function __construct() {
add_action( 'wp_footer', array( $this, 'init_gallery' ), 90 );
}
function init_gallery() {
echo 'Hello world!';
}
}
class My_Test_Plugin {
private static $instance;
public static function get_instance() {
if ( ! isset( self::$instance ) && ! ( self::$instance instanceof My_Test_Plugin ) ) {
self::$instance = new My_Test_Plugin;
self::$instance->gallery = new My_Test_Gallery;
}
return self::$instance;
}
private function __construct() {
self::$instance = $this;
}
}
function My_TP() {
return My_Test_Plugin::get_instance();
}
My_TP();
function wpse_284486_remove_justified_gallery() {
$instance = My_TP();
remove_action( 'wp_footer', array( $instance->gallery, 'init_gallery' ), 90 );
}
add_action( 'wp_head', 'wpse_284486_remove_justified_gallery', 0 );