Yoast-Weiterleitungen mit PHP erzeugen

Neulich musste ich Weiterleitungen für nicht verwendete Schlagwörter und Kategorien erstellen. Bei uns wurden die Weiterleitungen bisher immer mit Yoast erstellt, weil dies auch für alle Beteiligten einfach umsetzbar ist. Da ich aber nicht für jedes der 600 Schlagwörter eine Weiterleitung per Hand anlegen wollte, habe ich mir ein bisschen den Code von Yoast angeschaut und eine Lösung gefunden, mit der man mit Hilfe von PHP Weiterleitungen innerhalb von Yoast erstellen kann.

Snippet

$redirect = new \WPSEO_Redirect('/alte-url/''/neue-url/'301'plain');

if ($redirect) {
    $manager = new \WPSEO_Redirect_Manager();
    $manager->create_redirect($redirect);
}Code-Sprache: PHP (php)

So lässt sich einfach und vor allem auch schnell eine Yoast-Weiterleitung mit PHP erstellen. Leider gibt es hierzu keine Dokumentation, weshalb man sich den Code selbst anschauen muss. Ich habe hier jetzt gezielt auf Verfügbarkeitsabfragen verzichtet, die aber dann im Live-Einsatz verwendet werden sollten.

Ein Beispiel dafür könnte so aussehen:

/**
 * Legt die Weiterleitung in Yoast an.
 *
 * @source WPSEO\Premium\Classes\WPSEO_Redirect
 * @source WPSEO\Premium\Classes\WPSEO_Redirect_Manager
 *
 * @param string $origin Die ursprüngliche URL.
 * @param string $target Die neue URL.
 * @param int $type Die Art der Weiterleitung.
 * @param string $format Das Format für die Weiterleitung. Möglich sind plain und regex.
 *
 * @return bool
 */
function _yoast_insert_redirect(string $origin, string $target, int $type = 301, string $format = 'plain')
{
    if (!class_exists('WPSEO_Redirect_Manager')) {
        return false;
    }

    $redirect = new \WPSEO_Redirect($origin, $target, $type, $format);

    if ($redirect) {
        $manager = new \WPSEO_Redirect_Manager();
        $manager->create_redirect($redirect);
    }

    return false;
}Code-Sprache: PHP (php)

Diese Funktion kannst du dann folgendermaßen verwenden:

_yoast_insert_redirect('/alte-url/''/neue-url/'301'plain');Code-Sprache: JavaScript (javascript)

Hier wird dann auch geprüft, ob der Redirect-Manger von Yoast verfügbar ist, bevor damit gearbeitet wird.

Wichtig ist, dass die Weiterleitungen erst mit WPSEO_Redirect_Manager zu speichern sind. Ohne create_redirect wird die Weiterleitung nicht gespeichert. WPSEO_Redirect macht die neue Weiterleitung lediglich für den Manager fertig, damit der Manager die Weiterleitung verarbeiten kann.

Die Weiterleitung wird manchmal nicht sofort unter Yoast-Weiterleitungen angezeigt. Hier einfach ein paar Sekunden warten, bis die Weiterleitung dann letztendlich erscheint.

Hinweis: Die Methode create_redirect gibt bool zurück. Du kannst also auch prüfen, ob der Redirect angelegt wurde, oder nicht. Ändere dafür die entsprechende Position ab:

function _yoast_insert_redirect(string $origin, string $target, int $type = 301, string $format = 'plain')
{
    if (!class_exists('WPSEO_Redirect_Manager')) {
        return 'Die Weiterleitung konnte nicht erstellt werden.';
    }

    $redirect = new \WPSEO_Redirect($origin, $target, $type, $format);

    if ($redirect) {
        $manager = new \WPSEO_Redirect_Manager();
        $status = $manager->create_redirect($redirect);

        if (true === $status) {
            return 'Die Weiterleitung wurde erstellt.';
        }

        return 'Die Weiterleitung konnte nicht erstellt werden.';
    }

    return 'Die Weiterleitung konnte nicht erstellt werden.';
}Code-Sprache: PHP (php)

So wird dann die Weiterleitung erstellt und die Nachricht ausgegeben:

echo _yoast_insert_redirect('/alte-url/''/neue-url/'301'plain');Code-Sprache: PHP (php)