web-dev-qa-db-fra.com

Auteur invité - Comment puis-je utiliser des champs personnalisés pour créer un lien d'auteur invité?

Nous publions des articles rédigés par des auteurs invités. Les auteurs invités ne se connecteront pas au site et nous ne souhaitons pas créer d'utilisateurs pour ces auteurs invités. Nous ne sommes également intéressés par aucun des plugins de blogueur invité pour de nombreuses raisons.

Pour afficher le nom de l'auteur invité dans les articles invités, j'ai ajouté une fonction au fichier functions.php de mon thème afin que, à l'aide d'un champ personnalisé, le nom de mon auteur invité apparaisse à la place du nom de l'utilisateur WordPress qui a publié l'article. Cette fonction est décrite ici: http://www.wpbeginner.com/wp-tutorials/how-to-rewrite-guest-author-name-with-custom-fields-in-wordpress/

Grâce à cela, je peux changer le nom de l'auteur pour afficher le nom de l'auteur invité. Toutefois, le lien vers l'auteur pointe toujours sur la page de l'auteur de l'utilisateur WordPress qui a publié l'article.

Alors maintenant, j'aimerais faire quelque chose de similaire avec le lien auteur. Ce que je voudrais faire, c'est que le lien de l'auteur accède à une URL que je vais saisir dans un champ personnalisé, comme je saisis le nom de l'auteur invité.

C'est le code que j'utilise, mais ça ne marche pas. Le lien auteur vous amène toujours à la page auteur de l'utilisateur WordPress qui a publié l'article.

add_filter( 'the_author_posts_link', 'guest_author_link', 10, 3);
add_filter( 'get_author_posts_url', 'guest_author_link', 10, 3);
add_filter( 'the_author_link', 'guest_author_link', 10, 3);
add_filter( 'get_author_link', 'guest_author_link', 10, 3);

function guest_author_link($link, $author_id, $author_nicename) {
  global $post;
  $url = get_post_meta( $post->ID, 'guest-url', true );
    if( $url ) {
        $link = $url;
    }
    return $link;
}
2
Crystal Jones

Supprimer les filtres et la fonction utilisée dans le tutoriel que vous avez lié et remplacez-les par ce code:

add_filter( 'get_the_author_user_url', 'guest_author_url' ); 
add_filter( 'the_author', 'guest_author_link' ); 
add_filter( 'get_the_author_display_name', 'guest_author_name' );

function guest_author_url($url) {
  global $post;
  $guest_url = get_post_meta( $post->ID, 'guest-url', true );
  if ( filter_var($guest_url, FILTER_VALIDATE_URL) ) {
    return $guest_url;
  } elseif ( get_post_meta( $post->ID, 'guest-author', true ) ) {
    return '#';
  }
  return $url;
}

function guest_author_link($name) {
  global $post;
  $guest_url = get_post_meta( $post->ID, 'guest-url', true );
  $guest_name = get_post_meta( $post->ID, 'guest-author', true );
  if ( $guest_name && filter_var($guest_url, FILTER_VALIDATE_URL) ) {
    return '<a href="' . esc_url( $guest_url ) . '" title="' . esc_attr( sprintf(__("Visit %s&#8217;s website"), $guest_name) ) . '" rel="author external">' . $guest_name . '</a>';
  } elseif( $guest_name ) {
    return $guest_name;
  }
  return $name;
}

function guest_author_name( $name ) {
  global $post;
  $guest_name = get_post_meta( $post->ID, 'guest-author', true );
  if ( $guest_name ) return $guest_name;
  return $name;
}

Vous pouvez maintenant utiliser the_author_link() pour voir le nom et le lien de votre auteur invité, mais notez que si votre auteur invité a not a url, les fonctions afficheront le nom de l'auteur invité en reliant la même page (href="#").

Si vous n'aimez pas ce comportement, dans votre fichier de modèle, remplacez the_author_link() par the_author() et si votre auteur invité a un nom et une URL, le lien est affiché, sinon vous ne verrez que le nom.

Notez que guest url doit être une URL valide (commencez par http: // ou https: //), sinon elle ne sera pas affichée.

1
gmazzap