Opal-Estate-Pro/inc/classes/class-opalestate-multilingual.php
2019-09-10 11:27:33 +07:00

158 lines
3.5 KiB
PHP
Executable File

<?php
class Opalestate_Multilingual {
/**
* The current language.
*
* @var string
*/
protected $current_language;
/**
* The default language.
*
* @var string
*/
protected $default_language;
/**
* Constructor.
*/
public function __construct() {
// Make sure to create class after/within 'setup_theme' action.
if ( ! did_action( 'setup_theme' ) ) {
_doing_it_wrong(
__CLASS__ . '::' . __FUNCTION__,
'The class must be call after "setup_theme" has been fire.',
'1.0'
);
} else {
$this->check();
}
}
/**
* Get the current language.
*
* @return string|null
*/
public function get_current_language() {
return $this->current_language ?: null;
}
/**
* Get the main language.
*
* @return string|null
*/
public function get_default_language() {
return $this->default_language ?: null;
}
/**
* Get the original post.
*
* @param int $post_id The post ID.
* @return int
*/
public function get_original_post( $post_id ) {
return $this->get_original_object( $post_id, 'post' );
}
/**
* Get the original object ID (post, taxonomy, etc...).
*
* @param int $id The object id.
* @param string $type Optional, post type or taxonomy name of the object, defaults to 'post'.
* @return int|null
*/
public function get_original_object( $id, $type = 'post' ) {
return icl_object_id( $id, $type, true, $this->get_default_language() );
}
/**
* Perform check the language.
*
* @access private
*/
public function check() {
switch ( true ) {
case ( static::is_wpml() ):
global $sitepress;
$this->current_language = $sitepress->get_current_language();
$this->default_language = $sitepress->get_default_language();
break;
case ( static::is_polylang() ):
$this->default_language = pll_default_language( 'slug' );
$this->current_language = pll_current_language( 'slug' );
break;
}
}
/**
* Sets the specified language.
*
* @param string|null $language The language name.
* @return void
*/
public function set_language( $language = null ) {
if ( static::is_polylang() ) {
$this->set_polylang_language( $language );
} elseif ( static::is_wpml() ) {
global $sitepress;
$sitepress->switch_lang( $language, ! headers_sent() );
}
}
/**
* Sets the specified language on PLL.
*
* @sse \PLL_Choose_Lang::set_language()
*
* @param string|null $language The language name.
* @return void
*/
public function set_polylang_language( $language = null ) {
if ( ! static::is_polylang() ) {
return;
}
/* @var \Polylang $polylang */
$polylang = PLL();
// In frontend, if no language given, get the preferred language
// according to the browser preferences.
if ( empty( $language ) && ( ! is_admin() && ! defined( 'DOING_CRON' ) ) ) {
$curlang = $polylang->choose_lang->get_preferred_language();
} else {
$curlang = $polylang->model->get_language( trim( $language ) );
}
if ( $curlang instanceof \PLL_Language ) {
$polylang->curlang = $curlang;
$GLOBALS['text_direction'] = $curlang->is_rtl ? 'rtl' : 'ltr'; // @codingStandardsIgnoreLine
}
}
/**
* Determine if we're using WPML.
*
* Since PolyLang has a compatibility layer for WPML, we'll have to consider that too.
*
* @return bool
*/
public static function is_wpml() {
return ( defined( 'ICL_SITEPRESS_VERSION' ) && ! static::is_polylang() );
}
/**
* Determine if we're using PolyLang.
*
* @return bool
*/
public static function is_polylang() {
return class_exists( 'Polylang' ) && function_exists( 'pll_current_language' );
}
}