set_constants();
if ( is_admin() ) {
add_action( 'init', array( $this, 'load_plugin_textdomain' ) );
include_once 'includes/admin-screens.php';
include_once 'includes/admin-config.php';
include_once 'includes/admin-addons.php';
include_once 'includes/admin-warnings.php';
include_once 'includes/admin-notices.php';
}
$this->search_tree = get_option( 'custom-css-js-tree', array() );
$this->settings = get_option( 'ccj_settings', array() );
if ( ! isset( $this->settings['remove_comments'] ) ) {
$this->settings['remove_comments'] = false;
}
if ( ! $this->search_tree || count( $this->search_tree ) == 0 ) {
return false;
}
if ( is_null( self::$_instance ) ) {
$this->print_code_actions();
if ( isset ( $this->search_tree['jquery'] ) && true === $this->search_tree['jquery'] ) {
add_action( 'wp_enqueue_scripts', 'CustomCSSandJS::wp_enqueue_scripts' );
}
}
}
/**
* Add the appropriate wp actions
*/
public function print_code_actions() {
foreach ( $this->search_tree as $_key => $_value ) {
if ( strpos( $_key, 'block' ) !== false ) continue;
$action = 'wp_';
if ( strpos( $_key, 'admin' ) !== false ) {
$action = 'admin_';
}
if ( strpos( $_key, 'login' ) !== false ) {
$action = 'login_';
}
if ( strpos( $_key, 'header' ) !== false ) {
$action .= 'head';
} elseif ( strpos( $_key, 'body_open' ) !== false ) {
$action .= 'body_open';
} else {
$action .= 'footer';
}
$priority = ( 'wp_footer' === $action ) ? 40 : 10;
add_action( $action, array( $this, 'print_' . $_key ), $priority );
}
add_action( 'enqueue_block_editor_assets', array( $this, 'enqueue_block_editor_assets' ) );
}
/**
* Print the custom code.
*/
public function __call( $function, $args ) {
if ( strpos( $function, 'print_' ) === false ) {
return false;
}
$function = str_replace( 'print_', '', $function );
if ( ! isset( $this->search_tree[ $function ] ) ) {
return false;
}
$args = $this->search_tree[ $function ];
if ( ! is_array( $args ) || count( $args ) == 0 ) {
return false;
}
$where = strpos( $function, 'external' ) !== false ? 'external' : 'internal';
$type = strpos( $function, 'css' ) !== false ? 'css' : '';
$type = strpos( $function, 'js' ) !== false ? 'js' : $type;
$type = strpos( $function, 'html' ) !== false ? 'html' : $type;
$tag = array( 'css' => 'style', 'js' => 'script' );
$type_attr = ( 'js' === $type && ! current_theme_supports( 'html5', 'script' ) ) ? ' type="text/javascript"' : '';
$type_attr = ( 'css' === $type && ! current_theme_supports( 'html5', 'style' ) ) ? ' type="text/css"' : $type_attr;
if ( ! apply_filters( 'ccj_default_url_protocol', false ) ) {
$upload_url = str_replace( array( 'https://', 'http://' ), '//', CCJ_UPLOAD_URL ) . '/';
}
if ( 'internal' === $where ) {
$before = $this->settings['remove_comments'] ? '' : '' . PHP_EOL;
$after = $this->settings['remove_comments'] ? '' : '' . PHP_EOL;
if ( 'css' === $type || 'js' === $type ) {
$before .= '<' . $tag[ $type ] . ' ' . $type_attr . '>' . PHP_EOL;
$after = '' . $tag[ $type ] . '>' . PHP_EOL . $after;
}
}
foreach ( $args as $_filename ) {
if ( 'internal' === $where && ( strstr( $_filename, 'css' ) || strstr( $_filename, 'js' ) ) ) {
if ( $this->settings['remove_comments'] || empty( $type_attr ) ) {
$custom_code = @file_get_contents( CCJ_UPLOAD_DIR . '/' . $_filename );
if ( $this->settings['remove_comments'] ) {
$custom_code = str_replace( array(
'' . PHP_EOL,
'' . PHP_EOL
), '', $custom_code );
}
if ( empty( $type_attr ) ) {
$custom_code = str_replace( array( ' type="text/javascript"', ' type="text/css"' ), '', $custom_code );
}
echo $custom_code;
} else {
echo @file_get_contents( CCJ_UPLOAD_DIR . '/' . $_filename );
}
}
if ( 'internal' === $where && ! strstr( $_filename, 'css' ) && ! strstr( $_filename, 'js' ) ) {
$post = get_post( $_filename );
echo $before . $post->post_content . $after;
}
if ( 'external' === $where && 'js' === $type ) {
echo PHP_EOL . "" . PHP_EOL;
}
if ( 'external' === $where && 'css' === $type ) {
$shortfilename = preg_replace( '@\.css\?v=.*$@', '', $_filename );
echo PHP_EOL . "" . PHP_EOL;
}
if ( 'external' === $where && 'html' === $type ) {
$_filename = str_replace( '.html', '', $_filename );
$post = get_post( $_filename );
echo $post->post_content . PHP_EOL;
}
}
}
/**
* Enqueue the jQuery library, if necessary
*/
public static function wp_enqueue_scripts() {
wp_enqueue_script( 'jquery' );
}
/**
* Load the CSS/JS custom codes to the Block editor.
*/
function enqueue_block_editor_assets() {
global $wp_version;
if ( ! isset( $this->search_tree ) || ! is_array( $this->search_tree ) || count( $this->search_tree ) === 0 ) return;
// Default values for the CCJ_codes variable.
$CCJ_codes = [
'internal' => [],
'external' => [],
'path' => CCJ_UPLOAD_URL . '/',
'jquery' => false,
'wp_version' => $wp_version,
];
// Get the jQuery path.
$suffix = wp_scripts_get_suffix();
$guessurl = site_url();
$guessurl = ( ! $guessurl ) ? wp_guess_url() : $guessurl;
$jquery_url = $guessurl . '/wp-includes/js/jquery/jquery' . $suffix . '.js';
// Fill in the values for the CCJ_codes variable.
foreach ( $this->search_tree as $_where => $_files ) {
if ( strpos( $_where, 'html' ) !== false ) continue;
if ( strpos( $_where, 'block' ) === false ) continue;
if ( ! is_array( $_files ) || count( $_files ) === 0 ) continue;
$type = ( strpos( $_where, 'internal' ) !== false ) ? 'internal' : 'external';
// Add the 'internal' or 'external' file name to the array.
$CCJ_codes[ $type ] = array_merge( $CCJ_codes[ $type ], $_files );
// Should the jQuery library be loaded in the Block editor?
$CCJ_codes['jquery'] = ( strpos( $_where, 'js' ) !== false ) ? $jquery_url : $CCJ_codes['jquery'];
}
// Load the "ccj_block_editor.js" script.
wp_register_script( 'ccj_block_editor', plugins_url( '/', CCJ_PLUGIN_FILE ) . 'assets/ccj_block_editor.js', [], CCJ_VERSION );
wp_localize_script( 'ccj_block_editor', 'CCJ_codes', $CCJ_codes );
wp_enqueue_script( 'ccj_block_editor' );
}
/**
* Set constants for later use
*/
public function set_constants() {
$dir = wp_upload_dir();
$constants = array(
'CCJ_VERSION' => '3.49',
'CCJ_UPLOAD_DIR' => $dir['basedir'] . '/custom-css-js',
'CCJ_UPLOAD_URL' => $dir['baseurl'] . '/custom-css-js',
'CCJ_PLUGIN_FILE' => __FILE__,
);
foreach ( $constants as $_key => $_value ) {
if ( ! defined( $_key ) ) {
define( $_key, $_value );
}
}
}
/**
* Loads a plugin’s translated strings.
*/
public function load_plugin_textdomain() {
load_plugin_textdomain( 'custom-css-js', false, plugin_basename( dirname( __FILE__ ) ) . '/languages' );
}
}
endif;
if ( ! function_exists( 'CustomCSSandJS' ) ) {
/**
* Returns the main instance of CustomCSSandJS
*
* @return CustomCSSandJS
*/
function CustomCSSandJS() {
return CustomCSSandJS::instance();
}
CustomCSSandJS();
}
if ( ! function_exists( 'custom_css_js_plugin_action_links' ) ) {
/**
* Plugin action link to Settings page.
*
* @param array $links The settings links.
*
* @return array The settings links.
*/
function custom_css_js_plugin_action_links( $links ) {
$settings_link = '' .
esc_html( __( 'Settings', 'custom-css-js' ) ) . '';
return array_merge( array( $settings_link ), $links );
}
add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), 'custom_css_js_plugin_action_links' );
}
if ( ! function_exists( 'custom_css_js_quads_pro_compat' ) ) {
/**
* Compatibility with the WP Quads Pro plugin,
* otherwise on a Custom Code save there is a
* "The link you followed has expired." page shown.
*
* @param array $post_types The Post types.
* @return array The Post types.
*/
function custom_css_js_quads_pro_compat( $post_types ) {
$match = array_search( 'custom-css-js', $post_types, true );
if ( $match ) {
unset( $post_types[ $match ] );
}
return $post_types;
}
add_filter( 'quads_meta_box_post_types', 'custom_css_js_quads_pro_compat', 20 );
}