web-dev-qa-db-fra.com

Comment afficher différents modèles de publication unique en fonction de l'auteur?

Mon unique single.post.php utilise les éléments suivants si conditionne et rend le modèle approprié.

<?php
$post = $wp_query->post;
    if ( in_category('4') || in_category('59') ) {
        include(TEMPLATEPATH . '/review-post.php');
        }
    elseif (in_category('5')) {
        include(TEMPLATEPATH . '/promo-post.php');
        }
    else {
        include(TEMPLATEPATH . '/regular-post.php');
        }
?>

Je souhaite modifier cela de sorte que /123-author.php modèle de publication unique soit rendu lorsqu'un article est publié par un auteur particulier.

Comment puis-je modifier/ajouter aux conditions ci-dessus de manière à ce que le post individuel recherche un modèle particulier chaque fois qu'il remarque un message de 123author?

Merci.

2
Sledge81

Je fais quelques hypothèses sur la configuration de votre thème:

  • Vous avez deux fichiers:
    • index.php. C'est le fichier qui commence l'exécution de la boucle .
    • content.php. Ceci est le fichier dans lequel votre modèle de contenu générique existe.
  • Vous connaissez get_template_part () . Sinon, c'est facile à mettre en œuvre.

Par exemple, deux utilisateurs de mon système sont identifiés par "admin" et "utilisateur".

À ce stade, nous allons créer un deuxième modèle pour afficher le contenu d'un certain auteur. Dans la racine du répertoire de votre thème, ajoutez un nouveau fichier de modèle. Ce fichier sera utilisé pour afficher le contenu d'un auteur spécifique.

En supposant que votre fichier de modèle de base soit content.php, add content-user.php. Vous pouvez ajouter ce que vous voulez dans ce fichier - un bon point de départ peut être le copier-coller du contenu de content.php. Notez que le nom du nouveau modèle importe peu, mais c'est un un peu plus clair car il va rendre le contenu par l'auteur nommé "utilisateur".

Ensuite, sautez dans votre fichier index.php et localisez la boucle. Il y a des chances qu'il ressemble à quelque chose comme ceci:

while( have_posts() ) : the post(); 
  get_template_part( 'content', get_post_format() );
endwhile;

Si votre thème ne prend pas en charge les formats de publication et/ou si vous utilisez des fichiers d'inclusion standard comme vous l'avez mentionné ci-dessus, il peut ressembler à comme ceci:

while( have_posts() ) : the post(); 
  include_once( 'content.php' )
endwhile;

Aux fins de cette réponse, je vais aller au premier exemple. C'est la meilleure pratique pour inclure différents fichiers de modèle dans votre contenu.

À ce stade, nous devons configurer une vérification pour inclure le modèle basé sur l'utilisateur. Je vais configurer ma boucle pour afficher un modèle pour tous les articles écrits par 'utilisateur' et un modèle distinct pour tous les articles écrits par 'admin' et toute autre personne:

while( have_posts() ) : the post(); 
  if( get_the_author() == 'user' ):
      get_template_part( 'content-user', get_post_format() );
  else:
      get_template_part( 'content', get_post_format() );
  endif;
endwhile;

Le code devrait être assez facile à lire, mais pour être clair:

  • Tout d'abord, nous vérifions l'auteur du message actuel
  • Si l'auteur est 'utilisateur', nous utilisons le deuxième modèle créé
  • Sinon, nous utilisons le modèle par défaut

Votre kilométrage peut varier en fonction de la configuration de votre thème mais l'utilisation de la fonction get_the_author () devrait vous aider à sélectionner dynamiquement un modèle.

Mise à jour en fonction du commentaire de la réponse

Vous pouvez utiliser get_the_author_meta .

Sans voir plus de votre code, je ne peux pas savoir avec certitude comment votre thème est configuré, mais si je devais deviner en fonction du code que vous avez fourni, je vous suggérerais d'essayer quelque chose comme ça:

$post = $wp_query->post;
if(get_the_author_meta('user_nicename', $post->post_author) == 'user') {
    /* Do your author-specific work */
} else {
    if ( in_category('4') || in_category('59') ) {
        include(TEMPLATEPATH . '/review-post.php');
    } elseif (in_category('5')) {
        include(TEMPLATEPATH . '/promo-post.php');
    } else {
        include(TEMPLATEPATH . '/regular-post.php');
    }
} 
2
Tom

Parfois, nous devions afficher notre page de détails (ce qui signifie single.php) dans différents styles. Pour ce sens, j'écris un post sur http://www.webinbangla.com/2012/05/different-style-of-single-php/

0
testtoabc