Navigation überspringen

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: 

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:
Ich versuche, die URLs für Portfolio-Beiträge auf meiner Seite versteckter Link korrekt umzuschreiben. Ich nutze das Enfold-Theme und möchte, dass die Portfolio-URLs nicht die Standard-Base "leistungen-und-produkte" verwenden, sondern die Portfolio-Kategorie in die URL aufgenommen wird. Außerdem nutze ich WPML, um die Website mehrsprachig zu gestalten.

Die Symptome:
Obwohl die Umschreibung der Portfolio-URLs an sich funktioniert, wird der Sprachwechsler-Button nicht korrekt umgeschrieben. Bei einem Wechsel von Deutsch auf Englisch wird der Sprachpräfix (z.B. /en/) nicht korrekt hinzugefügt, und der Kategoriename bleibt auf Deutsch.

Beispiel:
DE-URL: versteckter Link
Nach Sprachwechsel (erwartet): versteckter Link
Tatsächlich: versteckter Link (falscher Slug, kein Sprachpräfix)

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:
Wie kann ich sicherstellen, dass der Sprachwechsler den richtigen Sprachpräfix (z.B. /en/ für Englisch) und den korrekt übersetzten Portfolio-Kategorienamen in die URLs übernimmt?

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
Andreas

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:
EN -> DE: versteckter Link" data-auto-event-observed="true"><span class="wpml-ls-native" lang="de">Deutsch</span>

DE -> EN: versteckter Link" data-auto-event-observed="true"><span class="wpml-ls-native" lang="en">English</span>

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
Lege bitte unbedingt eine Sicherungskopie der Website und der Datenbank an, bevor Du uns den Zugriff gewährst.
Wenn Du die Felder "wp-admin / FTP" nicht sehen kannst, werden Ihre Anmeldedaten für Post und Website als "PUBLIC" (Öffentlich) festgelegt. Veröffentliche die Daten NICHT, es sei denn, Du siehst die erforderlichen wp-admin / FTP-Felder.

Das private Antwortformular sieht folgendermaßen aus:
versteckter Link

Klicke beim nächsten Antworten auf "I still need assistance".

Video:
versteckter Link

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
Andreas

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:
versteckter Link
versteckter Link

ausgangssprache.jpg
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?

Screenshot 2024-10-17 172551.png
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:
https://wpml.org/wpml-hook/wpml_permalink/

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!