it-swarm.com.de

Gastautor - Wie kann ich benutzerdefinierte Felder verwenden, um einen Gastautor-Link zu erstellen?

Wir veröffentlichen Artikel von Gastautoren. Die Gastautoren werden sich nicht auf der Website anmelden und wir möchten keine Benutzer für diese Gastautoren erstellen. Wir sind aus VIELEN Gründen auch nicht an den Gast-Blogger-Plugins interessiert.

Um den Namen des Gastautors in den Gastbeiträgen anzuzeigen, habe ich die Datei functions.php meines Themas um eine Funktion erweitert, sodass in einem benutzerdefinierten Feld der Name des Gastautors anstelle des Namens des WordPress-Benutzers angezeigt wird, der den Artikel veröffentlicht hat. Diese Funktion wird hier beschrieben: http://www.wpbeginner.com/wp-tutorials/how-to-rewrite-guest-author-name-with-custom-fields-in-wordpress/

Auf diese Weise kann ich den Namen des Autors ändern, um den Namen des Gastautors anzuzeigen. Der Autorenlink verweist jedoch weiterhin auf die Autorenseite des WordPress-Benutzers, der den Artikel gepostet hat.

Jetzt möchte ich etwas Ähnliches mit dem Autorenlink machen. Ich möchte, dass der Autorenlink zu einer URL führt, die ich in ein benutzerdefiniertes Feld wie den Namen des Gastautors eingebe.

Dies ist der Code, den ich verwende, aber er funktioniert nicht. Über den Autorenlink gelangen Sie weiterhin zur Autorenseite des WordPress-Benutzers, der den Artikel gepostet hat.

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

Entferne die Filter und die in dem Tutorial verwendete Funktion und ersetze sie durch diesen 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;
}

Jetzt können Sie the_author_link() verwenden, um den Namen und den Link für Ihren Gastautor anzuzeigen. Beachten Sie jedoch, dass die Funktionen den Namen des Gastautors anzeigen, der dieselbe Seite (href="#") verlinkt, wenn Ihr Gastautor nicht eine URL hat.

Wenn Ihnen dieses Verhalten nicht gefällt, ersetzen Sie the_author_link() in Ihrer Vorlagendatei durch the_author(), und wenn Ihr Gastautor einen Namen und eine URL hat, wird der Link angezeigt. Andernfalls wird nur der Name angezeigt.

Beachten Sie, dass die Gast-URL eine gültige URL sein muss (beginnen Sie mit http: // oder https: //). Andernfalls wird sie nicht angezeigt.

1
gmazzap