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.

183 lines
3.5 KiB
PHP

<?php
/**
* The Sitepress helpers.
*
* @since 1.0.40
* @package RankMath
* @subpackage RankMath\Helpers
* @author Rank Math <support@rankmath.com>
*/
namespace RankMath\Helpers;
defined( 'ABSPATH' ) || exit;
/**
* Sitepress class.
*/
class Sitepress {
/**
* Has filter removed.
*
* @var boolean
*/
private $has_get_category = false;
/**
* Has filter removed.
*
* @var boolean
*/
private $has_get_term = false;
/**
* Has filter removed.
*
* @var boolean
*/
private $has_terms_clauses = false;
/**
* Has filter removed.
*
* @var boolean
*/
private $has_get_terms_args = false;
/**
* Has home_url filter removed.
*
* @var boolean
*/
private $has_home_url = false;
/**
* Main instance
*
* Ensure only one instance is loaded or can be loaded.
*
* @return Sitepress
*/
public static function get() {
static $instance;
if ( is_null( $instance ) && ! ( $instance instanceof Sitepress ) ) {
$instance = new Sitepress();
}
return $instance;
}
/**
* Remove term filters.
*/
public function remove_term_filters() {
if ( ! $this->is_active() ) {
return;
}
$sitepress = $this->get_var();
$this->has_get_category = remove_filter( 'category_link', [ $sitepress, 'category_link_adjust_id' ], 1 );
$this->has_get_term = remove_filter( 'get_term', [ $sitepress, 'get_term_adjust_id' ], 1 );
$this->has_terms_clauses = remove_filter( 'terms_clauses', [ $sitepress, 'terms_clauses' ] );
$this->has_get_terms_args = remove_filter( 'get_terms_args', [ $sitepress, 'get_terms_args_filter' ] );
}
/**
* Restore term filters.
*/
public function restore_term_filters() {
if ( ! $this->is_active() ) {
return;
}
$sitepress = $this->get_var();
if ( $this->has_get_category ) {
$this->has_get_category = false;
add_filter( 'category_link', [ $sitepress, 'category_link_adjust_id' ], 1, 1 );
}
if ( $this->has_get_term ) {
$this->has_get_term = false;
add_filter( 'get_term', [ $sitepress, 'get_term_adjust_id' ], 1, 1 );
}
if ( $this->has_terms_clauses ) {
$this->has_terms_clauses = false;
add_filter( 'terms_clauses', [ $sitepress, 'terms_clauses' ], 10, 3 );
}
if ( $this->has_get_terms_args ) {
$this->has_get_terms_args = false;
add_filter( 'get_terms_args', [ $sitepress, 'get_terms_args_filter' ], 10, 2 );
}
}
/**
* Remove home_url filter.
*/
public function remove_home_url_filter() {
if ( ! $this->is_active() ) {
return;
}
global $wpml_url_filters;
$this->has_home_url = remove_filter( 'home_url', [ $wpml_url_filters, 'home_url_filter' ], -10 );
}
/**
* Restore home_url filter.
*/
public function restore_home_url_filter() {
if ( ! $this->is_active() ) {
return;
}
if ( $this->has_home_url ) {
global $wpml_url_filters;
$this->has_home_url = false;
add_filter( 'home_url', [ $wpml_url_filters, 'home_url_filter' ], -10, 4 );
}
}
/**
* Is plugin active.
*
* @return boolean
*/
public function is_active() {
return isset( $GLOBALS['sitepress'] );
}
/**
* Get sitepress global variable.
*
* @return object
*/
public function get_var() {
return $GLOBALS['sitepress'];
}
/**
* Delete cached tax permalink.
*
* @param int $term_id The term ID.
* @param string $taxonomy The taxonomy name.
* @return void
*/
public function delete_cached_tax_permalink( $term_id, $taxonomy ) {
if ( ! $this->is_active() ) {
return;
}
wp_cache_delete(
md5( wp_json_encode( [ $term_id, $taxonomy, false ] ) ),
'icl_tax_permalink_filter'
);
}
}