web-dev-qa-db-fra.com

Auteur invité - Comment afficher les articles sur/author/page d'archive

J'ai utilisé le plugin Champs personnalisés avancés pour créer tous les éléments de données d'une page de répertoire de direction d'entreprise et de bio-pages de gestion.

Sur le blog du site, la direction ne publiera pas d’articles eux-mêmes, mais il devrait sembler qu’ils l’ont été. Je pense que cette pratique est appelée "auteurs invités" - des auteurs qui n'ont pas de compte d'utilisateur sur le site WordPress où le contenu est affiché en leur nom par les administrateurs du site.

Ce que j'aimerais arriver, c'est ceci:

  1. Lorsqu'un auteur invité est sélectionné pour la publication (un objet de publication personnalisé ACF ), affiche son nom. Le nom doit renvoyer à la page d’archive www.example.com/author/john-doe.
  2. Lorsqu'un auteur de quête n'est pas sélectionné, les informations sur l'auteur de l'administrateur du site sont définies par défaut.
  3. Je ne veux PAS créer de comptes d'utilisateurs fantômes à publier en tant qu'auteurs invités. (Comme mentionné, ces auteurs invités ont déjà été définis en détail dans le type de poste de direction d’équipe, en combinaison avec ACF.)

Je suis relativement nouveau dans le développement de thèmes WordPress et cherche Google pour y parvenir. Ces deux publications sont les plus proches de ma situation mais ne résolvent pas ce que j'essaie de faire:

Est-ce une pratique courante? Si oui, quelqu'un peut-il me diriger vers plus d'informations? Je l'apprécierais beaucoup!

METTRE À JOUR

Je vais un peu y arriver. Jusqu’à présent, j’ai réussi à écrire un lien personnalisé pour les publications d’auteurs s’il existe un auteur invité.

L'URL résultant pour un auteur de publication et un auteur invité a maintenant des formats correspondants…

post auteur ex: www (point) exemple.com/author/john-doe auteur invité ex: www (point) exemple.com/author/jane-doe

Maintenant, je dois juste comprendre comment détourner la page d’archives de l’auteur pour afficher les posts de l’auteur du post OR l’auteur invité.

FONCTIONS.PHP CODE:

add_filter( 'the_author_posts_link', 'custom_author_posts_link' );

function custom_author_posts_link($url) {

`global $post;

$post_object = get_field('post_author');

if ( $post_object ) {

`// GUEST AUTHOR EXISTS - override post object to grab relevant guest author info
global $post;
$post = $post_object;
setup_postdata( $post );

$guest_author_slug = $post->post_name;
$guest_author_name = get_field('team_member_name');
$guest_author_posts_link = site_url() . '/author/' .  $guest_author_slug;

$guest_url = sprintf(
    '<a href="%1$s" title="%2$s" rel="author">%3$s</a>',
    esc_url( $guest_author_posts_link ),
    esc_attr( sprintf( __( 'Posts by %s' ), $guest_author_name ) ),
    $guest_author_name
);

$guest_url = $link; 

wp_reset_postdata(); // We're done here. Return to main $post object
`

}

return $url;
`

}

MISE À JOUR 2

J'ai retravaillé un peu les choses. Au lieu de "détourner" la page d'archive d'auteur, j'ai modifié le filtre "the_author_posts_link" afin qu'il pointe vers un type de publication personnalisé, lorsque cela convient. Chacun de mes trois types d’auteurs dispose maintenant d’un point de terminaison sur lequel je peux afficher sa bio et son activité.

Les publications de blog utilisent des champs personnalisés avancés qui permettent à certains éléments de publication de sélectionner les objets de publication des deux types de publication pertinents, Leadership d'équipe et Collaborateurs invités.

add_filter( 'the_author_posts_link', 'custom_author_posts_link' );

function custom_author_posts_link($url) {

    global $post;

    // Check if a post author is defined in the post_author post object. If none is defined, override will     not occur and default post author will display    
    $post_object = get_field('post_author');    

    if ( $post_object ) {

        // Post author exists. Override post object to grab relevant guest author info.
        global $post;
        $post = $post_object;
        setup_postdata( $post );

        $author_type = get_field('author_type');
        $author_slug = $post->post_name;
        $author_name = get_field('author_name');

        // Use the post author type to determine the author link 
        if ( strtolower($author_type) == 'guest contributor' ){
            $author_posts_link = site_url() . '/guest-contributor/' .  $author_slug;
        } else {
            $author_posts_link = site_url() . '/leadership-team/' .  $author_slug;
        }

        // Format the link to return. This is based off the default filter (See WordPress: https://core.trac.    wordpress.org/browser/tags/4.1/src/wp-includes/author-template.php)    
        $guest_url = sprintf(    
            '<a href="%1$s" tit    le="%2$s" rel="author">%3$s</a>',    
            esc_url( $author_po    sts_link ),    
            esc_attr( sprintf(     __( 'Posts     by %s' ), $author_name ) ),    
            $author_name    
        );    

        $url = $guest_url; 

        wp_reset_postdata(); // We're done here, return to main $post object

    }

    return $url;

}
1
emkmail2

Vous auriez pu vous épargner une tonne de travail et simplement utiliser le plugin Co-Authors Plus. Il a une fonction d'auteur invité. Vous devez les configurer, mais il n'y a pas de compte/mot de passe pour eux, et ils peuvent avoir des pages auteur. (Je ne suis pas affilié à eux, utilisez-le sur plusieurs sites.)

1
user2961664

Si vous voulez que quelque chose se comporte comme un auteur "normal" de wordpress, la meilleure chose à faire est de créer un compte "factice", et si vous voulez vraiment désactiver la possibilité de vous connecter. Pour toute autre solution qui imite la fonctionnalité d’une autre manière, vous devez d’abord bien comprendre la fonctionnalité que vous essayez d’imiter, et par vos propres mots suis relativement nouveau dans le développement de thèmes WordPress "....

0
Mark Kaplun