web-dev-qa-db-ja.com

ゲスト作成者 - カスタムフィールドを使用してゲスト作成者リンクを作成する方法を教えてください。

ゲスト作家による記事を投稿しています。ゲストの作者はサイトにログインしないでしょう、そして我々はこれらのゲストの作者のためにユーザを作成したくありません。私達はまた多くの理由でゲストブロガープラグインのどれにも興味を持っていません..

ゲスト投稿のゲスト投稿者名を表示するために、カスタムフィールドを使用して、記事を投稿したWordPressユーザーの名前の代わりにゲスト投稿者名が表示されるように、テーマのfunctions.phpファイルに関数を追加しました。この機能の概要は次のとおりです。 http://www.wpbeginner.com/wp-tutorials/how-to-rewrite-guest-author-name-with-custom-fields-in-wordpress/ /

これを使用して、ゲストの作者の名前を表示するように作者の名前を変更することができます。しかし、作者のリンクはまだ記事を投稿したWordPressユーザーの作者ページを指しています。

だから今私は著者のリンクと同様のことをしたいのですが。私がやりたいことは、著者のリンクを、ゲストの著者の名前を入力するようなカスタムフィールドに入力するURLに移動することです。

これは私が使っているコードですが、うまくいきません。著者リンクをクリックしても、その記事を投稿したWordPressユーザーの著者ページに移動できます。

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

削除リンクしたチュートリアルで使用したフィルタと関数。そしてそれらを次のコードに置き換えます。

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;
}

the_author_link()を使ってゲストの作者の名前とリンクを確認することができますが、ゲストの作者がnotaを持つ場合、関数は同じページをリンクしているゲストの作者の名前を表示します(href="#")。

この動作が気に入らない場合は、テンプレートファイルでthe_author_link()the_author()に置き換えてください。ゲストの作成者が名前とURLを持っている場合はリンクが表示され、それ以外の場合は名前のみが表示されます。

Guest url 有効なURLである必要があります(http://またはhttps://で始まる)にしないと、表示されません。

1
gmazzap