web-dev-qa-db-fra.com

Comment utiliser des liens relatifs sur mes pages?

Dans mes pages Web, je souhaite utiliser des liens relatifs au lieu de liens absolus.

Cependant, les pages ne permettent pas le code php à l'intérieur, donc je ne peux pas faire d'url de manière relative.

Comment obtenir des URL relatives dans les pages wordpress afin que le changement de nom de domaine n’affecte pas les liens?

4
pdeva
$my_url = 'my/relative/url.php';
echo site_url($my_url);

site_url () lorsqu'il est utilisé seul, il renverra le chemin absolu de votre blog. Mais, si vous ajoutez un argument, comme dans l'exemple ci-dessus, le chemin absolu sera ajouté au chemin. Assurez-vous simplement que votre URL ne contient pas de barre oblique (par exemple:/this/may/not/work).

Enfin, si vous avez installé votre wordpress à la racine de votre serveur, vous pouvez utiliser un chemin relatif au serveur (il utilise la barre oblique pour indiquer à partir de la racine du serveur). Donc, si votre blog est installé à http://www.me.com/blog, vous pouvez accéder à vos liens relatifs en toute sécurité avec /blog/my_link.php.

5
Tom Auger

WordPress a une fonction intégrée pour supprimer le protocole et le domaine des URL absolues, wp_make_link_relative, situé dans /wp-includes/formatting.php:

function wp_make_link_relative( $link ) {
    return preg_replace( '|https?://[^/]+(/.*)|i', '$1', $link );
}

Pour appliquer cette fonction à (par exemple) des liens permanents, ajoutez simplement un filtre, en tant que tel:

add_filter( 'the_permalink', 'wp_make_link_relative' );

Deluxe Blog Tips montre comment appliquer cela à différents types de liens, tout en veillant à ce que les liens de flux et le sitemap ne soient pas affectés:

add_action( 'template_redirect', 'rw_relative_urls' );
function rw_relative_urls() {
    // Don't do anything if:
    // - In feed
    // - In sitemap by WordPress SEO plugin
    if ( is_feed() || get_query_var( 'sitemap' ) )
        return;
    $filters = array(
        'post_link',
        'post_type_link',
        'page_link',
        'attachment_link',
        'get_shortlink',
        'post_type_archive_link',
        'get_pagenum_link',
        'get_comments_pagenum_link',
        'term_link',
        'search_link',
        'day_link',
        'month_link',
        'year_link',
    );
    foreach ( $filters as $filter )
    {
        add_filter( $filter, 'wp_make_link_relative' );
    }
}
6
Daze
2
Bainternet

J'avais l'habitude d'utiliser shortcode avec get_bloginfo pour les chemins relatifs dans le contenu de publication réel. J'allais en faire un plugin complet, mais j'aurais pu prêter serment aux gens de la version automatique publiée, que je ne trouve plus. Voici un exemple simple de la façon dont cela fonctionne car je ne trouve pas mon guichet automatique bancaire puisque je ne l'utilise plus, comme dans le post de Bainternet, peut-être que les gens chez automatic l'ont aussi compris.

Une fonction de shortcode simple qui retournera votre URL de base:

function my_relative_post_image_link() {
$linky = get_bloginfo('wpurl');
echo $linky;
}
add_shortcode('posty', 'my_relative_post_image_link');

Si votre site est exemple.com, placer le shortcode [posty] dans votre contenu renverra example.com sous forme de texte.

Pour l'utiliser réellement, vous devrez personnaliser la fonction en utilisant plus de paramètres de get_blogfino et l'envelopper dans les balises html nécessaires http://codex.wordpress.org/Function_Reference/get_bloginfo

1
Wyck

Je pense qu'il existe un plugin Absolute Relative Links qui remplacera tous les liens de vos pages par des liens relatifs. Cela fonctionne très bien, ce qui signifie que vous n’aurez pas à revenir en arrière et à réparer les anciens liens qui sont toujours absolus.

0
icc97

Cette fonction devrait être mise dans le functions.php de votre thème. Cela rendra tous les permaliens relatifs.

// make root relative
function make_href_root_relative($input) {
    return preg_replace('!http(s)?://' . $_SERVER['SERVER_NAME'] . '/!', '/', $input);
}
function root_relative_permalinks($input) {
    return make_href_root_relative($input);
}
add_filter( 'the_permalink', 'root_relative_permalinks' );

Les images dans le contenu doivent utiliser des liens absolusSIces images servent à nourrir les lecteurs. Si les images utilisent des liens relatifs, les lecteurs de flux tentent de charger les images à partir de leurs propres domaines. L'utilisation de liens relatifs vers des images présente également un faible impact sur les performances. Cela ne semble pas faire de différence avec les permaliens relatifs.

Sur certains serveurs, vous devrez peut-être ajouter la base href à la racine de votre site pour vous assurer que les liens fonctionnent comme prévu.

0
Elpie