You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

404 lines
9.0 KiB
PHP

<?php
/**
* The Conditional helpers.
*
* @since 0.9.0
* @package RankMath
* @subpackage RankMath\Helpers
* @author Rank Math <support@rankmath.com>
*/
namespace RankMath\Helpers;
use RankMath\Helper;
use RankMath\Admin\Admin_Helper;
use RankMath\Helpers\Param;
defined( 'ABSPATH' ) || exit;
/**
* Conditional class.
*/
trait Conditional {
/**
* Check if whitelabel filter is active.
*
* @return boolean
*/
public static function is_whitelabel() {
/**
* Enable whitelabel.
*
* @param bool $whitelabel Enable whitelabel.
*/
return apply_filters( 'rank_math/whitelabel', false );
}
/**
* Check if module is active.
*
* @param string $id Module ID.
* @param boolean $check_registered Whether to check if module is among registered modules or not.
* @return boolean
*/
public static function is_module_active( $id, $check_registered = true ) {
$active_modules = get_option( 'rank_math_modules', [] );
if ( ! is_array( $active_modules ) || ( $check_registered && ! self::is_plugin_ready() ) ) {
return false;
}
return in_array( $id, $active_modules, true ) && ( ! $check_registered || array_key_exists( $id, rank_math()->manager->modules ) );
}
/**
* Check if Rank Math manager is ready.
*
* @return boolean
*/
public static function is_plugin_ready() {
return ( isset( rank_math()->manager ) && ! is_null( rank_math()->manager ) );
}
/**
* Checks if the plugin is configured.
*
* @param bool $value If this param is set, the option will be updated.
* @return bool Return the option value if param is not set.
*/
public static function is_configured( $value = null ) {
$key = 'rank_math_is_configured';
if ( is_null( $value ) ) {
$value = get_option( $key );
return ! empty( $value );
}
Helper::schedule_flush_rewrite();
update_option( $key, $value );
}
/**
* Check if the site is connected to the Rank Math API.
*
* @return bool
*/
public static function is_site_connected() {
$registered = Admin_Helper::get_registration_data();
return false !== $registered && ! empty( $registered['connected'] ) && ! empty( $registered['api_key'] );
}
/**
* Check that the plugin is licensed properly.
*
* @return bool
*/
public static function is_invalid_registration() {
if ( defined( 'RANK_MATH_REGISTRATION_SKIP' ) && RANK_MATH_REGISTRATION_SKIP ) {
return false;
}
$is_skipped = Helper::is_plugin_active_for_network() ? get_blog_option( get_main_site_id(), 'rank_math_registration_skip' ) : get_option( 'rank_math_registration_skip' );
if ( true === boolval( $is_skipped ) ) {
return false;
}
return ! self::is_site_connected();
}
/**
* Check if author archives are indexable.
*
* @return bool
*/
public static function is_author_archive_indexable() {
if ( true === Helper::get_settings( 'titles.disable_author_archives' ) ) {
return false;
}
if ( Helper::get_settings( 'titles.author_custom_robots' ) && in_array( 'noindex', (array) Helper::get_settings( 'titles.author_robots' ), true ) ) {
return false;
}
return true;
}
/**
* Check if the AMP module is active.
*
* @since 1.0.24
*
* @return bool
*/
public static function is_amp_active() {
if ( ! self::is_module_active( 'amp' ) ) {
return false;
}
if ( function_exists( 'ampforwp_get_setting' ) && 'rank_math' === ampforwp_get_setting( 'ampforwp-seo-selection' ) ) {
return false;
}
return true;
}
/**
* Check if editing the file is allowed.
*
* @since 1.0.32
*
* @return bool
*/
public static function is_edit_allowed() {
/**
* Allow editing the robots.txt & htaccess data.
*
* @param bool Can edit the robots & htacess data.
*/
return apply_filters(
'rank_math/can_edit_file',
( ! defined( 'DISALLOW_FILE_EDIT' ) || ! DISALLOW_FILE_EDIT ) &&
( ! defined( 'DISALLOW_FILE_MODS' ) || ! DISALLOW_FILE_MODS )
);
}
/**
* Check whether to show SEO score.
*
* @since 1.0.32
*
* @return boolean
*/
public static function is_score_enabled() {
/**
* Enable SEO Score.
*
* @param bool Enable SEO Score.
*/
return apply_filters( 'rank_math/show_score', true );
}
/**
* Is on elementor editor.
*
* @since 1.0.37
*
* @return boolean
*/
public static function is_elementor_editor() {
return 'elementor' === Param::get( 'action' );
}
/**
* Is UX Builder (used in Flatsome theme).
*
* @since 1.0.60
*
* @return boolean
*/
public static function is_ux_builder() {
return 'uxbuilder' === Param::get( 'app' ) && ! empty( Param::get( 'type' ) );
}
/**
* Is on Divi frontend editor.
*
* @since 1.0.63
*
* @return boolean
*/
public static function is_divi_frontend_editor() {
return function_exists( 'et_core_is_fb_enabled' ) && et_core_is_fb_enabled();
}
/**
* Get current editor, or false if we're not editing.
*
* @since 1.0.67
*
* @return mixed
*/
public static function get_current_editor() {
if ( self::is_elementor_editor() ) {
return 'elementor';
}
if ( self::is_divi_frontend_editor() ) {
return 'divi';
}
if ( self::is_block_editor() && \rank_math_is_gutenberg() ) {
return 'gutenberg';
}
if ( self::is_ux_builder() ) {
return 'uxbuilder';
}
if ( Admin_Helper::is_post_edit() ) {
return 'classic';
}
return false;
}
/**
* Is Advanced Mode.
*
* @since 1.0.43
*
* @return boolean
*/
public static function is_advanced_mode() {
return 'advanced' === apply_filters( 'rank_math/setup_mode', Helper::get_settings( 'general.setup_mode', 'advanced' ) );
}
/**
* Is Breadcrumbs Enabled.
*
* @since 1.0.64
*
* @return boolean
*/
public static function is_breadcrumbs_enabled() {
return \current_theme_supports( 'rank-math-breadcrumbs' ) || Helper::get_settings( 'general.breadcrumbs' );
}
/**
* Is Wizard page.
*
* @since 1.0.64
*
* @return boolean
*/
public static function is_wizard() {
return ( filter_input( INPUT_GET, 'page' ) === 'rank-math-wizard' || filter_input( INPUT_POST, 'action' ) === 'rank_math_save_wizard' );
}
/**
* Is filesystem method direct.
*
* @since 1.0.71.1
*
* @return boolean
*/
public static function is_filesystem_direct() {
if ( ! function_exists( 'get_filesystem_method' ) ) {
require_once ABSPATH . '/wp-admin/includes/file.php';
}
return 'direct' === get_filesystem_method();
}
/**
* Is AJAX request
*
* @return bool Returns true when the page is loaded via ajax.
*/
public static function is_ajax() {
return function_exists( 'wp_doing_ajax' ) ? wp_doing_ajax() : defined( 'DOING_AJAX' ) && DOING_AJAX;
}
/**
* Is CRON request
*
* @return bool Returns true when the page is loaded via cron.
*/
public static function is_cron() {
return function_exists( 'wp_doing_cron' ) ? wp_doing_cron() : defined( 'DOING_CRON' ) && DOING_CRON;
}
/**
* Is auto-saving
*
* @return bool Returns true when the page is loaded for auto-saving.
*/
public static function is_autosave() {
return defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE;
}
/**
* Is REST request
*
* @link https://wordpress.stackexchange.com/questions/221202/does-something-like-is-rest-exist/221289
*
* Case #1: After WP_REST_Request initialisation
* Case #2: Support "plain" permalink settings
* Case #3: It can happen that WP_Rewrite is not yet initialized,
* so do this (wp-settings.php)
* Case #4: URL Path begins with wp-json/ (your REST prefix)
* Also supports WP installations in subfolders
*
* @return bool
*/
public static function is_rest() {
global $wp_rewrite;
$prefix = rest_get_url_prefix();
if (
defined( 'REST_REQUEST' ) && REST_REQUEST || // (#1)
isset( $_GET['rest_route'] ) && // (#2)
0 === strpos( trim( $_GET['rest_route'], '\\/' ), $prefix, 0 )
) {
return true;
}
// (#3)
if ( null === $wp_rewrite ) {
$wp_rewrite = new \WP_Rewrite();
}
// (#4)
$rest_url = wp_parse_url( trailingslashit( rest_url() ) );
$current_url = wp_parse_url( add_query_arg( [] ) );
if ( ! isset( $current_url['path'] ) || ! isset( $rest_url['path'] ) ) {
return false;
}
return 0 === strpos( $current_url['path'], $rest_url['path'], 0 );
}
/**
* Check if the request is heartbeat.
*
* @return bool
*/
public static function is_heartbeat() {
return 'heartbeat' === Param::post( 'action' );
}
/**
* Check if the request is from frontend.
*
* @codeCoverageIgnore
*
* @return bool
*/
public function is_frontend() {
return ! is_admin();
}
/**
* Is WooCommerce Installed
*
* @return bool
*/
public static function is_woocommerce_active() {
// @codeCoverageIgnoreStart
if ( ! function_exists( 'is_plugin_active' ) ) {
include_once ABSPATH . 'wp-admin/includes/plugin.php';
}
// @codeCoverageIgnoreEnd
return is_plugin_active( 'woocommerce/woocommerce.php' ) && function_exists( 'is_woocommerce' );
}
/**
* Is EDD Installed
*
* @return bool
*/
public static function is_edd_active() {
return class_exists( 'Easy_Digital_Downloads' );
}
}