Skip to content

Instantly share code, notes, and snippets.

@igmoweb
Created August 10, 2016 15:49
Show Gist options
  • Select an option

  • Save igmoweb/6db4a8d9c723210b6d73daaa868eede5 to your computer and use it in GitHub Desktop.

Select an option

Save igmoweb/6db4a8d9c723210b6d73daaa868eede5 to your computer and use it in GitHub Desktop.
Carga módulos obligatorios en Jetpack esté o no activado
<?php
class Jetpack_Mandatory_Modules {
public function __construct() {
$active_plugins = get_option( 'active_plugins' );
if ( ! in_array( 'jetpack/jetpack.php', $active_plugins ) ) {
// Jetpack está desactivado pero lo vamos a cargar y ocultar
// Cargamos el código base de Jetpack
add_action( 'plugins_loaded', array( $this, 'load_base_jetpack' ) );
// Este hook marcará los módulos obligatorios como activados
// aquellos obligatorios que nosotros queremos
add_filter( 'pre_option_jetpack_active_modules', array( $this, 'mandatory_modules' ), 500 );
// Cargamos sólo los módulos obligatorios. Jetpack no tendrá en cuenta los demás
add_filter( 'jetpack_get_available_modules', array( $this, 'mandatory_modules' ), 500 );
// Ponemos Jetpack en modo Developer.
add_filter( 'jetpack_development_mode', '__return_true' );
// Y escondemos los menús de administración de Jetpack
add_action( 'admin_init', array( $this, 'remove_jetpack_admin_menus' ), 500 );
}
else {
// Jetpack está activado pero siempre queremos tener nuestros módulos obligatorios cargados
// Carga los módulos obligatorios
add_action( 'plugins_loaded', array( $this, 'load_mandatory_modules' ), 100 );
// ...But remove them from the modules list, we don't need them
add_filter( 'jetpack_get_available_modules', array( $this, 'remove_mandatory_modules_from_modules_list' ), 500 );
}
}
/**
* Quita Jetpack de la lista de plugins
*
* @param $plugins
*
* @return mixed
*/
public function remove_jetpack_from_plugins_list( $plugins ) {
if ( isset( $plugins['jetpack/jetpack.php'] ) ) {
unset( $plugins['jetpack/jetpack.php'] );
}
return $plugins;
}
/**
* Carga el código base de Jetpack
*/
public function load_base_jetpack() {
$jetpack_dir = WP_CONTENT_DIR . '/plugins/jetpack';
include_once( $jetpack_dir . '/jetpack.php' );
}
/**
* Módulos que siempre queremos tener cargados
*
* @return array
*/
public function mandatory_modules() {
return array(
'custom-css',
'widget-visibility',
'shortcodes'
);
}
/**
* Carga los módulos obligatorios
*/
public function load_mandatory_modules() {
$modules = self::mandatory_modules();
foreach ( $modules as $module ) {
if ( ! @include_once( Jetpack::get_module_path( $module ) ) ) {
continue;
}
}
}
/**
* Elimina el menú de Jetpack del escritorio de WordPress
*/
public function remove_jetpack_admin_menus() {
remove_menu_page( 'jetpack' );
remove_submenu_page( 'jetpack', 'jetpack' );
remove_submenu_page( 'jetpack', 'jetpack_modules' );
}
/**
* Saca de la lista de módulos de Jetpack aquellos que son obligatorios
* para que el usuario no pueda verlos ni activarlos o desactivarlos
*
* @param array $modules
*
* @return array
*/
public function remove_mandatory_modules_from_modules_list( $modules ) {
$default_modules = $this->mandatory_modules();
$new_modules = array();
foreach ( $modules as $module => $version ) {
if ( in_array( $module, $default_modules ) ) {
continue;
}
$new_modules[ $module ] = $version;
}
return $new_modules;
}
}
// Instanciamos la clase en un hook temprano
// Ojo. las funciones anónimas no funcionan en PHP > 5.3
add_action( 'muplugins_loaded', function() {
// Nueva instancia de nuestra clase
new Jetpack_Mandatory_Modules();
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment