web-dev-qa-db-fra.com

Les permaliens doivent-ils toujours pointer sur des pages à publication unique?

Supposons que j'ai un blog avec peu de publications par mois, sans commentaires, et que je ne veuille pas afficher les publications sur des pages de publication uniques, mais toujours "en contexte" (par exemple, avec les publications de son mois - ou peut-être un la semaine?). Pour ce faire, je devrais utiliser des liens permanents avec des identificateurs de fragment (#), entre autres choses. Je me demande si cela est pris en charge ou si quelqu'un peut m'indiquer une ressource ou une discussion.

Edité : J'ai posté dans ma propre réponse les détails de mon implémentation.

2
leonbloy

Il existe deux hooks nommés 'pre_post_link' et 'post_link'. Leur premier argument - que vous pouvez changer - est le permalien. Alors …

add_filter( 'pre_post_link', 'wpse_42406_change_permalink', 10, 2 );

function wpse_42406_change_permalink( $permalink, $post )
{
    // change the permalink, let it point to an archive etc.
    return $permalink;
}

… Va changer la sortie.

Dans votre boucle, vous utilisez probablement quelque chose comme…

<li id="post-<?php the_ID(); ?>">

Votre lien permanent pourrait alors pointer vers la page d’archive de votre choix plus #post-$post->ID. Par exemple:

http://example.com/2012/04/#post-42
4
fuxia

Juste au cas où un visiteur trouverait cette information utile, je posterai ma mise en œuvre. Cela nécessite un petit plugin.

Dans cette implémentation, les permaliens montreront l'archive mensuelle - mais l'url restera "complète", c'est-à-dire inclura le titre de l'article - De cette façon, 1) j'ai plus de liberté si je veux changer ce schéma plus tard, sans casser les permaliens, et 2) j'ai des statistiques significatives pour mes visites (je peux savoir quels messages individuels ont été visités à partir de mes journaux).

Dans la page d'administration, je spécifie cette structure de permaliens:

/%year%/%monthnum%/%postname%  
eg: http://example.com/myblog/2012/01/sample_post

Mais le permalien final sera de la forme:

http://example.com/myblog/2012/01/sample_post#post-234

L'identifiant de fragment est ajouté par le hook suivant dans le plugin:

/* adds hash */
function hjg_change_permalink( $permalink, $post ) {
    //if(strpos($permalink,'#')) return $permalink;
    return $permalink . "#post-" . $post->ID;   
}

add_filter( 'post_link', 'hjg_change_permalink', 100, 2 );

J'ai également ajouté ce qui suit dans le plugin, de sorte que les permaliens, même s'ils sont considérés comme des URLs de messages individuels, sont interprétés comme des archives:

function hjg_parse_request( $wp ) {
   if(! isset($wp->query_vars)) return;
   if(! isset($wp->query_vars['year'])) return;
   $wp->query_vars['name']=''; // remove post name
}

add_action( 'parse_request', 'hjg_parse_request');

Mon thème est hérité du twenty-eleven standard, qui ajoute déjà un identifiant "post-NNN" à chaque publication, en content.php:

   <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

si vous utilisez un autre thème, vous devrez ajouter ou adapter ceci.

N'oubliez pas que, pour que cela fonctionne, vos archives mensuelles ne doivent pas être paginées: vous devez avoir un nombre maximal de publications par mois et définir cette valeur dans les "publications par page" de la page d'administration. (J'ai également modifié le fichier index.php dans mon thème afin que la page de couverture affiche un nombre moins important de publications).

0
leonbloy

Ouvrez simplement vos fichiers de thème et supprimez les balises a du titre.

Exemple: Dans votre fichier index.php si vous aviez:

<h2>
<a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>">
    <?php the_title(); ?></a>
</h2>

il deviendrait:

<h2 class="entry-title"><?php the_title(); ?></h2>
0
Jeremy Jared