• 解決済 tsurutyann

    (@tsurutyann)


    現在、投稿者を分けて記事を書いていますが、
    検索フォームから入力された投稿者の記事のみを一覧表示したいと思っております。

    例えば、投稿者のユーザ名がyamadaだとすると、検索フォームでyamadaと入力し検索ボタンをクリックすると、yamadaの記事一覧が出てくるといった具合です。

    google検索やこちらのフォーラムを検索させて頂きましたが、見つからず困っております。

    初めてこちらのフォーラムを利用しますので、不慣れな点も多いですが、よろしくお願い致します。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • 천궁 메텔

    (@digitmaetel)

    投稿者のページを作るといいです

    トピック投稿者 tsurutyann

    (@tsurutyann)

    맹조さま

    お返事ありがとうございます。

    >>投稿者のページを作るといいです
    というのは固定ページである投稿者の記事一覧を出力しておき、
    検索フォームでは固定ページを検索するということでしょうか?

    この方法ですと、投稿者が増えたときに固定ページも増やさないと駄目だと思いますので、
    これから投稿者が増えるといった場合には厳しいですね。

    gatespace

    (@gatespace)

    WordPressはデフォルトで「作成者別アーカイブインデックスページ」が自動作成されます。

    http://wpdocs.sourceforge.jp/Author_Templates

    トピック投稿者 tsurutyann

    (@tsurutyann)

    gatespaceさま

    お返事ありがとうございます。

    「作成者別アーカイブインデックスページ」が自動作成されてどのようにすればいいのでしょうか?

    理解不足で申し訳ありませんが、ご教授いただけると幸いです。

    kjmtsh

    (@kjmtsh)

    投稿者別アーカイブのウィジェットを有効化すればいいんじゃん、と思ったら、ウィジェットが…ない。メニューも自動で増えたりしてくれないので、初心者にはキツイですね。やっつけですが、こんなのでどうですか?

    テーマの functions.php に以下を。

    function mock_user_search() {
        $atts = shortcode_atts(
            array(
                'include' => array(),
                'exclude' => array()
                ), $atts, 'user_search');
        $args = array(
            'include' => is_array($atts['include']) ? $atts['include'] : array(),
            'exclude' => is_array($atts['exclude']) ? $atts['exclude'] : array(),
            'fields'  => array(
                'user_nicename',
                'display_name',
                'ID'));
        $users = get_users($args);
        if (!$users) return;
        $form = '<form method="GET" action="' . home_url('/') . '">';
        $form .= '<select name="author_name">';
        foreach ($users as $user) {
            $form .= '<option value="' . $user->user_nicename . '">'
                   . $user->display_name . '</option>';
        }
        $form .= '</select>';
        $form .= '<input type="submit" value="検索">';
        $form .= '</form>';
        return $form;
    }
    add_shortcode('user_search', 'mock_user_search');

    検索フォームがほしい場所で以下を記述 (投稿本文でっせ)

    全べてのユーザを表示
    [user_search]
    
    ユーザを限定する場合
    include->含めるユーザのIDを指定 exclude->除外するユーザのIDを指定
    どちらもスペースで区切る 片方だけ指定でも OK
    [user_search include="2 3 4" exclude="1"]

    動作確認はとったけど、無保証。

    kjmtsh

    (@kjmtsh)

    訂正どす。

    'include' => is_array($atts['include']) ? $atts['include'] : explode(' ', $atts['include'],
    'exclude' => is_array($atts['exclude']) ? $atts['exclude'] : explode(' ', $atts['exclude'],

    nobita

    (@nobita)

    @kjmtsh さん

    訂正どす。惜しかったので、直してみましたー :)

    mock_user_search( $atts )

    訂正どす。閉じかっこ

    勝手に追加、 怒んないですよね :)

    'who' => 'authors' );

    function mock_user_search( $atts ) {
    
    	$atts = shortcode_atts(
    	array( 'include' => array(), 'exclude' => array() ), $atts, 'user_search' );
    
    	$args = array(
    		'include'	 => is_array( $atts[ 'include' ] ) ? $atts[ 'include' ] : explode( ' ', $atts[ 'include' ] ),
    		'exclude'	 => is_array( $atts[ 'exclude' ] ) ? $atts[ 'exclude' ] : explode( ' ', $atts[ 'exclude' ] ),
    		'fields'	 => array(
    			'user_nicename',
    			'display_name',
    			'ID' ),
    		'who'		 => 'authors' );
    
    	$users = get_users( $args );
    
    	if ( !$users )	return;
    
    	$form = '<form method="GET" action="' . home_url( '/' ) . '">';
    	$form .= '<select name="author_name">';
    
    	foreach ( $users as $user ) {
    		$form .= '<option value="' . $user->user_nicename . '">'
    		. $user->display_name . '</option>';
    	}
    
    	$form .= '</select>';
    	$form .= '<input type="submit" value="検索">';
    	$form .= '</form>';
    	return $form;
    }
    
    add_shortcode( 'user_search', 'mock_user_search' );
    kjmtsh

    (@kjmtsh)

    Nice catch! Thank you, nobita.

    トピック投稿者 tsurutyann

    (@tsurutyann)

    お礼とお返事、遅くなり申し訳ございません。

    ログインできずにいました。。

    無事上記のコードで解決しました。
    皆様、ありがとうございました!

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • トピック「投稿者(author)別の記事を検索したい。」には新たに返信することはできません。