l_url' ); } /** * @return bool */ private function is_permalink_filter_from_rel_canonical() { $back_trace_stack = $this->sitepress->get_wp_api()->get_backtrace( 20 ); $keywords = array( 'rel_canonical', 'canonical', 'generate_canonical' ); $result = false; if ( $back_trace_stack ) { foreach ( $back_trace_stack as $key => $value ) { foreach ( $keywords as $keyword ) { if ( 'function' === $key && $keyword === $value ) { $result = true; break; } } } } return $result; } /** * @param string $link * * @return bool|string */ private function get_url_in_default_language_if_rel_canonical( $link ) { if ( $this->is_permalink_filter_from_rel_canonical() ) { $default_language = $this->sitepress->get_default_language(); $link = (string) $this->sitepress->convert_url( $link, $default_language ); } return $link; } /** * @param WPML_Post_Element $post_element * * @return false|string */ private function get_canonical_of_duplicate( $post_element ) { $source_element = $post_element->get_source_element(); if ( $source_element ) { $source_element_id = $source_element->get_id(); $source_language_code = $source_element->get_language_code(); $current_language = $this->sitepress->get_current_language(); $this->sitepress->switch_lang( $source_language_code ); $new_link = get_permalink( $source_element_id ); $this->sitepress->switch_lang( $current_language ); } else { $new_link = get_permalink( $post_element->get_id() ); } return $new_link; } /** * @return bool */ private function must_handle_a_canonical_url() { return ! $this->has_wp_get_canonical_url() && $this->sitepress->get_wp_api()->is_front_end(); } private function init_wpml_translations() { if ( ! $this->wpml_translations ) { $this->wpml_translations = new WPML_Translations( $this->sitepress ); } } }