サポート » 使い方全般 » authorアーカイブについて

  • お世話になります、初めて投稿します。

    WordPressというものを知って、現在、勉強中です。

    勉強の進捗共有用に知人と利用できる様な投稿サイトを既存のテーマ「TwentyFourteen」を少し調整しながら作っているのですが、ここでひとつご教示いただきたいことがあります。

    著者のアーカイブ(author archive)を見ている時に、wiget上の「最近の投稿」や「カテゴリとその横の投稿数」、「カレンダー」をその著者のもののみにしたいのですが、それらしい英語や過去のフォーラムを見ても、見つけることができませんでした、ごめんなさい。

    また、試行錯誤しつつなのですが、

    // functions.php
    function exclude_other_posts( $wp_query ) {
        $user = wp_get_current_user();
        $wp_query->set( 'author', $user->ID );
    }
    add_action( 'pre_get_posts', 'exclude_other_posts' );

    という風にログインユーザーで絞り込む様なものでテストしてみても、
    カレンダーなどといったwigetには影響させることができませんでした。

    この部分の解決策をご存知の方がいましたら、ご教示いただけたらと思います。

    dumpしてみて、専用のwigetを作る必要がある様な気もしたりなのですが><

    よろしくお願いいたします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • 私も詳しくないのでウィジェットのphpコードを読みながらなのですが、「最近の投稿」ウィジェットが表示する投稿は WP_Query クラスを使って取得されています。そして、投稿を検索する前にフィルター widget_posts_args が呼び出されるので、このフィルターを使えば「現在表示している著者アーカイブのユーザーのみ」に絞り込めそうです。

    WordPress本体のファイル wp-includes/default-widgets.php を検索すると、次のようなコードがあります。

    class WP_Widget_Recent_Posts extends WP_Widget {
    	中略
    
    	public function widget($args, $instance) {
    		中略
    
    		/**
    		 * Filter the arguments for the Recent Posts widget.
    		 *
    		 * @since 3.4.0
    		 *
    		 * @see WP_Query::get_posts()
    		 *
    		 * @param array $args An array of arguments used to retrieve the recent posts.
    		 */
    		$r = new WP_Query( apply_filters( 'widget_posts_args', array(
    			'posts_per_page'      => $number,
    			'no_found_rows'       => true,
    			'post_status'         => 'publish',
    			'ignore_sticky_posts' => true
    		) ) );
    
    		中略
    	}
    
    	中略
    }

    また、下記リンク先Webページの情報が参考になると思います。

    WordPress デフォルトウィジェット “最近の投稿” に一手間加えることで閲覧者に優しいものへ

    続きです。

    「カテゴリとその横の投稿数」ウィジェットは関数 wp_dropdown_categories を使って表示されるので、この関数に「ある著者の投稿」という条件を追加することができれば su-mi さんの希望が実現できます。しかしフィルターを使ってその条件を加えることはできなさそうです。(ファイル wp-includes/default-widgets.php の class WP_Widget_Categories extends WP_Widget で始まる部分がこのウィジェット。)

    「カレンダー」ウィジェットは関数 get_calendar で表示されますが、これもフィルターを使って「ある著者の投稿」という条件を追加することはできなさそうです。(同じファイルの class WP_Widget_Calendar extends WP_Widget で始まる部分がこのウィジェット。)

    gblsm さま

    ありがとうございます。

    最初の投稿後から、海外のフォーラムを読んだりしていてお返事遅くなりました。
    //
    カレンダーについて
    指定したカテゴリのみ・・・やイベントカレンダーで・・・などといった記事がそこそこあったので、それの著者版はどうか?と思ってクエリをいじってみたりしておりましたが、やはりどうにもなりませんでした。

    直前のクエリに条件を追加したら残るはリンク問題かなと思っていましたが、思ったより根が深い感じで勉強になりました。

    カレンダーのHTMLループを書くのが少しメンドウだったのですが、自前でウィジェットっぽい動きをするコードを挿入した方が良さそうな気もしてきました。

    ただ、不勉強ながらauthorのアーカイブはプラグインで解決できるようですが、?author=1の問題があるようなので使わない方が良いのかなとも思い、buddypressなるものを先ほどより見ておりました。

    別言語はそこそこ習ってわかるのですが、PHPはまだ勉強が浅いので、頑張りたいと思います。必死で情報を探したりして、とても勉強になりました。

    また、回答のお知恵もとても参考になりました、習得に向けて励みたいと思います。
    今回の質問の件が解決しましたら共有してみたいと思います。

    gblsmさまありがとうございました。

    追伸

    既存のソースにフックがなさそうな場合、custum_既存関数名 などで、
    コピペ、改良して呼び出しショートコードを作るのが今回早いと思い、テストしてみたいと思います。

    WordPressはフックできるポイントがたくさんあるので、自前のテーマ作りの参考になります、作った人のアイデアすごい。

    込み入ったことをしているテーマなんかもあったりで、とても参考になります。
    なんとなくですが、雰囲気と要領がわかってきました。

    ありがとうございます、まだ調べてみます。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「authorアーカイブについて」には新たに返信することはできません。