web-dev-qa-db-ja.com

投稿なしで著者の著者アーカイブページを表示する

私は作者ごとに1つのページを持っていますが、作者が投稿を持っていない場合は、ループが空なので変数を取得できません。ページには何も表示されず、アバターも、情報やものも表示されず、サイト全体が空になります。

投稿がない場合にWordPressにauthor変数を取得させるにはどうすればよいですか(投稿者がいないのですが、作成者ページにいます)。

私はTwentyelevenを親テーマとして使用しています。

2
honk31

著者アーカイブのループの外側で著者ユーザオブジェクトにアクセスするには、次のようにします。

global $curauth;
$curauth = (isset($_GET['author_name'])) ? get_user_by('slug', $author_name) : get_userdata(intval($author));
echo 'This is the author page of '.$curauth->display_name;
1
Tom J Nowell

私はそれを割った!私の場合、私は最初にarchive.phpからauthor.phpページ(私のテーマはそれが欠けていました)をそれを複製してきれいにすることによって作成しました。それから私はこのコードを見つけました:

<?php if ( have_posts() )  : ?>

それは基本的に言う:作者がいくつかの投稿を公開しているなら、それで...まあ、私はちょうど加えた: "OR NOT!"

<?php if ( have_posts() || !have_posts() )  : ?>

そしてそれは美しく動作します( こちらを参照 )! "OR NOT"は "|| = OR"および "! = NOT"です。

また、get_avatarは、Author/Userがまだ何も公開していない場合、または投稿がすべて「非公開」で「公開」でない場合は正しく機能しないため、テンプレートによる作成者のアバターの取得方法を変更する必要がありました".

私はコーデックスを勉強し、次の解決策を思いついた。の代わりに:

echo get_avatar( get_the_author_meta( 'ID' ), 80 );

私が使う:

get_avatar( $curauth->ID, 80 );

ただし、$curauth関数の後に最初にget_header変数を正しく設定する必要があります。

get_header(); 
$curauth = (get_query_var('author_name')) 
    ? get_user_by('slug', get_query_var('author_name')) 
    : get_userdata(get_query_var('author'));
2
Beppe Roncari

この関数を使って404を作者のテンプレートにリダイレクトすることができます。

function slug_show_authors_without_posts( $template ) {
    global $wp_query;

    if ( $wp_query->query_vars[ 'post_type' ] === 'author' ) {

        return get_author_template();
    }

    return $template;
}
add_filter( '404_template', 'slug_show_authors_without_posts' );

このソリューションを使用する際に留意する必要がある2つの重要な点は次のとおりです。1)これはテンプレート階層の代替システムを壊します。あなたのテーマがauthor.phpを持っていないのであれば、あなたが慣れ親しんだようにindex.phpにフォールバックしないので、あなたは新しい問題を抱えることになります。

TL; DRあなたのテーマにはauthor.phpが必要です。

2)これは、ほとんどのauthor.phpテンプレートが作者に投稿があるかどうかをテストし、そうでなければ投稿警告を返さないという問題に対処していません。これを防ぐには、author.phpのループを修正または削除する必要があります。

TL; DRあなたのauthor.phpはおそらくこれをうまく動作させないように設計されています。これを修正する必要があります。

0
JPollock

私はかつてWordpressのプラグインを書いた

投稿なしで著者を表示

気軽に使ってください...

0
powtac