Dieses Thema ist gelöst. Hier finden Sie eine Beschreibung des Problems und der Lösung.
Problem:
Sie versuchen, die URLs für Portfolio-Beiträge unter Verwendung des Enfold-Themes so umzuschreiben, dass die Portfolio-Kategorie in die URL aufgenommen wird. Dabei nutzen Sie WPML für eine mehrsprachige Website. Trotz korrekter Umschreibung der URLs wird der Sprachwechsler-Button nicht richtig umgeschrieben. Beim Wechsel von Deutsch auf Englisch wird der Sprachpräfix (z.B. /en/) nicht hinzugefügt, und der Kategoriename bleibt auf Deutsch.
Solution:
Versuchen Sie bitte die folgenden Hook anzuwenden: https://wpml.org/wpml-hook/wpml_permalink/
Falls diese Lösung veraltet ist oder nicht auf Ihr Problem zutrifft, empfehlen wir Ihnen, ein neues Support-Ticket zu eröffnen. Wir empfehlen auch, die Seite mit bekannten Problemen (https://wpml.org/known-issues/) zu überprüfen, die Version der dauerhaften Lösung zu verifizieren und zu bestätigen, dass Sie die neuesten Versionen von Themes und Plugins installiert haben. Für weitere Unterstützung besuchen Sie bitte unser Support-Forum: https://wpml.org/de/forums/forum/support-in-german/
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.
Heute stehen keine Supporter zur Arbeit im German-Forum zur Verfügung. Sie können gern Tickets erstellen, die wir bearbeiten werden, sobald wir online sind. Vielen Dank für Ihr Verständnis.
Schlagwörter: Custom Work
Dieses Thema enthält 13 Antworten, hat 2 Stimmen.
Zuletzt aktualisiert von Resch & Partner Vor 3 Wochen, 6 Tage.
Assistiert von: Andreas W..
Verfasser | Beiträge |
---|---|
Oktober 17, 2024 unter 10:32 am #16299527 | |
Resch & Partner |
Hallo WPML-Support-Team, Hintergrund des Themas: Die Symptome: Beispiel: Ich habe versucht, das Problem mit Rewrite-Regeln und einem angepassten Filter zu lösen. Der relevante Code ist unten beigefügt, jedoch funktioniert der Sprachwechsel weiterhin nicht korrekt. Frage: Relevanter Code <?php function ce90rup_enfold_portfolio_permalink($post_link, $post) { $portfolio_slug_fallback = 'leistungen-und-produkte'; if ('portfolio' === $post->post_type && 'publish' === $post->post_status) { $terms = get_the_terms($post->ID, 'portfolio_entries'); if ($terms && !is_wp_error($terms)) { if (class_exists('WPSEO_Primary_Term')) { $wpseo_primary_term = new WPSEO_Primary_Term('portfolio_entries', $post->ID); $primary_term_id = $wpseo_primary_term->get_primary_term(); $primary_term = get_term($primary_term_id); if (!is_wp_error($primary_term) && $primary_term) { $terms[0] = $primary_term; } } $portfolio_slug = $terms[0]->slug; $post_link = home_url("/$portfolio_slug/{$post->post_name}/"); } else { $post_link = home_url("/$portfolio_slug_fallback/{$post->post_name}/"); } } return $post_link; } add_filter('post_type_link', 'ce90rup_enfold_portfolio_permalink', 10, 2); function ce90rup_add_enfold_portfolio_rewrite_rules_wpml() { $terms = get_terms(array('taxonomy' => 'portfolio_entries', 'hide_empty' => false)); if ($terms && !is_wp_error($terms)) { foreach ($terms as $term) { $languages = apply_filters('wpml_active_languages', NULL, 'skip_missing=0'); if (!empty($languages)) { foreach ($languages as $lang) { add_rewrite_rule( '^' . $lang['slug'] . '/' . $term->slug . '/([^/]+)/?$', 'index.php?post_type=portfolio&name=$matches[1]&lang=' . $lang['slug'], 'top' ); } } add_rewrite_rule( '^' . $term->slug . '/([^/]+)/?$', 'index.php?post_type=portfolio&name=$matches[1]', 'top' ); } } add_rewrite_rule( '^leistungen-und-produkte/([^/]+)/?$', 'index.php?post_type=portfolio&name=$matches[1]', 'top' ); } add_action('init', 'ce90rup_add_enfold_portfolio_rewrite_rules_wpml'); add_filter('request', function($query_vars) { if (!empty($query_vars['name']) && !isset($query_vars['post_type'])) { $post_types = get_post_types(array('public' => true, '_builtin' => false), 'names'); $query_vars['post_type'] = array_merge(array('post', 'page'), $post_types); } return $query_vars; }); ?> |
Oktober 17, 2024 unter 12:14 pm #16299984 | |
Andreas W. Supporter Sprachen: Englisch (English ) Deutsch (Deutsch ) Zeitzone: America/Lima (GMT-05:00) |
Hallo, Bitte prüfe, ob die Kategorie-Basis unter WPML > Taxonomie-Übersetzung übersetzt wurde. Wähle die Portfolio-Kategorie aus dem Dropdown und werfe einen Blick auf die Übersetzung im unteren Bereich der Seite zum Thema Kategorie Labels und Slugs. Der Slug (Kategorie-Basis) muss hier übersetzt werden. Sollte sich das Problem auf diese Weise nicht lösen, dann gib mit bitte Bescheid. Mit freundlichen Grüßen |
Oktober 17, 2024 unter 12:33 pm #16300149 | |
Resch & Partner |
Hi Andreas, guter Hinweis, das habe ich eben gemacht. Somit wäre das Thema "falscher Slug" bei "Tatsächlich: versteckter Link (falscher Slug, kein Sprachpräfix)" schon mal gelöst. Was noch fehlt, ist das Sprachpräfix. Bsp: versteckter Link wird im Sprachwechsler zu versteckter Link Danke für deine Schnelle Antwort. Appreciate it! |
Oktober 17, 2024 unter 1:09 pm #16300325 | |
Andreas W. Supporter Sprachen: Englisch (English ) Deutsch (Deutsch ) Zeitzone: America/Lima (GMT-05:00) |
Könnte das eventuell an einer Weiterleitung im "Redirection"-Plugin liegen? |
Oktober 17, 2024 unter 1:32 pm #16300425 | |
Resch & Partner |
Nein, kann ich mir nicht vorstellen. Habe sicherheitshalber auch alle Einträge des Plugins gelöscht und die Permalinks neu gespeichert. On Top wurde auch der WPML-Cache geleert, um auf Nummer sicher zu gehen. Den Gedanken hatte ich zwar auch kurz, die URL-Struktur mit Medizin und Medical ist aber neu seit gestern auf dem Entwicklungsserver. HTML von Titan-Beizen im Sprachwechsler: |
Oktober 17, 2024 unter 1:55 pm #16300809 | |
Andreas W. Supporter Sprachen: Englisch (English ) Deutsch (Deutsch ) Zeitzone: America/Lima (GMT-05:00) |
Hallo, Ich kann gerne anbieten mir das einmal genauer anzusehen. Ich möchte einen temporären Zugriff (wp-admin und FTP) auf die Website anfordern, um das Problem genauer zu untersuchen. Die dafür erforderlichen Felder findst Du unterhalb des Kommentarbereichs, wenn Du dich anmelden, um die nächste Antwort zu hinterlassen. Die Informationen, die Du angibst sind privat, was bedeutet, dass nur Du und ich sie sehen und darauf zugreifen können. WICHTIG Das private Antwortformular sieht folgendermaßen aus: Klicke beim nächsten Antworten auf "I still need assistance". Video: Beachte bitte, dass wir verpflichtet sind, diese Informationen auf jedem Ticket individuell anzufordern. Wir dürfen nicht auf Zugangsinformationen zugreifen, die nicht speziell auf diesem Ticket im privaten Antwortformular übermittelt wurden. Mit freundlichen Grüßen |
Oktober 17, 2024 unter 3:20 pm #16301124 | |
Andreas W. Supporter Sprachen: Englisch (English ) Deutsch (Deutsch ) Zeitzone: America/Lima (GMT-05:00) |
Die Ausgangssprache der Kategorie musste angepasst werden. Siehe Screenshot. Siehe nun: |
Oktober 17, 2024 unter 3:27 pm #16301177 | |
Resch & Partner |
Okay, aber das hat jetzt das Thema mit dem Language Switcher nicht behoben. Der zeigt mir bei Sprachwechsel von DE -> EN immer noch den falschen Link an leider (siehe Screenshot vom Hover auf Switcher -> English) Oder übersehe ich etwas? |
Oktober 17, 2024 unter 4:07 pm #16301446 | |
Andreas W. Supporter Sprachen: Englisch (English ) Deutsch (Deutsch ) Zeitzone: America/Lima (GMT-05:00) |
Tut mir, leid ich dachte es wird auf Kategorien verwiesen. Der Portfolio-Beitrag "Titan-Beizen" scheint sich aktuell nicht zu 100% übersetzen zu lassen. Die Übersetzung bleibt bei 90% stehen und wird nicht übernommen. Ich werde dies genauer untersuchen müssen. Ist es möglich auf diese Website temporär Plugins zu deaktivieren und Enfold Parent-Theme zu wechseln? |
Oktober 17, 2024 unter 4:19 pm #16301460 | |
Resch & Partner |
Sie dürfen Sich austoben, ja. Wenn irgendwas crasht, habe ich ein Backup lokal liegen und kann alles wiederherstellen. Deaktivieren oder auf das Parent Theme wechseln sollte aber eh kein Problem sein. Ich bin für heute auch aus dem System ausgeloggt - wir können uns also nicht in die Quere kommen 🙂 |
Oktober 17, 2024 unter 9:30 pm #16302106 | |
Andreas W. Supporter Sprachen: Englisch (English ) Deutsch (Deutsch ) Zeitzone: America/Lima (GMT-05:00) |
Dieses Problem tritt nur dann auf, wenn das Child Theme verwendet wird. Es wird möglicherweise in der folgenden Funktion verursacht: function ce90rup_enfold_portfolio_permalink($post_link, $post) { // Fallback für die Portfolio-Base, falls keine Kategorie zugeordnet ist $portfolio_slug_fallback = 'leistungen-und-produkte'; if ('portfolio' === $post->post_type && 'publish' === $post->post_status) { $terms = get_the_terms($post->ID, 'portfolio_entries'); if ($terms && !is_wp_error($terms)) { // Überprüfen, ob Yoast SEO installiert ist und eine Primärkategorie vorhanden ist if (class_exists('WPSEO_Primary_Term')) { $wpseo_primary_term = new WPSEO_Primary_Term('portfolio_entries', $post->ID); $primary_term_id = $wpseo_primary_term->get_primary_term(); $primary_term = get_term($primary_term_id); if (!is_wp_error($primary_term) && $primary_term && $primary_term->term_id) { $terms[0] = $primary_term; // Primärkategorie überschreiben } } // Den Slug der Portfolio-Kategorie für die URL verwenden $portfolio_slug = $terms[0]->slug; $post_link = home_url("/$portfolio_slug/{$post->post_name}/"); } else { // Fallback-URL verwenden, wenn keine Kategorie gefunden wurde $post_link = home_url("/$portfolio_slug_fallback/{$post->post_name}/"); } } return $post_link; } add_filter('post_type_link', 'ce90rup_enfold_portfolio_permalink', 10, 2); Hier wird nicht beachtet, dass mit WPML ein Sprachverzeichnis verwendet wird. Ich habe die Funktion wie folgt angepasst: function ce90rup_enfold_portfolio_permalink($post_link, $post) { // Fallback für die Portfolio-Base, falls keine Kategorie zugeordnet ist $portfolio_slug_fallback = 'leistungen-und-produkte'; if ('portfolio' === $post->post_type && 'publish' === $post->post_status) { $terms = get_the_terms($post->ID, 'portfolio_entries'); // Get the current language $current_language = apply_filters('wpml_current_language', null); // If there are terms and no error if ($terms && !is_wp_error($terms)) { // Check for primary term if Yoast SEO is installed if (class_exists('WPSEO_Primary_Term')) { $wpseo_primary_term = new WPSEO_Primary_Term('portfolio_entries', $post->ID); $primary_term_id = $wpseo_primary_term->get_primary_term(); $primary_term = get_term($primary_term_id); if (!is_wp_error($primary_term) && $primary_term && $primary_term->term_id) { $terms[0] = $primary_term; // Override with primary term } } // Use the term slug for the URL $portfolio_slug = $terms[0]->slug; $post_link = home_url("/$current_language/$portfolio_slug/{$post->post_name}/"); } else { // Use fallback URL if no category found $post_link = home_url("/$current_language/$portfolio_slug_fallback/{$post->post_name}/"); } } return $post_link; } add_filter('post_type_link', 'ce90rup_enfold_portfolio_permalink', 10, 2); Das alleine löst das Problem leider nicht. Ich werde mir das nochmals genauer anschauen und mich dann zurückmelden. Ich muss allerdings auch darauf hinweise, dass der WPML Support keine Verantwortung für benutzerdefinierte Code-Anpassungen übernehmen kann. |
Oktober 17, 2024 unter 9:39 pm #16302113 | |
Resch & Partner |
Vielen Dank für den Code. Bzgl. der Haftung bzw. Verantwortung brauchen Sie sich keine Sorgen machen 🙂 Ich prüfe eingebauten Code am Ende stets selbst und trage dafür auch die Verantwortung. Ich bin auf Ihr finales Feedback und, im besten Fall, Lösung gespannt. |
Oktober 18, 2024 unter 4:13 pm #16305683 | |
Andreas W. Supporter Sprachen: Englisch (English ) Deutsch (Deutsch ) Zeitzone: America/Lima (GMT-05:00) |
Wenn ich die genannte Funktion entferne, funktioniert die Website wie erwartet. Eventuell könntest Du versuchen die folgende Hook anzuwenden: |
Oktober 19, 2024 unter 9:42 am #16306970 | |
Resch & Partner |
Ich wundere mich gerade über die Info über das Rausnehmen der Funktion. Dass beim Rausnehmen der Funktion der Switcher funktioniert ist klar, weil gerade in dieser Funktion mein eigentliches Ziel verfolgt wird. Nur um sicher zu gehen: Sie wissen bzw. verstehen wirklich mein Problem und was ich erreichen möchte? Falls nicht, möchte ich gerne erst alle Unklarheiten beseitigen, bevor wir ineffizient Supporttickets einander beantworten 🙂 Noch mal die wichtigste Message: Die URLs an sich werden alle sauber umgeschrieben, so wie von meiner Funktion gewünscht. Nur der Sprachwechsler vergisst das Sprachverzeichnis hinzuzufügen (also Beispielsweise /en/, wenn ich von DE -> EN switchen möchte). Ich schau mir parallel die Hook trotzdem an, danke. |
Oktober 21, 2024 unter 8:48 am #16310888 | |
Resch & Partner |
Vielen Dank für die Hilfe. Der Hinweis mit der Hook -> Permalink war sehr hilfreich! |