サポート » 使い方全般 » カスタムフィールドの利用について

  • 解決済 fuku

    (@hanatomikan)


    ブログを運営しているのですが、出かけた店とその場所を記録するために各記事に下記のようなカスタムフィールドを付けています。

    • キー:場所 値:表参道
    • キー:店名 値:カフェ○○○

    せっかくカスタムフィールドを使っているのでこれを利用して

    1. 異なる記事間の同じ「キー:場所の値」を含んだ記事だけを抽出
    2. 抽出した記事の「キー:店名の値」を記事へのリンクを付けてリスト表示
    3. この店名リストを同じ「キー:場所の値」が含まれた記事に表示

    ということをしたいのですが、どのようにすれば実現できるでしょうか?

    こちらのトピックを参考にしたのですが、思ったような表示になりません。
    http://ja.forums.wordpress.org/topic/1242?replies=10

    どなたかご教授いただければと思います。
    よろしくお願いいたします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • モデレーター jim912

    (@jim912)

    hanatomikanさん、こんにちは。

    下記のような感じでいかがでしょう。
    テーマのfunctions.phpに追加

    function get_nearly_shops( $place, $current_id ) {
    	if ( ! $place ) { return array(); }
    	$current_id = (int)$current_id;
    	$nearly_shops = get_posts( 'numberposts=-1&exclude=' . $current_id . 'meta_key=場所&meta_value=' . $place );
    
    	if ( $nearly_shops )  {
    		foreach ( $nearly_shops as $key => $shop ) {
    			if ( $shop_name = get_post_meta( $shop->ID, '店名', true ) ) {
    				$nearly_shops[$key]->shop_name = $shop_name;
    			} else {
    				unset( $nearly_shops[$key] );
    			}
    		}
    	}
    	return $nearly_shops;
    }
    
    function wp_nearly_shops( $place, $current_id ) {
    	$nearly_shops = get_nearly_shops( $place, $current_id );
    	if ( $nearly_shops ) {
    		echo '<ul>' . "\n";
    		foreach ( $nearly_shops as $key => $shop ) {
    			echo '	<li class="nearly_shop"><a href="' . get_permalink( $shop->ID ) .'">' . wp_specialchars( $shop->shop_name ) . '</a></li>' . "\n";
    		}
    		echo '</ul>' . "\n";
    	}
    }

    ※ 半角&が&amp;にエスケープ表示されてしまい、修正できません。記述する際に直してください。

    投稿テンプレートに記述

    <?php $place = get_post_meta( $post->ID, '場所', true );
    	if ( $place ) {
    		wp_nearly_shops( $place, $post->ID );
    	}
    ?>

    トピック投稿者 fuku

    (@hanatomikan)

    jim912様

    ご教授ありがとうございます。
    早速functions.phpとテンプレートに設置したところ思い通りの表示になりました。
    本当にありがとうございました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「カスタムフィールドの利用について」には新たに返信することはできません。