Guest Author – How can I use custom fields to create guest author link?

We are posting articles authored by guest authors. The guest authors will not be logging in to the site, and we don’t want to create users for these guest authors. We are also not interested in any of the guest blogger plugins for MANY reasons..

To display the guest authors name in the guest posts, I’ve added a function to my theme’s functions.php file so that using a custom field, my guest authors name will appear in place of the name of WordPress user who posted the article.. This function is outlined here: http://www.wpbeginner.com/wp-tutorials/how-to-rewrite-guest-author-name-with-custom-fields-in-wordpress/

Using this, I am able to change the name of the author to display the guest author’s name.. However the author link still points to the author page of the WordPress user who posted the article.

So now I’d like to do something similar with the author link. What I would like to do is for the author link to go to a URL that I will enter in a custom field like I enter the guest author’s name.

This is the code I’m using, but it’s not working. The author link still takes you to the author page for the WordPress user who posted the 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;
}

1 Answer
1

Remove the filters and the function used in the tutorial you linked and replace them with this 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;
}

Now you can use the_author_link() to see name and link for your guest author, but note that if your guest author has not a url the functions will show the name of the guest author linking the same page (href="#").

If you don’t like this behavior, in your template file replace the_author_link() with the_author() and if your guest author has a name and a url the link is shown, otherwise you will see only the name.

Note that guest url must be a valid url (start with http:// or https://) or it will not be shown.

Leave a Comment