web-dev-qa-db-fra.com

Obtenir l'URL du site, y compris la base avant

Si ma structure de lien permanent est définie sur /blog/%postname%/, comment puis-je récupérer une URL pour mon site qui récupère domain.com/blog/?

Avec la structure permalien mentionnée ci-dessus, lors de l'utilisation de site_url();, il affiche domain.com/ lorsque je cherche à obtenir facilement l'URL du site, y compris la base avant.

Peut-être que je ne sais pas ce qu'est réellement la "base avant".

J'ai l'impression que la base avant est votre "structure de lien permanent". (Stocké dans l'option permalink_structure)

J'ai essayé home_url(); et site_url(); ... Les deux sorties ne contiennent que domain.com/

Je pense simplement à utiliser site_url();, puis à récupérer l'option permalink_structure, à analyser le contenu de l'option moi-même, puis à l'ajouter à la fonction site_url();.

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

Existe-t-il un moyen plus simple d'obtenir l'URL du site, y compris la base avant?

7
Michael Ecklund

Vous pouvez obtenir la valeur de front dans le $wp_rewrite global:

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

Bien que cela ait probablement une utilité limitée, étant donné que la base avant n’est pas nécessairement une page existante et peut 404 dans de nombreux cas. Si vous utilisez cette valeur pour ajouter du préfixe à d'autres URL, vous le faites probablement mal.

Si vous souhaitez que la page soit désignée comme page de publication, cette valeur est stockée dans l'option page_for_posts:

echo get_permalink( get_option( 'page_for_posts' ) );
12
Milo

J'étais sur le point de suggérer quelque chose comme la fonction ci-dessous, mais avouons-le @ La réponse de Milo est un peu plus intelligente , donc pour des raisons de complétude et parce que je l'ai déjà écrite.

function wpse163163_site_url_with_fix_permalink_base() {
    return 
        get_site_url()
        . '/'
        . preg_replace(
            '/\%([a-z0-9]+?)\%/i',
            '',
            str_replace(
                '/',
                '',
                get_option('permalink_structure')
            )
        )
        . '/';
}
4
Nicolai

Vous devrez obtenir un lien comme celui-ci.

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

ou

<?php echo home_url( '/' ) . 'blog'; ?>
0
Robert hue