You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.6 KiB
56 lines
1.6 KiB
<?php
|
|
|
|
namespace WCML\Rest;
|
|
|
|
use WPML\FP\Fns;
|
|
|
|
class Generic {
|
|
|
|
/**
|
|
* Prevent WPML redirection when using the default language as a parameter in the url
|
|
*/
|
|
public static function preventDefaultLangUrlRedirect() {
|
|
$exp = explode( '?', $_SERVER['REQUEST_URI'] );
|
|
if ( ! empty( $exp[1] ) ) {
|
|
parse_str( $exp[1], $vars );
|
|
if ( isset( $vars['lang'] ) && $vars['lang'] === wpml_get_default_language() ) {
|
|
unset( $vars['lang'] );
|
|
$_SERVER['REQUEST_URI'] = $exp[0] . '?' . http_build_query( $vars );
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param \WP_Query $wp_query
|
|
*/
|
|
public static function autoAdjustIncludedIds( \WP_Query $wp_query ) {
|
|
$lang = $wp_query->get( 'lang' );
|
|
$include = $wp_query->get( 'post__in' );
|
|
if ( empty( $lang ) && ! empty( $include ) ) {
|
|
$filtered_include = [];
|
|
foreach ( $include as $id ) {
|
|
$filtered_include[] = wpml_object_id_filter( $id, get_post_type( $id ), true );
|
|
}
|
|
$wp_query->set( 'post__in', $filtered_include );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* We need an unfiltered 'home_url' so that the REST signature matches.
|
|
*
|
|
* Note that WPML already does this, but fails to recognize a REST
|
|
* request when we get a 'relative' home_url.
|
|
*/
|
|
public static function removeHomeUrlFilterOnRestAuthentication() {
|
|
$returnTrue = Fns::always( true );
|
|
|
|
add_filter( 'determine_current_user', Fns::tap( function() use ( $returnTrue ) {
|
|
add_filter( 'wpml_skip_convert_url_string', $returnTrue );
|
|
} ), 10 );
|
|
|
|
add_filter( 'determine_current_user', Fns::tap( function() use ( $returnTrue ) {
|
|
remove_filter( 'wpml_skip_convert_url_string', $returnTrue );
|
|
} ), 20 );
|
|
}
|
|
|
|
}
|
|
|