WordPressのページ条件分岐について

このQ&Aのポイント
  • WordPressのページ条件分岐方法を知りたいです。
  • 記事の個別ページにバナーを表示させたいですが、idの識別方法が分かりません。
  • WordPressのソースを見てもidの識別方法がわかりませんでした。
回答を見る
  • ベストアンサー

各ページの持つIDで条件分岐したい場合

WordPressのような機能を作るとして、 タイトル、記事内容を登録していき、 以下のようなデータが集まったとします。 id:1,タイトル:○○,記事内容:○○○○○。 id:2,タイトル:○○,記事内容:○○○○○。 id:3,タイトル:○○,記事内容:○○○○○。 この場合、例えばid3の個別ページのみにバナーを表示させたい場合、 id3のソースに if($id==3){バナー表示}といった命令を書けば良いと思いますが、 このページのidが3であることはどうやって識別すれば良いのでしょうか? Wordpressのソースをみたところ、 記事へのリンクに ?id=3 をつけて$_GETに値を入れているわけでもなく、理解ができませんでした。 わかる方いらっしゃればご教授ください。 よろしくお願い致します。

  • PHP
  • 回答数3
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • 4017B
  • ベストアンサー率73% (1304/1775)
回答No.3

別途、データ用のテキストが保存されているのなら、まあ話は簡単です。 $my_data_url = 'http://example.com/hoge/data.txt'; $my_data_txt = file_get_contents( $my_data_url ); ~これで変数 $my_data_txt の中にデータテキストの内容が全て、一連なりの文字列として代入されてるので。後はそれを必要に応じて加工して使います。まあ通常のテキストなら普通は1個1個のデータを改行で区切ってるだろうから… $my_array = explode( "\n", $my_data_txt ); ~こんな感じで配列 $my_array の中に改行で区切られた配列データに変換可能です。ここまで来れば後はどうとでも出来ると思いますが、まあテキストで別のデータを書き出す場合、後から再利用しやすい様な書式で最初から保存する様な仕様にして置く事が重要です。 最初の例文から察するに、data.txt の中身はカンマ区切り( ,)で保存されてるのかな?その場合は、 $my_array[0] == 'id:1, タイトル:○○, 記事内容:○○○○○。'; ~となっているので、そこからさらに多次元配列としてデータを呼び出します。これらの事を踏まえて汎用PHPコードを書くと、大体以下の様になります。 ━ ココから ━━━━━━━━━━━━━━━━━━━━━━━━ /* 初期設定 */ $my_data_url = 'http://example.com/hoge/data.txt'; $my_data_txt = file_get_contents( $my_data_url ); $my_data_txt = rtrim( $my_data_txt, "\n" ); //末尾の改行を削除 $my_array = explode( "\n", $my_data_txt ); //最初の配列化 $i = 0; foreach ( $my_array as $val ) { $my_array[$i] = explode( ',', $val ); $i++; //さらに多次元の配列化 } /* 結果を表示 */ echo "<ul>\n"; foreach ( $my_array as $val ) { echo '<li>'. $val[0] .':'. $val[1] .':'. $val[2] ."</li>\n"; } echo "</ul>\n"; ━ ココまで ━━━━━━━━━━━━━━━━━━━━━━━━ 注意点としては、データ(配列)の中に「改行のみ」が含まれる可能性があるか無いかで、ちょっと記述が変わって来ます。その辺は実際にデータを作る人じゃないと分らない部分なので自分で何とかして下さい。 後、言うまでも無いと思いますが。今更、実はテキストデータはShift-JISで~とか、PHP4でも可能な方法はありませんか?~とかは無しの方向性で(笑)!

infinity38
質問者

お礼

ご回答いただきありがとうございました。

その他の回答 (2)

  • 4017B
  • ベストアンサー率73% (1304/1775)
回答No.2

ああ~そういう事ですか…。相変わらず回答者側に高度なESP能力が要求されるサイトですね(笑)。 ん~と結論から言うと、誰も貴方の質問に答える事は出来ない。何故なら貴方のサイト構成や、そもそもどんなDBを使っているのか?それとも単なる静的なHTMLページの集まりなのか分らないから。 例文で示されたデータと言っても、それは一体全体何なのか?JSON?MySQL?それとも個別ページに割り振られたid要素とか? WPに置ける get_the_ID関数 の仕組みは、大前提としてWPのシステムに依存してるので。同じPHPだからといって簡単に移植再現出来るものでもありません。まあ出来るけど(笑)。 と言う訳で貴方のいうその「データ」とやらの形式を、第三者にも理解出来る形で腹を割って話して貰わないと先には進めません。ちなみに自分はDB管理は門外漢なんで、その場合はあまり有効な助言は出来ません。

infinity38
質問者

補足

申し訳ありません。 DBを使わずテキストデータのみです。 静的ではなく、すべてphpファイルです。 初めに書いたデータというのは、 フォームに入力された記事タイトルと本文をdata.txtに保存したものです。 このときタイトルと本文を入れ込んだ個別ページ(phpファイルを作成します) サイト構成は、 ・トップページに投稿された記事が順番に表示される。 ・その記事をクリックするとその記事の個別ページに移動する。 という感じになります。 個別ページから、data.txtのID番号をどうやって取得する方法があるかご教授いただけたらと思います。 よろしくお願い致します。

  • 4017B
  • ベストアンサー率73% (1304/1775)
回答No.1

一応、WPの基本的なPHP構造などが理解出来ているという前提で。 記事IDを取得したい部分で、WP関数の一つ get_the_ID を使います。 $my_id = get_the_ID(); ~以上の様な記述で、変数に記事IDが代入されます。 公式wikiにも割とそのものズバリな解説が載っています。同時に参照して下さい。 >http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_the_ID 注意点としてはWP関数でありがちな“ループ内で使う”という事です。

infinity38
質問者

補足

ご回答ありがとうございます。 質問の書き方が悪くて申し訳ありません。 WordPressはまったく使わずに、そのような機能を作ろうとしています。 そのget_the_ID();というid参照の仕組みを、自分でphpでどう書けば良いかわからず困っています。

関連するQ&A

  • Wordpressの条件分岐について

    Wordpressの条件分岐について質問です。 カテゴリー毎に表示される記事のデザインを変更したいのですが、 複数のカテゴリーに登録した際に思い通りに表示できません。 「cate01(ID:1)」と「cate02(ID:2)」の2つのカテゴリーがあり、 表示する記事ページ(single.php)のデザインを分けています。 「cate01(ID:1)」は「single01」、「cate02(ID:2)」は「single02」という具合です。 そこで、「cate01(ID:1)」と「cate02(ID:2)」の両方に該当する記事の場合、 「cate02(ID:2)」からリンクされた記事を表示すると「cate01(ID:1)」のテンプレートが割り当てられてしまいます。 現状「single.php」で以下のように条件分岐させているのですが、 先に「cate01(ID:1)」の記述があるので、優先されるのではないかと思います。 <?php if ( in_category('1') ) { include(TEMPLATEPATH . '/single01.php'); } else if ( in_category('2') ) { include(TEMPLATEPATH . '/single02.php'); } else { include(TEMPLATEPATH . '/index.php'); } ?> 「cate02(ID:2)」から「single02」を表示するにはどうすればよいでしょうか? 当方PHP初心者ですので、あまり詳しいことはわかりません。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • WordPressでPHPで条件分岐

    WordPressを運用していて、記事内でPHP if文を使って条件分岐をしたいです。 WordPressにて提供されている記事の投稿日を参照して、記事投稿○日以前、以降で表示を切り替えたいです。 あまり詳しくないのですが、取り敢えず下記のようにしてみましたが、動きません。。 if( the_time('Ymd') <= date('Ymd', strtotime("-3 days")) ){    print "前の表示"; }else{    print "先の表示"; } PHP内にWordPressの関数が使えないのかな。とも思っていますが、PHP初心者の為調べ方も解らない状況です。 どなたかお分かりになる方、宜しくお願い致します。

  • WordPress 条件分岐間違っている箇所は?

    WordPressで最新記事を判別して大きく見せるなど、表示を変更する条件分岐のカスタマイズ方法を下記のURLを参考に改造しました。 https://whitebear-seo.com/wordpress-newpost-conditional-branch/ 結果はエラーが出ました。 どこが間違っているか教えていただけないでしょうか? 宜しくお願いします。 <?php if ( have_posts() ) : if ( is_home() && ! is_front_page() ) : ?> <?php endif; /* 改造前 */ while ( have_posts() ) : the_post(); /* 改造前 */ get_template_part( 'template-parts/content', get_post_format() ); /* ページネーション */ endwhile; echo '<div class="text-center paging-navs">'; the_posts_pagination(); echo '</div>'; else : get_template_part( 'template-parts/content', 'none' ); /* ページネーション END */ endif; ?> /* 改造後 */の部分だけ改造しました。 ↓ <?php if ( have_posts() ) : if ( is_home() && ! is_front_page() ) : ?> <?php endif; /* 改造後 */ while ( have_posts() ) : the_post(); $counter++; if ($counter <= 1): ? get_template_part( 'template-parts/content2', get_post_format() ); else: /* 改造後 */ get_template_part( 'template-parts/content', get_post_format() ); /* ページネーション */ endwhile; echo '<div class="text-center paging-navs">'; the_posts_pagination(); echo '</div>'; else : get_template_part( 'template-parts/content', 'none' ); /* ページネーション END */ endif; ?>

    • 締切済み
    • PHP
  • PHPの条件分岐について

    URLに含まれる文字列で分岐したいです。 WordPressですと、 <?php if( is_single( 'sample' , 'test' , 'yamada' , 'tanaka' , ・・・ ) ) : ?> とスラッグやIDなどでできたのですが、WordPressではない場合はどうしたら良いのでしょうか? 上記のように複数ある場合の書き方がよく分かりません。 詳しい方教えてください、おねがいいたします。

    • ベストアンサー
    • PHP
  • WordPressでID番号以外でのページの識別法

    WordPressを大学サークルのサイトのCMSとして使おうとしていているのですが、投稿ではない独立した「ページ」の識別をID番号以外で行うことは可能でしょうか。 投稿よりもページを主に使うので、出来る限りCSSで識別するHTMLタグの属性部分(id、class)を一定の形にテンプレート化したいのですが、ページを作成した時点ではそのページのIDは分からず、これまではthe_ID()で一度IDを表示させてからそのIDの数字を用いてCSSを設定していました。これでも不都合はないのですが、より理想的にはそのページの識別を任意の文字列で出来ればと思っています。具体的にはページ作成時に編集したパーマリンクの末尾の部分を用いれれば最適だと考えています。 そのようなタグや方法などがありましたら、教えてください。

    • 締切済み
    • PHP
  • 子カテゴリーの条件分岐

    いつもお世話になっております。 WordPressのカテゴリーについてご質問させてください。 カスタム投稿に、該当するカテゴリーを表示する予定です。 しかし、子カテゴリーの選択があれば子カテゴリーのみに。 子カテゴリーの選択がなければ該当する親カテゴリーを表示する分岐の方法が分からず困っています。 現在、子カテゴリーのみ表示になっていますが、ここからどのように分岐すればよいのでしょうか。 ご教授いただけると幸いです。 何卒、宜しくお願いいたします。 <ul> <?php $terms = get_the_terms( $post ->ID, '〇〇-cat' ); foreach( $terms as $term ) { if($term->parent){ echo '<li>'.$term->name.'</li>'; } } ?> </ul>

    • ベストアンサー
    • PHP
  • WordPressのカテゴリートップページについて

    WordPress2.9.2を使用しています。 各カテゴリーのトップページには、属するアーカイブのタイトル、日付、そして記事全文が表示されてしまいますが、タイトルのみ表示させるにはどうしたらよいのでしょうか。

  • [wordpress] 固定ページで、カテゴリ名の

    [wordpress] 固定ページで、記事の一覧を表示し、その記事の属するカテゴリ名の表示 wordpressで、商品一覧ページを作成していて、一覧を表示するページは固定ページにしています。 その商品一覧の中で、記事(商品)の属するカテゴリ名を表示させたいのですが どうすればいいでしょうか? 商品が服なので、その商品が属するカテゴリを項目の一つとして出力したいのです。 つまり『抽出した商品毎(have_post()の出力結果)にカテゴリ名を抽出』という感じです。 具体的なソースも教えて頂けると助かります。 <?php the_category(); ?> はダメでした。 [参考ソース] <div id="collectionWrap" class="clearfix"> <?php $loop = new WP_Query( array( 'post_type' => 'collection', 'posts_per_page' => 8 ) ); while ( $loop->have_posts() ) : $loop->the_post(); ?> <div class="collection"> <div class="image"> <a href="<?php the_permalink() ?>"><?php echo wp_get_attachment_image(get_post_meta($post->ID,"画像",true),'medium' ); ?></a> </div> <div class="txt"> <div class="clearfix mb10"> <p class="upDate"><?php echo get_post_meta($post->ID,"性別",true); ?></p> <p class="seasons"> <span> /*ここにカテゴリの種類を出力 */ </span></p> </div> <p class="itemName"><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></p> <p class="itemPrice">&yen;&nbsp;<?php echo get_post_meta($post->ID,"価格",true); ?></p> </div> </div> <?php endwhile; ?> <?php wp_reset_query(); ?> </div> どうかよろしく御願いします。足りない情報等あればおっしゃってください。 自分でもいろいろ調べてるのですが、わかりません。。急いでます。

    • ベストアンサー
    • PHP
  • WordPressのTOPページを固定ページで

    WordPressのTOPページを固定ページで製作しています。 使っているのはWordPress 3.2.1です。 http://sygnas.jp/2010/10/19/frontfix/ こちらのサイトを参考にして 「front_fix.php」を作り <?php /* Template Name: FrontFix */ ?> <?php get_header(); ?> <?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?> <?php endwhile; ?> <?php endif; ?> <?php $my_query = new WP_Query('&cat=0'); ?> <?php if ($my_query->have_posts()) : ?> <?php while ($my_query->have_posts()) : $my_query->the_post(); ?> <?php endwhile; ?> <?php endif; ?> <?php get_footer(); ?> と書き込みました。 それから、TOPページ用の固定ページのテンプレートを変更して [設定]>[表示設定]>[フロントページの表示]で「固定ページ」を選び、今回作ったページを選択して保存しました。 今回のサイトはTOPページのみサイドバーはいらないので <?php get_sidebar(); ?> は入れていません。 TOPページを表示させた時、ヘッダーとフッターは表示されるのですが 固定ページの中身も新着記事も表示されていない状態です。 やり方等間違っているのでしょうか? また、その他に良いやり方がありましたら教えていただけませんでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • Wordpressの条件分岐タグの件で

    現在、Wordpressでサイトを構築中の者です。 条件分岐のタグの件で、 if文で使用したいのですが、 wp-login.php のページはどのタグを使用すればいいのでしょうか?? is_admin() ではないようで、 「注': wp-login.php ページは管理パネル内のページではない。このページが表示されているかを確認するには、管理グローバル変数 の $pagenow を使う。」とWordpressの解説サイトには載ってあるのですが。 よろしくお願いします。

専門家に質問してみよう