WPML: wp_query() возвращает сообщения на всех языках, а не только на текущем

Независимо от того, использую ли я его со своей страницы во французской или английской версии, wp_query() возвращает мои пользовательские типы сообщений на всех языках, а не только на текущем. Get_posts() делает то же самое.

Когда я захожу на свою страницу на французском языке, я хочу, чтобы они возвращали CPT только на текущем языке. Как этого добиться?


person drake035    schedule 03.03.2015    source источник


Ответы (2)


При использовании get_posts() установите для параметра suppress_filters значение false:

$myPosts = get_posts(array(
    'suppress_filters' => false
));

http://codex.wordpress.org/Function_Reference/get_posts#Parameters

person P-S    schedule 07.03.2015

Это лучший способ, который я нашел для получения сообщений на определенном языке с помощью WPML...

В моем случае мне нужно найти сообщение по его заголовку на определенном языке и вернуть идентификатор сообщения:

$lang='en';
$title='The title you are searching!';

    function getWpIdByTitle($title, $lang){
        global $sitepress;
        // WPML Super power language switcher...
        $sitepress->switch_lang( $lang );
        $args = array(
          'title'        => $title,
          'post_type'   => 'your-post-type', // Default: post
          'post_status' => 'publish',
          'suppress_filters' => false,
          'numberposts' => 1
        );
        $wp_query = new WP_Query( $args );
        return $wp_query->post->ID;
    }

Вы можете использовать $wp_query->post как результат выборки и выполнять эхо-заголовок, контент и т. д.

Таким образом, вам не нужно использовать

do_action( 'wpml_set_element_language_details', $set_language_args );

для подключения ваших языковых сообщений, ни

icl_object_id(1,'post',false,ICL_LANGUAGE_CODE);

чтобы получить идентификатор сообщения на определенном языке.

person gtamborero    schedule 21.10.2018