Egal, ob ich es von meiner Seite in der französischen Version oder in der englischen Version verwende, wp_query() gibt meine benutzerdefinierten Beitragstypen in allen Sprachen zurück, nicht nur in der aktuellen. Get_posts() macht das auch.
Wenn ich meine Seite auf Französisch besuche, möchte ich, dass sie nur CPTs in der aktuellen Sprache zurückgeben. Wie erreicht man das?
Beim Benutzen get_posts()einstellen suppress_filters zu FALSCH:
$myPosts = get_posts(array(
'suppress_filters' => false
));
http://codex.wordpress.org/Function_Reference/get_posts#Parameters
Das ist der beste Weg, den ich gefunden habe, um Posts in einer bestimmten Sprache mit WPML abzurufen …
In meinem Fall muss ich einen Beitrag anhand seines Titels in einer bestimmten Sprache finden und die ID des Beitrags zurückgeben:
$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;
}
Sie können $wp_query->post als Ergebnis des Abrufs verwenden und die Echos von Titel, Inhalt usw. ausführen.
Auf diese Weise müssen Sie die nicht verwenden
do_action( 'wpml_set_element_language_details', $set_language_args );
Ihre Sprachbeiträge zu verbinden, weder die
icl_object_id(1,'post',false,ICL_LANGUAGE_CODE);
um die ID eines Beitrags in einer bestimmten Sprache zu erhalten.