質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.34%

  • PHP

    21291questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • WordPress

    7650questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

タクソノミーの一覧ページ内でのターム別一覧表示について教えてください。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 754

mikkun

score 1

Wordpressにてページ周りのソースをスマートにしたいのですが、わからないので教えてください。

CPT UIを利用して投稿タイプ「member」とタクソノミー「member_area」を作成しました。
「member_area」内には、北海道(area01)、青森県(area02)、岩手県(area03)・・・など都道府県が登録されています。
そして、各都道府県ページが表示された際には、更に「小売店」「飲食店」「企業」と分けて一覧表示をしたいと考えており、
「小売店」「飲食店」「企業」はadvanced custom fieldsを使い、カスタムフィールドで店舗カテゴリ「member_category」とし、「小売店」はmembercat01、「飲食店」はmembercat02、などとチェックリスト形式にて割り振りました。

結果下記のようなソースを、taxonomy-member_area.php内に入れて表示し、member_area毎にtaxonomy-member_area01.php、taxonomy-member_area02.phpとファイルを47都道府県分作成すれば問題はないのですが、このtaxonomy-member_area01~を作成せずに、taxonomy-member_area.php内でスマートに対処できないか教えてください。

◆taxonomy-member_area.php内には下記のソースを入れてみました。

<section class="archive-member-area">
<dl id="MenberList">
<dt>北海道内の小売店</dt>
<dd>
<?php
$args = array(
  'tax_query' => array(
    array(
      'taxonomy' => 'member_area',
      'field' => 'slug',
      'terms' => array( 'area01' )
    )
  ),
  'order' => 'ASC',
  'post_type' => 'member',
  'posts_per_page' => -1,
            'meta_query' => array(array(
                                'key' => 'member_category',
                                'value' => 'membercat01',
                                'compare' => 'LIKE'
                            ))
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
?>
<table>
<tbody>
<tr>
<th>会社名</th>
<td><?php echo get_post_meta($post->ID,'member_name',true); ?></td>
</tr><tr>
<th>所在地</th>
<td colspan="3"><?php echo get_post_meta($post->ID,'member_zip',true); ?><br><?php echo get_post_meta($post->ID,'member_address',true); ?></td>
</tr>
</tbody>
</table>
<?php endwhile; ?>
</dd>

<dt>北海道内の飲食店</dt>
<dd>
</dd>
<dt>北海道内の企業</dt>
<dd>
</dd>
</dl><!--  -->
</section>

ソース内の 'terms' => array( 'area01' ) の 'area01' の部分をページ毎に自動的に変わることが出来れば、恐らく47都道府県分のファイルを作らなくても良いんじゃないかと勝手に思って悪戦苦闘しながらいろいろなページを見て試しているものの、解決の糸口が見えてきません。

同様の流れや、他の方法も含めて教えて頂けないでしょうか?

どうぞ、宜しくお願いしますm( . . )m

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

get_query_var関数でmember_areaのスラッグを取得できると思います。

<?php echo get_query_var( 'member_area', '' ) ?>


参考URL

追記

$ma = get_query_var( 'member_area', '' );
$args = array(
    'tax_query' => array(array(
        'taxonomy' => 'member_area',
        'field' => 'slug',
        'terms' => $ma
    )),
    'order' => 'ASC',
    'post_type' => 'member',
    'posts_per_page' => -1,
    'meta_query' => array(array(
        'key' => 'member_category',
        'value' => 'membercat01',
        'compare' => 'LIKE'
    ))
);

追記2

このようにすれば、47都道府県分のファイルをつくる必要がなくなります。

<?php
$ma_slug = get_query_var( 'member_area', '' );
$ma_term_object = get_term_by('slug', $ma_slug, 'member_area');
$ma_name = htmlspecialchars($ma_term_object->name);

// デバッグ用出力(消してOK) ここから
?><pre><?php var_dump($ma_slug); ?></pre><?php
?><pre><?php var_dump($ma_term_object); ?></pre><?php
?><pre><?php var_dump($ma_name); ?></pre><?php
// デバッグ用出力(消してOK) ここまで
?>
<section class="archive-member-area">
<dl id="MenberList">
<dt><?php echo $ma_name; ?>内の小売店</dt>
<dd>
<?php
$args = array(
  'tax_query' => array(
    array(
      'taxonomy' => 'member_area',
      'field' => 'slug',
      'terms' => $ma_slug
    )
  ),
  'order' => 'ASC',
  'post_type' => 'member',
  'posts_per_page' => -1,
            'meta_query' => array(array(
                                'key' => 'member_category',
                                'value' => 'membercat01',
                                'compare' => 'LIKE'
                            ))
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
?>
<table>
<tbody>
<tr>
<th>会社名</th>
<td><?php echo get_post_meta($post->ID,'member_name',true); ?></td>
</tr><tr>
<th>所在地</th>
<td colspan="3"><?php echo get_post_meta($post->ID,'member_zip',true); ?><br><?php echo get_post_meta($post->ID,'member_address',true); ?></td>
</tr>
</tbody>
</table>
<?php endwhile; ?>
</dd>

<dt><?php echo $ma_name; ?>内の飲食店</dt>
<dd>
</dd>
<dt><?php echo $ma_name; ?>内の企業</dt>
<dd>
</dd>
</dl><!--  -->
</section>

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/08 14:47

    分かりづらい質問にも関わらず、アドバイスを頂きありがとうございます。
    教えていただきました通りのタグにてページ毎のタームを表示することは出来ましたが、phpの関数に埋め込み自動化する事は出来ないようですね(汗

    他に何かスマートなやり方があればご教授いただけましたら幸いです。

    キャンセル

  • 2017/01/08 17:40

    $ma = get_query_var( 'member_area', '' );
    として、$maをコードに埋め込めばいいと思うのですが、それではダメですか?

    キャンセル

  • 2017/01/08 18:06 編集

    申し訳ありませんm( . . )m
    関数に関してよく理解していないのですが、こんな感じでしょうか?

    <?php
    $ma = get_query_var( 'member_area', '' );
    $args = array(
    'tax_query' => array(
    array(
    'taxonomy' => 'member_area',
    'field' => 'slug',
    'terms' => '$ma'
    )
    ),
    'order' => 'ASC',
    'post_type' => 'member',
    'posts_per_page' => -1,
    'meta_query' => array(array(
    'key' => 'member_category',
    'value' => 'membercat01',
    'compare' => 'LIKE'
    ))
    );
    $loop = new WP_Query( $args );
    while ( $loop->have_posts() ) : $loop->the_post();
    ?>

    <?php endwhile; ?>

    結果、内容を拾えず表示されませんでした。
    面倒なご質問で申し訳ありません。。。m( . . )m

    キャンセル

  • 2017/01/08 18:43 編集

    回答に追記しました。'$ma'にクオテーションは不要です。PHPの文法を確認してください。

    キャンセル

  • 2017/01/08 19:32

    クオーテーションを取り除き、無事解決できました!
    何度もお付き合いいただきありがとうございました!
    wpを弄り始めまだ日が浅いのですが、少しでも多く知識を習得して今後も頑張りたいと思います!

    分かりづらい質問の上、細かなところまでお付き合いいただきありがとうございました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • PHP

    21291questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • WordPress

    7650questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。