wake-up-neo.net

URL-Snippet auf Canonical Permalink URL aktualisieren

Meine Permalinks haben das Format domain.com/post-id/post-slug

Ich stelle fest, dass dies eine gute Wahl für Permalinks ist, da ich Artikel mit einer kurzen URL wie domain.com/123 teilen kann.

Aber wenn ich zu dieser kurzen URL gehe, sollte sie nicht umleiten, um die vollständige URL anzuzeigen, da in der Adressleiste nur der domain.com/123 angezeigt wird.

Beliebige Einstellung, um die URL auf den aktuellen Stand zu bringen, ohne dass eine zusätzliche Belastung oder Belastung des Servers erforderlich ist.

UPDATE: Ich benötige keinen Shortlink. Eher, um ein URL-Fragment in die vollständige URL zu konvertieren.

Zum Beispiel: Wenn ich domain.com/123/wrong-slug eingebe, wird es zu domain.com/123/correct-slug korrigiert, aber wenn ich domain.com/123 eingebe, wird es nicht zu domain.com/123/post-slug korrigiert

4
Debajyoti Das

Warum?

Ich denke der Grund warum

a) domain.com/123

wird nicht zurück an umgeleitet

b) domain.com/123/post-slug

bei den Einstellungen für /%post_id%/%postname%/ permalinks lautet die übereinstimmende Regel wie folgt:

[matched_rule] => ([0-9]+)(/[0-9]+)?/?$

Sie können diese Informationen aus dem globalen Objekt $wp abrufen.

Es gibt weitere nützliche Informationen in $wp, die nach der Aktion wp verfügbar sind:

Beispiel (Beitrag): domain.com/123/post-slug/

[query_vars] => Array
    (
        [p] => 123
        [page] => 
        [name] => post-slug
    )

[query_string] => p=123&name=post-slug
[request] => 123/post-slug
[matched_rule] => ([0-9]+)/([^/]+)(/[0-9]+)?/?$
[matched_query] => p=123&name=post-slug&page=
[did_permalink] => 1

Beispiel (Beitrag): domain.com/123/:

[query_vars] => Array
    (
        [p] => 123
        [page] => 
    )
[query_string] => p=123
[request] => 123
[matched_rule] => ([0-9]+)(/[0-9]+)?/?$
[matched_query] => p=123&page=
[did_permalink] => 1

Beispiel (Seite): domain.com/hello-world/:

[query_vars] => Array
    (
        [page] => 
        [pagename] => hello-world
    )

[query_string] => pagename=hello-world
[request] => hello-world
[matched_rule] => (.?.+?)(/[0-9]+)?/?$
[matched_query] => pagename=hello-world&page=
[did_permalink] => 1

Redirect-Beispiel:

Im Folgenden finden Sie ein Beispiel für die Weiterleitung von a) nach b) mithilfe von Informationen aus dem globalen $wp-Objekt:

add_action( 'wp', function(){
    global $wp;
    if( is_numeric( $wp->request ) && empty( $wp->query_vars['page'] ) )
    {
        wp_redirect( get_permalink( absint( $wp->request ) ), 301 );
        exit();
    }
});

wir leiten um, wenn die Seitenabfragevariable nicht gesetzt ist und die Anfrage numerisch ist.

ps: Ich möchte nur erwähnen, dass dies die Aktion wp verwendet, die ziemlich spät ausgelöst wird, aber vor der Aktion template_redirect, wodurch die Weiterleitung möglich wird.

Ich habe auch versucht, ein Beispiel zu finden, bei dem die Variable $_SERVER nicht verwendet wird ;-)

Hoffe das hilft.

3
birgire

Der Shortlink eines WordPress-Posts lautet standardmäßig domain.com/?p=30, nicht die ID nach der Domain. Wenn Sie für jeden Beitrag einen Permalink zur ID als Shortlink wünschen, dann ist dies über ein Plugin möglich.

Die folgende Quelle ist ein Beispiel.

add_filter('get_shortlink', 'fb_custom_shortlink_filter');
function fb_custom_shortlink_filter() {
    global $post;

    return get_site_url() . '/fb/' . $post->ID;
}

enter image description here

Aber wenn Sie die Seite im Frontend mit dieser neuen Kurz-URL nutzen wollen, ist ein Umschreiben wichtig. Nachfolgend eine Lösung für PHP und eine Erweiterung des htaccess.

Fügen Sie die Quelle in ein Plugin ein und fügen Sie diese in das Front-End ein oder fügen Sie die Themendatei index.php hinzu. Die Quelle überprüft den Wert token aus der URL. Dies ist nur möglich, wenn Sie die URL über das Modul mor_rewrite in der Datei .htaccess erweitern (siehe unten).

if ( ! empty( $_GET['token'] ) ) {
  $id = strip_tags( $_GET['token'] );
  if ( is_numeric( $id ) ) {
    header( $_SERVER['SERVER_PROTOCOL'].' 301 Moved Permanently' );
    header( 'Location: ' . get_site_url() . '?p=' . $id );
    exit();
  }
}

header( $_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found' );
header( 'Status:404' );
die( '404 Not Found' )

Das Umschreiben im .htaccess

  RewriteEngine on
  RewriteCond   %{REQUEST_FILENAME} !-d
  RewriteCond   %{REQUEST_FILENAME} !-f
  RewriteRule   (.*) index.php?token=$1 [QSA,L]
2
bueltge

Sie können den folgenden htaccess rule verwenden, um domain.com/post-id zu domain.com/post-id/post-slug umzuleiten.

RedirectMatch 301 ^/(\d+)$ http://domain.com/?p=$1

Setzen Sie diese Regel über die Standardregeln von WordPress.

1
palPalani

Das ist der nächste, den ich bekommen habe. Damit funktionieren URLs wie gewünscht: domain.com/123

// refresh/flush permalinks in the dashboard if this is changed in any way
add_filter( 'generate_rewrite_rules', 'create_post_id_url' );
function create_post_id_url( $wp_rewrite ) {
    $feed_rules = array(
        '(\d+)' => 'index.php?p='.$wp_rewrite->preg_index(1)
    );
    $wp_rewrite->rules = $feed_rules + $wp_rewrite->rules;
}

Fügen Sie dies irgendwo hinzu (z. B. in functions.php), gehen Sie zu Einstellungen > Permalinks und dann zu Speichern .


Das einzigeProblembei diesem Ansatz ist, dass der Benutzer auf domain.com/123 bleibt und nicht zur kanonischen Version (domain.com/123/post-name) umgeleitet wird. Es ist nicht wirklich ein Problem, da Sie bereits einen canonical-Link im <head> der Website haben, sodass es kein Problem für Suchmaschinen ist. Dies kann als Vorteil angesehen werden, da der Benutzer nicht auf eine Umleitung warten muss.


Die Alternative wäre nur die Verwendung von Links wie domain.com/?p=123. Sie sind nur 3 Zeichen länger und belasten den Server nicht - sie funktionieren bereits.


Am Ende warum brauchst du überhauptkurze URLs? Twitter verkürzt automatisch alle URLs, ich sehe keine Notwendigkeit, dies heutzutage zu tun, sie beeinträchtigen nur die Lesbarkeit von URLs.

1
bfred.it