web-dev-qa-db-fra.com

Afficher les pages d'archives d'auteurs pour publication sans auteurs

J'ai une page pour chaque auteur, mais si l'auteur n'a pas de message, je ne peux pas obtenir ses variables, car la boucle est vide. La page retourne vide, pas d'avatar, pas d'info et tout, le site entier est vide.

Comment puis-je obtenir WordPress pour extraire la variable auteur s'il n'y a pas de messages (ce qui ne fait aucun auteur, mais je suis sur la page auteurs) ..?

J'utilise twentyeleven comme thème parent.

2
honk31

Pour accéder à l'objet utilisateur auteur en dehors de la boucle sur une archive auteur, vous pouvez procéder comme suit:

global $curauth;
$curauth = (isset($_GET['author_name'])) ? get_user_by('slug', $author_name) : get_userdata(intval($author));
echo 'This is the author page of '.$curauth->display_name;
1
Tom J Nowell

Je l'ai craqué! Dans mon cas, j'ai d'abord créé une page author.php (il en manquait un dans mon thème) à partir de archive.php en le clonant et en le nettoyant. Puis j'ai trouvé ce morceau de code:

<?php if ( have_posts() )  : ?>

Il dit essentiellement: si les auteurs ont publié des articles, alors ... Eh bien, je viens d'ajouter: "OU PAS!"

<?php if ( have_posts() || !have_posts() )  : ?>

Et ça marche à merveille ( voir ici )! "OR NOT" est "|| = OR" et "! = NOT".

De plus, je devais changer la façon dont le modèle récupérait l'avatar de l'auteur, car get_avatar ne fonctionnait pas correctement si l'auteur/l'utilisateur n'avait encore rien publié ou si ses publications étaient toutes "privées" et non "publiques". ".

J'ai étudié le Codex et suis tombé sur la solution suivante. Au lieu de:

echo get_avatar( get_the_author_meta( 'ID' ), 80 );

J'utilise:

get_avatar( $curauth->ID, 80 );

Toutefois, vous devez définir correctement la variable $curauth tout de suite après la fonction get_header.

get_header(); 
$curauth = (get_query_var('author_name')) 
    ? get_user_by('slug', get_query_var('author_name')) 
    : get_userdata(get_query_var('author'));
2
Beppe Roncari

Vous pouvez rediriger la 404 vers le modèle d’auteur avec cette fonction:

function slug_show_authors_without_posts( $template ) {
    global $wp_query;

    if ( $wp_query->query_vars[ 'post_type' ] === 'author' ) {

        return get_author_template();
    }

    return $template;
}
add_filter( '404_template', 'slug_show_authors_without_posts' );

Il convient de garder à l’esprit deux points importants lors de l’utilisation de cette solution: 1) Cela rompt le système de secours de la hiérarchie des modèles. Donc si votre thème n'a pas author.php, vous aurez un nouveau problème puisqu'il ne se repliera pas sur index.php comme vous en avez l'habitude.

TL; DR Vous devez avoir un author.php dans votre thème.

2) Cela ne résout pas le problème que la plupart des modèles author.php testent si l'auteur a publié des messages et, dans le cas contraire, ne renvoie aucun message d'avertissement. Pour éviter cela, vous devrez modifier ou supprimer la boucle dans votre author.php.

TL; DR Votre author.php est probablement conçu pour que cela ne fonctionne pas. Vous devez résoudre ce problème.

0
JPollock

J'ai déjà écrit un plugin Wordpress appelé

Afficher les auteurs sans publications

sentez-vous libre de l'utiliser...

0
powtac