Abrufen der Site-URL einschließlich der Front Base

7

/blog/%postname%/Wie kann ich eine URL für meine Site abrufen, die abgerufen wird, wenn meine Permalink-Struktur auf eingestellt ist domain.com/blog/?

Bei der oben erwähnten Permalink-Struktur wird bei der Verwendung site_url();angezeigt, domain.com/wenn ich die URL der Site einschließlich der Front-Base problemlos abrufen möchte.

Vielleicht bin ich mir nicht sicher, was die "Front Base" eigentlich ist.

Ich habe den Eindruck, dass die vordere Basis Ihre "Permalink-Struktur" ist. (In der Option gespeichert permalink_structure)

Ich habe versucht home_url();und site_url();... Beide geben nur ausdomain.com/

Ich denke darüber nach site_url();, die Option nur zu verwenden, dann abzurufen permalink_structure, den Inhalt der Option selbst zu analysieren und sie dann an die site_url();Funktion anzuhängen .

$permalink_structure = get_option('permalink_structure');
$front_base = preg_replace('#(\%)(.*)(\%/)#si', '', $permalink_structure);
echo site_url($front_base, 'http').PHP_EOL;

Gibt es eine einfachere Möglichkeit, die URL der Site einschließlich der Front Base abzurufen?

Michael Ecklund
quelle

Antworten:

12

Sie können den Wert von frontin der globalen erhalten $wp_rewrite:

global $wp_rewrite;
echo $wp_rewrite->front;
// or
echo home_url( $wp_rewrite->front );

Obwohl dies wahrscheinlich von begrenztem Nutzen ist, da die vordere Basis nicht unbedingt eine vorhandene Seite ist und in vielen Fällen 404 sein kann. Wenn Sie diesen Wert verwenden, um anderen URLs voranzustellen, machen Sie es wahrscheinlich falsch.

Wenn Sie möchten, dass die Seite als Beitragsseite festgelegt wird, wird dieser Wert in der folgenden page_for_postsOption gespeichert :

echo get_permalink( get_option( 'page_for_posts' ) );
Milo
quelle
4

Ich wollte gerade etwas wie die unten stehende Funktion vorschlagen, aber seien wir ehrlich @ Milos Antwort ist nur ein bisschen schlauer , also nur aus Gründen der Vollständigkeit und weil ich sie bereits aufgeschrieben habe.

function wpse163163_site_url_with_fix_permalink_base() {
    return 
        get_site_url()
        . '/'
        . preg_replace(
            '/\%([a-z0-9]+?)\%/i',
            '',
            str_replace(
                '/',
                '',
                get_option('permalink_structure')
            )
        )
        . '/';
}
Nicolai
quelle
Hatte im Grunde die gleiche Lösung im Sinn, konnte sie aber nicht formulieren :-)
Pieter Goosen
TBH Ich hatte es so ziemlich aus einem anderen, aber ähnlichen Anwendungsfall auf Lager. @PieterGoosen
Nicolai
Ein bisschen Betrug hat noch nie jemandem geschadet :-) Viel Spaß
Pieter Goosen
0

Sie müssen einen solchen Link erhalten.

<?php echo home_url( '/blog' ); ?>

oder

<?php echo home_url( '/' ) . 'blog'; ?>
Robert Farbton
quelle
Gut ja. Im Idealfall wäre das schön, wenn Sie wüssten, was die vordere Basis war. Was ist, wenn Sie nicht wissen, was die vordere Basis ist? AKA arbeitet in einem Plugin, dessen Front Base an mehreren Stellen mit dem Plugin unterschiedlich sein kann. Aus diesem Grund wollte ich den Inhalt der permalink_structureOption abrufen , selbst analysieren und dann an home_url();oder anhängen site_url();. Ich war nur neugierig, ob es einen einfacheren Weg gibt.
Michael Ecklund
Dann gibt es keinen Weg. Installieren Sie entweder WordPress im domain.com/blogOrdner.
Robert Farbton
1
Auch warum brauchen Sie Front Base? Wenn Sie Dateien einschließen müssen, können Sie diese meistens verwenden ABSPATH.
Robert Farbton
Ich habe ein Plugin, das die Post-Typ-URLs und Taxonomie-URLs kennen muss. Wie Sie wissen, kann an Posttypen und Taxonomien die vordere Basis angehängt werden.
Michael Ecklund