フォーラムへの返信

15件の返信を表示中 - 16 - 30件目 (全39件中)
  • トピック投稿者 kleza

    (@kleza)

    他の方法でやってみることにしました。
    お騒がせしました。

    トピック投稿者 kleza

    (@kleza)

    WP_User_Queryと$wpdbを使って実現できました。

    トピック投稿者 kleza

    (@kleza)

    kjmtshさん

    あけましておめでとうございます。
    お正月から早速のアドバイス有難うございます!

    クエリの意味まで丁寧に解説くださり
    大変感謝です。

    最期のアドバイスもごもっともですね。
    自分もこちらに投稿してからそれで十分、むしろ
    いいのでは?と思っていたのでやはりという感じです(^^ゞ

    47都道府県と決まっているのですものね。

    とはいえ、またひとつ勉強になりました。

    素早いコメント、丁寧なアドバイス
    本当にありがとうございました。

    またお世話になることもあるかもしれませんが
    今後共よろしくお願い申し上げます。

    トピック投稿者 kleza

    (@kleza)

    まだ未熟なところはありますが
    ある程度進めたので自己レス、報告とさせていただき
    ひとまず解決済とさせていただきます。

    以下を参考に
    http://www.tecking.org/archives/2636

    functions.php

    /** 絞込検索 **/
    global $my_public_query_vars;
    $my_public_query_vars = array(
    // Users Fieldsが増えたらそのフィールド名を足すこと
    	'wpcf-address_pref',
    	'wpcf-address_city',
    	'wpcf-facility_village',
    	'wpcf-facility_parking',
    	'wpcf-facility_proshop',
    	'wpcf-facility_locker'
    );
    
    add_filter( 'query_vars', 'my_query_vars' );
    function my_query_vars( $public_query_vars ) {
        global $my_public_query_vars;
        return array_merge( $public_query_vars, $my_public_query_vars );
    }
    
    add_action( 'pre_get_posts', 'my_pre_get_posts' );
    function my_pre_get_posts( $query ) {
        if ( ! is_admin() && is_post_type_archive( 'searchform' ) /* && 'staff' == $query->get( 'post_type' ) */ ) {
            $meta_query = array();
    
            global $my_public_query_vars;
            foreach ( $my_public_query_vars as $key ) {
                if ( $val = $query->get( $key ) ) {
                    $meta_query[] = array(
                        'key'   => $key,
    					'value' => $val,
    					'compare' => 'LIKE'
    
                    );
                }
            }
    
            if ( ! empty( $meta_query ) ) {
                $query->set( 'meta_query', $meta_query );
            }
        }
    }

    検索結果表示(searchform.php)

    <?php
    
    	$address_pref = $_GET['wpcf-address_pref'];
    	$address_city = $_GET['wpcf-address_city'];
    	$address_village = $_GET['wpcf-address_village'];
    	$facility_parking = $_GET['wpcf-facility_parking'];
    	$facility_proshop = $_GET['wpcf-facility_proshop'];
    	$facility_locker = $_GET['wpcf-facility_locker'];
    
    	$args = array(
    		'meta_query' => array(
    			array(
    				'key'     => 'wpcf-address_pref',
    				'value'   => $address_pref,
    				'compare' => 'LIKE'
    			),
    			array(
    				'key'     => 'wpcf-address_city',
    				'value'   => $address_city,
    				'compare' => 'LIKE'
    			),
    			array(
    				'key'     => 'wpcf-address_village',
    				'value'   => $address_village,
    				'compare' => 'LIKE'
    			),
    			array(
    				'key'     => 'wpcf-facility_parking',
    				'value'   => $facility_parking,
    				'compare' => '='
    			),
    			array(
    				'key'     => 'wpcf-facility_proshop',
    				'value'   => $facility_proshop,
    				'compare' => '='
    			),
    			array(
    				'key'     => 'wpcf-facility_locker',
    				'value'   => $facility_locker,
    				'compare' => '='
    			)
    		)
    	);
    
    	$user_query = new WP_User_Query( $args );
    
    		// User Loop
    	if ( !empty( $user_query->results ) ) {
    		foreach ( $user_query->results as $user ) {
    			echo '<a href="/author/' . $user->data->user_nicename . '">' . $user->data->display_name . '</a><br>';
    
    		}
    	} else {
    		echo 'No users found.';
    	}
    
    ?>

    検索フォーム設置ページ(固定ページ)

    <form role="search" method="get" action="<?php echo esc_url( home_url( '/serchform/' ) ); ?>">
    
    					<select name="wpcf-address_pref">
    						<option value="" selected>都道府県を選択</option>
    						<option value="東京都">東京都</option>
    					</select>
    
    					<select name="wpcf-address_city">
    						<option value="" selected>市区を選択</option>
    						<option value="豊島区">豊島区</option>
    						<option value="墨田区">墨田区</option>
    					</select>
    					<br>
    					<input type="checkbox" name="wpcf-facility_parking" value="1">駐車場<br />
    					<input type="checkbox" name="wpcf-facility_proshop" value="1">プロショップ<br />
    					<input type="checkbox" name="wpcf-facility_locker" value="1">ロッカー/更衣室<br />
    
    					<input type="submit" class="submit" name="submit" value="検索" />
    				</form>

    これでまずは求める結果は得られていますが、実際は都道府県や市区のカスタムフィールドをループで取得しないといけないので(でないと増えるごとに手動で追加しないといけない)引き続き試行錯誤してみようと思います。

    トピック投稿者 kleza

    (@kleza)

    Ishihara様

    コメントありがとうございます。

    なるほど、自分が実装しようとしていたものでは
    そもそも対象が違っていたのですね。カスタムフィールドを
    指定できればいいのかと単純に考えていました。お恥ずかしい。。

    アドバイスもありがとうございます。

    検索のカスタマイズはもちろんのこと
    WP_User_Queryも扱ったことはありませんが
    まずはIshihara様のアドバイスで試みてみようと思います。

    ユーザ情報へのメタ情報の追加でなくカスタム投稿で
    というアドバイスもわかります。が、本件では
    各ユーザごとにプロフィールを更新できるように
    する必要がありまして。運営側でやることであれば
    もっとスムーズに運べるのですが。

    まずは明後日の方向を向いていたことがわかった
    だけでも助かりました。ありがとうございます。

    トピック投稿者 kleza

    (@kleza)

    上記コメント、訂正します。

    <?php echo types_render_usermeta_field("カスタムフィールド名", array("user_id" => $author)); ?>

    でした。($user_IDではなく$author)

    $user_IDだとログインしているユーザのIDを取得してました。重ね重ねお恥ずかしい限りです(^_^;) author.phpでは$authorでユーザIDを取得でき、求める結果を得ることができました。

    トピック投稿者 kleza

    (@kleza)

    jim912さん

    いつもお世話になっております。

    参考記事をお知らせくださりありがとうございます。
    ちゃんと書いてあるのに全然気づかなかったです。
    お恥ずかしい。

    <?php echo types_render_usermeta_field("カスタムフィールド名", array("user_id" => $user_ID)); ?>

    で出力出来ました。

    ありがとうございます。

    トピック投稿者 kleza

    (@kleza)

    以下の記述で確認しました。
    投稿が一件もなくてもプロフィールページに
    アクセスすることができ、登録内容が表示されます。

    <?php $user = new WP_User( get_the_author_meta( 'ID', get_query_var( 'author' ) ) ); ?>
    <?php // 権限が「center_user」のプロフィールを出力
    if( in_array( 'center_user', $user->roles ) ) : ?>
    	<?php echo 'center_user'; ?>
    
    <?php // 権限が「contributor」のプロフィールを出力
    elseif( in_array( 'contributor', $user->roles ) ) : ?>
    	<?php echo 'contributor'; ?>
    <?php endif; ?>

    jim912様、あらためてお礼申し上げます。
    ありがとうございました。

    トピック投稿者 kleza

    (@kleza)

    上記コメント、とんでもなく勘違いをしていました。
    以下を読んでその勘違いがわかりました。

    http://ja.forums.wordpress.org/topic/11767?replies=3

    トピック投稿者 kleza

    (@kleza)

    jim912様

    コメントありがとうございます。
    示していただいた記述で投稿がない場合でも
    プロフィールページにアクセス出来るようになりました。
    ありがとうございます。

    権限が「author」の場合とそれ以外で出力する内容を
    分けようとしており、以下でそれは出来ることが確認できました。

    <?php $user = new WP_User( get_query_var( 'author' ) ); ?>
    <?php if( in_array( 'author', $user->roles ) ) : // 投稿者の場合だけ出力 ?>
    	<?php echo 'author'; ?>
    <?php else : ?>
    	<?php echo 'other'; ?>
    <?php endif; ?>

    が、権限を「寄稿者=contributor」で指定すると
    なぜか望む結果が得られず(下記コード)
    寄稿者ユーザでもそれ以外でも「other」を出力してしまうのです。

    <?php $user = new WP_User( get_query_var( 'contributor' ) ); ?>
    <?php if( in_array( 'contributor', $user->roles ) ) : // 投稿者の場合だけ出力 ?>
    	<?php echo 'contributor'; ?>
    <?php else : ?>
    	<?php echo 'other'; ?>
    <?php endif; ?>

    ですが、本トピックについてはおかげ様で
    解決できましたので、解決済とさせていただきます。
    上記の問題については引き続き調べてみようと思います。

    また別トピックでお世話になるかもしれませんが
    このたびはありがとうございました。

    今後ともよろしくお願い申し上げます。

    トピック投稿者 kleza

    (@kleza)

    jim912様

    コメントありがとうございます。

    失礼致しました。
    確認が不十分でした。

    現在ユーザの権限グループによって
    author.php内で出力を分けているつもりなのですが
    指定権限グループ(以下の例ですと「center_user」)
    のユーザが投稿をしていないと以下の出力の出し分けが
    有効にならず「center_user」の場合も「author」の
    部分で出力されてしまうのです。

    author.php

    <!-- 権限が「center_user」のユーザ情報を出力 -->
    <?php
    // 記事を投稿した人のユーザIDからユーザ情報の取得
    $user = new WP_User( get_the_author_meta( 'ID' ) );
    
    // 権限が「center_user」だったら出力
    if( in_array( 'center_user', $user->roles ) ) {
    	echo(types_render_usermeta_field("name_center", array()));
    }
    ?>
    <!-- END 権限が「center_user」のユーザ情報を出力 -->
    
    <!-- 投稿者-authorの場合に表示 -->
    <?php $user = new WP_User( get_the_author_meta( 'ID' ) ); // 記事を投稿した人のユーザIDからユーザ情報の取得 ?>
    <?php if( in_array( 'author', $user->roles ) ) : // 投稿者の場合だけ出力 ?>
    
    	<h3 class="tit">投稿記者紹介</h3>
    	<div class="author_wrapper">
    		<div class="div_author_1">
    			<div class="left">
    				<p><img src="<?php bloginfo( template_url ); ?>/images/page/tit_prof.jpg" width="423" height="15" /></p>
    				<p class="name"><?php the_author_meta( nickname, $author ); ?></p>
    				<p class="birthday">生年月日;<?php the_author_meta( bd, $author ); ?></p>
    				<p class="from">出身地;<?php the_author_meta( from, $author ); ?></p>
    				<p class="prof"><?php the_author_meta( description, $author ); ?></p>
    			<!--floatL--></div>
    			<div class="right"><?php  echo get_simple_local_avatar($author,225); ?></div>
    		<!--div_author_1--></div>
    
    		<div class="div_author_2">
    			<p><img src="<?php bloginfo( template_url ); ?>/images/page/tit_article.jpg" width="703" height="15" /></p>
    			<ul>
    			<?php if (have_posts()) : ?>
    				<?php while (have_posts()) : the_post(); ?>
    				<li>
    					<p class="date"><?php the_time('Y/n/j'); ?></p>
    					<p class="title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p>
    				</li>
    				<?php endwhile; ?>
    			<?php endif; ?>
    			</ul>
    		</div>
    		<!--div_author_2-->
    
    	</div>
    	<!--author_wrapper-->
    <?php endif; ?>
    <!-- // 投稿者-authorの場合に表示 -->

    記述の仕方に問題があるのでしょうか。

    トピック投稿者 kleza

    (@kleza)

    ちゃんと調べて確認できてませんが
    そもそもカスタムフィールドの値が
    投稿日時の情報を持っていないような。

    他の実装方法を検討することにします。

    失礼しました。

    トピック投稿者 kleza

    (@kleza)

    the_author_metaの引数に該当のフィールド名を指定することで叶いました。

    <?php the_author_meta('news1'); ?>

    大げさに考えすぎてました(^^ゞ

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

    トピック投稿者 kleza

    (@kleza)

    gatespaceさん

    いつもお世話になっております。
    ACFにちゃんとサンプルありましたね。
    すいません、まず自分でちゃんと見ないとですね。

    ありがとうございます。
    やってみます。

    実装出来ましたらこちらに報告した上で
    解決済みにさせていただきます。

    トピック投稿者 kleza

    (@kleza)

    Tsuyoshi. さん、何度もお世話になりました。
    本当にありがとうございます。

15件の返信を表示中 - 16 - 30件目 (全39件中)