Navigation überspringen

Dies ist das technische Support-Forum für WPML – das mehrsprachige WordPress-Plugin.

Mitlesen können alle, doch nur WPML-Kunden können hier Fragen veröffentlichen. Das WPML-Team antwortet im Forum an 6 Tagen pro Woche, 22 Stunden am Tag.

Dieses Thema enthält 3 Antworten, hat 3 Stimmen.

Zuletzt aktualisiert von Andreas W. Vor 1 Jahr, 6 Monaten.

Assistiert von: Andreas W..

Autor Beiträge
Dezember 5, 2023 um 10:34 am #14995601

Roman

Hallo,

wir haben eine Webseite mit mehren Sprache und mehreren Custom Post Types.

Ein CPT "produkte_service" hat zudem eine Taxonomie, welche in jeder Sprache eine Übersetzung hat.
Damit wir in der URL die entsprechende Sprache erhalten, haben wir unter WPML -> Settings für die "Post Type Translation" z.b. folgendes für Italienisch hinterlegt:

prodotti_servizi/%produkte_service_kategorie%

Somit funktionieren die URLs für uns perfekt.

Wenn wir jedoch URLs mit get_permalink abrufen, bekommen wir nur die deutsche Übersetzung (Hauptsprache) zurück.

z.b. "prodotti_servizi/anwendungen" und nicht "prodotti_servizi/campi_di_applicazione"

Wir hätten auch schon folgendes probiert, jedoch klappt dies auch nicht:
$wpml_permalink = apply_filters( 'wpml_permalink', get_permalink($post->ID) , $wpml_language_code);

Können Sie uns hier eventuell helfen, damit wir die richtige URL erhalten?

Vielen Dank und schöne Grüße,
Roman

wpml_translation.PNG
Dezember 5, 2023 um 5:48 pm #15001731

Marcel
Unterstützer

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch )

Zeitzone: Europe/Madrid (GMT+02:00)

Hallo,

bevor Ihr Ticket einem meiner Kollegen zugewiesen wird, erlauben Sie mir bitte, Sie durch einige erste Schritte zur Fehlersuche zu führen.

Die Lösung über den Filter wäre korrekt. Haben Sie danach ebenso die Permalinks erneut gespeichert? Prüfen Sie bitte ebenso, ob ggf. ein Caching aktiv ist. Siehe https://wpml.org/forums/topic/wpml_permalink-returning-wrong-url/#post-11180957.

Funktioniert dies für Sie?

Freundliche Grüße
Marcel

Dezember 6, 2023 um 6:54 am #15003961

Roman

Hallo Marcel,
danke für die Rückmeldung.

Es ist so, dass sich die Webseite korrekt verhält.
Wir möchten gerne unsere eigene Sitemap XML erstellen und genau dort funktioniert das mit den Links nicht korrekt.

Ich haben unten den Code für unsere Sitemap angefügt.
Eventuell kann man hier einen Fehler erkennen?

Vielen Dank und schöne Grüße,
Roman

<?php
header("Content-type: text/xml; charset=utf-8");
require( '../../../../wp-load.php' );

$language_code = "de-at";
if($_REQUEST['language_code']):
$language_code = $_REQUEST['language_code'];
endif;

$xml = new DomDocument("1.0", "UTF-8");
$xml_elements = $xml->createElement("urlset");
$xml_elements->setAttribute("xmlns", "versteckter Link");

$args = array(
'numberposts' => -1,
'orderby' => 'modified',
//'post_type' => array('page', 'post', 'produkte_service', 'referenzen', 'vorschrift', 'praxisbeispiel', 'jobs', 'faq', 'file'),
'post_type' => array('produkte_service'),
'order' => 'DESC',
'suppress_filters' => 1,
'meta_query' => array(
array(
'key' => 'seo_noindex',
'value' => '1',
'compare' => '!=',
),
),
);

$postsForSitemap = get_posts($args);
/*
$sitemap .= '<?xml-stylesheet type="text/xsl" href="sitemap-style.xsl"?>';
*/
foreach($postsForSitemap as $post):
setup_postdata($post);

$language_information = wpml_get_language_information($post->ID);
//var_dump($language_information);
$wpml_language_code = $language_information['language_code'];
//echo $language_code." => post_id: ".$post->ID."<br>";
if($wpml_language_code == $language_code):

// Switch Language
do_action( 'wpml_switch_language', $wpml_language_code);

$wpml_permalink = apply_filters( 'wpml_permalink', get_permalink($post->ID) , $wpml_language_code);

if($post->post_type == "faq"):
$wpml_permalink = get_permalink_current_language(12100) . '?active=faq_' . $post->ID;
elseif($post->post_type == "standort"):
$wpml_permalink = get_permalink_current_language(1450);
elseif($post->post_type == "file"):
$file = get_field('downloads_post_file',$post->ID);
$wpml_permalink = $file['url'];
endif;

$postdate = explode(" ", $post->post_modified);

$url_element = $xml->createElement("url");
$xml_elements->appendChild($url_element);
$loc = $xml->createElement("loc", $wpml_permalink);
$url_element->appendChild($loc);
$priority = $xml->createElement("priority", "1");
$url_element->appendChild($priority);
$lastmod = $xml->createElement("lastmod", $postdate[0]);
$url_element->appendChild($lastmod);
$changefreq = $xml->createElement("changefreq", "daily");
$url_element->appendChild($changefreq);

endif;

endforeach;

$xml->appendChild($xml_elements);
$xml->formatOutput = TRUE;
$xml->save(ABSPATH."xml_feed_test.xml");
echo $xml->saveXML();
?>

Dezember 6, 2023 um 10:44 pm #15012571

Andreas W.
WPML-Unterstützer seit 12/2018

Sprachen: Englisch (English ) Spanisch (Español ) Deutsch (Deutsch )

Zeitzone: America/Lima (GMT-05:00)

Ich empfehle Dir Du versuchst es hier in den Query Argrumenten mit:

'suppress_filters' => 1,

Quelle:
https://wpml.org/documentation/support/debugging-theme-compatibility/#issue-wp_queryargs-or-get_postsargs-doesnt-filter-out-correct-posts-ids-for-the-current-language

Dezember 11, 2023 um 10:32 am #15035571

Roman

Hallo Andreas,
Der Ansatz war gut... ich hab das Script umgebaut und setze die Sprachen via switch_lang.
Somit funktioniert das jetzt ganz gut.
Danke!