<?php
/**
* Compatible with other plugins/themes
*/
namespace WCBoost\Wishlist;
defined( 'ABSPATH' ) || exit;
use WCBoost\Packages\Utilities\SingletonTrait;
/**
* Compatibility class
*/
class Compatibility {
use SingletonTrait;
/**
* Class constructor
*/
public function __construct() {
add_action( 'init', [ $this, 'check_compatible_hooks' ] );
}
/**
* Check compatibility with other plugins/themes and add hooks
*/
public function check_compatible_hooks() {
if ( defined( 'ICL_SITEPRESS_VERSION' ) ) {
// Add more rewrite rules for the wishlist page in other languages.
$this->add_translated_rewrite_rules();
// Translate product ids. 'wcboost_wishlist_item' is the object type.
$item_object_type = 'wcboost_wishlist_item';
add_filter( "woocommerce_{$item_object_type}_get_product_id", [ $this, 'translate_product_id' ] );
add_filter( "woocommerce_{$item_object_type}_get_variation_id", [ $this, 'translate_variation_id' ] );
// Always use id of default product in adding actions.
// add_filter( 'wcboost_wishlist_add_to_wishlist_product_id', [ $this, 'translate_product_id_to_default' ] );
// Always use the same item key for removing actions.
add_filter( 'wcboost_wishlist_item_key', [ $this, 'translate_item_key_to_default' ], 10, 3 );
// Translate the wishlist page ID.
add_filter( 'option_wcboost_wishlist_page_id', [ $this, 'translate_option_wishlist_page_id' ] );
// Add suffix to the hash key.
add_filter( 'wcboost_wishlist_hash_key', [ $this, 'translate_hash_key' ] );
}
}
/**
* Add rewrite rules for translated wishlist pages.
*
* @return void
*/
protected function add_translated_rewrite_rules() {
// Get the default wishlist page id.
$wishlist_page_id = get_option( 'wcboost_wishlist_page_id' );
if ( empty( $wishlist_page_id ) ) {
return;
}
$trid = apply_filters( 'wpml_element_trid', null, $wishlist_page_id, 'post_page' );
if ( ! $trid ) {
return;
}
$translations = apply_filters( 'wpml_get_element_translations', NULL, $trid, 'post_page' );
$default_lang = apply_filters( 'wpml_default_language', NULL );
foreach ( $translations as $translate_page_obj ) {
// No need to add rewrite rule for default language.
if ( $default_lang == $translate_page_obj->language_code ) {
continue;
}
$page_slug = get_post_field( 'post_name', $translate_page_obj->element_id );
if ( empty( $page_slug ) ) {
continue;
}
Plugin::instance()->query->add_rewrite_rules( $page_slug );
}
}
/**
* Translate product id if a wishlist item
*
* @param int $product_id
* @return int
*/
public function translate_product_id( $product_id ) {
return apply_filters( 'wpml_object_id', $product_id, 'product', true );
}
/**
* Translate variation id if a wishlist item
*
* @param int $variation_id
* @return int
*/
public function translate_variation_id( $variation_id ) {
return apply_filters( 'wpml_object_id', $variation_id, 'product_variation', true );
}
/**
* Treanslate product ID to the default language.
*
* @param int $product_id
* @return int
*/
public function translate_product_id_to_default( $product_id ) {
$default_lang = apply_filters( 'wpml_default_language', NULL );
/**
* Set the third parameter to true to return the original ID if the translation is not found.
* This ensures the add to wishlist button always works properly.
*/
return apply_filters( 'wpml_object_id', $product_id, 'product', true, $default_lang );
}
/**
* Tranlslate item key to the default language.
*
* @param string $key
* @param int $product_id
* @param int $variation_id
* @return string
*/
public function translate_item_key_to_default( $key, $product_id, $variation_id ) {
$default_lang = apply_filters( 'wpml_default_language', NULL );
$current_lang = apply_filters( 'wpml_current_language', NULL );
if ( $default_lang == $current_lang ) {
return $key;
}
$product_id = apply_filters( 'wpml_object_id', $product_id, 'product', false, $default_lang );
if ( $variation_id ) {
$variation_id = apply_filters( 'wpml_object_id', $variation_id, 'product_variation', false, $default_lang );
}
return md5( implode( '_', [ $product_id, $variation_id ] ) );
}
/**
* Translate the option of wishlist page id
*
* @param int $page_id
*
* @return int
*/
public function translate_option_wishlist_page_id( $page_id ) {
return apply_filters( 'wpml_object_id', $page_id, 'page' );
}
/**
* Translate the hash key by adding a suffix
*
* @since 1.1.6
* @param string $hash_key
*
* @return string
*/
public function translate_hash_key( $hash_key ) {
return $hash_key . '-' . get_locale();
}
}
Compatibility::instance();
|