web-dev-qa-db-ja.com

Guest Author - /author/archiveページに投稿を表示する方法

私は Advanced Custom Fields プラグインを使用して、企業のリーダーシップディレクトリページと管理バイオページのすべてのデータ要素を作成しました。

サイトのブログでは、経営者自身が記事を投稿することはありませんが、記事があるかのように表示されるはずです。私はこのやり方を「ゲスト作者」と呼んでいると思います - コンテンツがサイト管理者によって彼らの代わりに投稿されているWordPressサイトにユーザーアカウントを持っていない作家。

私が起こりたいのはこれです:

  1. ゲスト投稿者が投稿に選択されている場合( ACFカスタム投稿オブジェクト )、名前を出力します。名前はアーカイブページwww.example.com/author/john-doeにリンクする必要があります。
  2. クエスト作者が選択されていない場合、デフォルトでサイト管理者の作者情報になります。
  3. ゲスト作者として投稿するためのゴーストユーザアカウントを作成したくありません。 (すでに述べたように、これらのゲスト作家はすでにACFと組み合わせたチームリーダーポストタイプの一部として詳細に定義されています。)

私は比較的WordPressのテーマ開発に慣れておらず、これを達成するための方法としてGooglingを使っています。これら2つの投稿は、私が自分の状況に最も近いと思うものですが、自分がやろうとしていることを解決するものではありません。

これは一般的なやり方ですか?もしそうなら、誰かが私にもっと詳しい情報を教えてくれる?どうもありがとうございます。

更新

私はちょっとそこに着いています。これまでのところ、ゲスト著者が存在する場合は、カスタム著者投稿リンクを作成することに成功しました。

投稿投稿者とゲスト投稿者のURLは、フォーマットが一致しています…

投稿者の例:www(dot)example.com/author/john-doeゲストの作者の例:www(dot)example.com/author/jane-doe

それでは、投稿者ORゲスト投稿者からの投稿を表示するために、投稿者アーカイブページをハイジャックする方法を理解する必要があります。

FUNCTIONS.PHPコード:

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

}

アップデート2

私は物事を少しやり直しました。著者のアーカイブページを「ハイジャック」する代わりに、必要に応じて "the_author_posts_link"フィルタをカスタム投稿タイプを指すように変更しました。今私の3つの著者タイプのそれぞれは私が彼らのバイオと活動を表示することができる終点を持ちます。

ブログ投稿では、高度なカスタムフィールドを使用します。これには、チームリーダーシップとゲスト投稿者という2つの関連する投稿タイプから選択した投稿オブジェクトが含まれています。

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

あなたはあなた自身の仕事のトンを節約し、ちょうどCo-Authors Plusプラグインを使用することができました。ゲストオーサリング機能があります。あなたはそれらを設定する必要がありますが、彼らのためのアカウント/パスワードはありません、そして彼らは作者ページを持つことができます。 (私は彼らと提携していません。いくつかのサイトで使用してください。)

1
user2961664

あなたが何かを「普通の」ワードプレスの作者​​のように振る舞わせたいのならば、それを行うための「ダミー」アカウントを作成すること、そして本当にそれにログインする可能性を無効にしたいのであれば。他の方法で機能を模倣する他の解決策のためには、あなたが最初に模倣しようとしている機能を完全に理解する必要があります。 「……。

0
Mark Kaplun