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
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'
|
|
);
|
|
}
|
|
}
|