• ベストアンサー
  • すぐに回答を!

WordpressでテンプレにIDを表示できない…

現在、初めてWordpressのテンプレートを作っています。 そこで、カスタマイズ方法についてお伺いさせてください。 行いたいこととしては、特定のIDの場合、特定の文言を表示というシンプルなカスタマイズです。 対象としているページは単一記事の投稿(single.php)です。 今回仮にカテゴリIDが10を対象としてみます。 その場合、以下のように記述しています。 <?php if(is_category('10')): ?> <p>カテゴリのIDが10のメッセージ!</p> <?php else: ?> <p>それ以外のメッセージ!</p> <?php endif; ?> と記述しています。 ちなみに、デフォルトのテンプレートを使うと上手く表示できるのですが、今回自分で作っているテンプレートなので、それが問題だと思います。 カテゴリID番号をテンプレート側で出力していない為、上手く動作しないのかな?と思いsingle.phpには こんな感じで記述してみました。 <?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?> <?php $post_cat=get_the_category(); $cat_id=$post_cat[0]->cat_ID; ?> <?php $post_cat=get_the_category(); $cat=$post_cat[0]; ?> <div class="entry" id="category-<?php echo $cat->cat_ID ?>"> ↑これでページ上には一応、 <div class="entry" id="category-10">とカテゴリIDが10として表示されています。 しかしながら、前述した<p>カテゴリのIDが10のメッセージ!</p>というメッセージが表示されません…。 カテゴリIDが一致しているのに、何故分岐の処理が行われないのでしょうか?何か根本的に間違っていますでしょうか。 WPのテンプレートカスタマイズにお詳しい方いらっしゃいましたら、アドバイスをいただけませんでしょうか。よろしくお願いします。 再度お伝えいたしますが、デフォルトのテンプレートに <?php if(is_category('10')): ?> <p>カテゴリのIDが10のメッセージ!</p> <?php else: ?> <p>それ以外のメッセージ!</p> <?php endif; ?> こちらを入れると表示されますので、この部分は問題ないのかと思います。 宜しくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数86
  • ありがとう数7

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

  • ベストアンサー
  • 回答No.2

すいません やっぱり根本的にis_category()の使い方を間違ってますね デフォルトのテーマだと動いたというので そういう使い方もできるのだとつられて思ってしまいましたが やはりis_category()はカテゴリーアーカイブページ判定の関数で そもそもsingle.phpで使うような関数ではありません 記事のカテゴリを判定するなら in_category()です

共感・感謝の気持ちを伝えよう!

質問者からのお礼

何度も有難う御座います。 複数IDの予定になったのでin_categoryでarray指定いたしました。 <php if (in_category(array('10')) : ?> ID10の内容 <php endif; ?> in_categoryで問題なく取得表示できました! 大変助かりました、感謝申し上げます。

関連するQ&A

  • WordPressにおいて、サブカテゴリーに画像を表示させる。

    WordPressにおいて、サブカテゴリーに画像を表示させる。 WordPress,PHP初心者です。 現在 情報サイトを作っているのですが、 あるカテゴリーのループ中に、サブカテゴリーにも属していると、画像を表示させたいです。 ショッピングサイト等で例を言うと 「シャツ」という大カテゴリーをループを使って一覧で出力し、 その中で、サブカテゴリー「売り切れ」や「NEW」にチェックを入れていると(管理画面で) それに適した画像が表示されるようにしたいのです。 ”「売り切れ」と「NEW」にどちらも属している場合もあります” なおかつ、そのサブカテゴリーにチェックが入っていると 上位に表示されると一層良いのですが。 ループの中で、更にループ処理?という考えがあまり正しくないような気がするのですが、 試している所やはりうまくいきません。 ソースは下記の通りです。 <!--大カテゴリーのループ開始--> <?php query_posts("cat=3&showposts=10"); ?> <?php if (have_posts()) : while (have_posts()) : the_post(); ?> <div class="list-box"> <a href="<?php the_permalink() ?>"> <img src="<?php echo get_post_meta($post->ID,'faceimage',TRUE); ?>" alt="<?php the_title(); ?>" width="141" height="141" /> </a> <p class="name"><?php the_title(); ?></p> <p class="size"><?php echo get_post_meta($post->ID,'textfield',TRUE); ?></p> <!--売り切れの場合、画像表示--> <?php query_posts("cat=4"); ?> <?php if (have_posts()) : while (have_posts()) : the_post(); ?> <div class="ico-on"><img src="hogehoge" alt="売り切れ" /></div> <?php endwhile; ?> <?php endif; ?> <!--新着アイテムの場合、画像表示--> <?php query_posts("cat=6"); ?> <?php if (have_posts()) : while (have_posts()) : the_post(); ?> <div class="ico-new"><img src="hogehoge2" alt="新着アイテム" /></div> <?php endwhile; ?> <?php endif; ?> </div> <!--ループ完全に終了--> <?php endwhile; ?> <?php endif; ?> 調べてみたものの、行き詰まっています。 稚拙な質問ではございますが、 どうぞご教授お願い致します。

  • 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】投稿がないカテゴリ非表示方法

    【WordPress】 投稿がないカテゴリー 非表示 方法 カテゴリーの1つを決め すべての子カテゴリーと投稿を表示させる際に、 子カテゴリー内に投稿がない場合、 子カテゴリー名を表示させないようにしたいです。 下記のソースでうまくいきませんでした。 <?php $chihirdren=get_categories( 'parent=5&hide_empty=0&orderby=slug&order=DESC'); foreach($chihirdren as $child){ ?> <?php if(have_posts()):?> <h2><?php echo $child->cat_name ?></h2> <?php else: // no post ?> <?php endif; ?> <?php $wp_query->query(array('cat'=>$child->cat_ID,'posts_per_page'=>-1)); while ($wp_query->have_posts()) : $wp_query->the_post(); ?> <h3><?php the_title(); ?></h3> <?php endwhile; } ?> 大変申し訳ございません。 ご教授をお願いいたします。。

    • ベストアンサー
    • PHP

その他の回答 (1)

  • 回答No.1

そのコードはloopの中に書かれてますか? singleページにおいてはthe_post();が実行され グローバル変数$postがセットされなければ is_category()は動作しないかと思います あるいはloop内でquery_posts();など $postを上書きしてしまう処理があったりしないでしょうか

共感・感謝の気持ちを伝えよう!

質問者からのお礼

有難う御座います。 すみません、あまり理解ができていないため、回答が変かもしれませんが…。 記述はloop内だと思っています。 以下に記載します。こんな感じになっています…。 <?php get_header(); ?> <?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?> <div class="post"> <div class="entry"> <?php the_content('Read the rest of this entry &raquo;'); ?> <?php if(is_category('10')): ?> <p>カテゴリのIDが10のメッセージ!</p> <?php else: ?> <p>それ以外のメッセージ!</p> <?php endif; ?> </div> </div> <?php endwhile; ?> <div class="navigation"> <span class="previous-entries"><?php next_posts_link('Older Entries') ?></span> <span class="next-entries"><?php previous_posts_link('Newer Entries') ?></span> </div> <?php else : ?> <h2>Not Found</h2> <p>Sorry, but you are looking for something that isn't here.</p> <?php endif; ?> <?php get_footer(); ?>

関連するQ&A

  • WordPressで複数のIDを表示

    WordPress3.4を使用しています。 カテゴリーに独自のテーマを使いたい場合、 「category-ID.php」というファイルを作成し、 テンプレートを追加すれば良いと思うのですが、 テーマ(デザイン)は共通だけどテキスト(ID)は複数ある場合、 どのように作れば良いのでしょうか? category-1.php category-2.php category-3.php ・・・ (各ファイルに記述されているコードは全て同じ) ↑のようにひたすらphpファイルを作成すれば形は出来るのですが、 その数が膨大なため、効率の良い方法を教えて頂きたく思います。

    • 締切済み
    • PHP
  • WordPress PCとスマホで表示を切り替える

    PCでは記事一覧5件、スマホでは3件表示するようにしたいです。 条件分岐タグを使って、PCとスマートフォンで記事の一覧表示を切り替える方法がうまくいきませんでした。 https://handywebdesign.net/2017/11/wp-is-mobile/ 改造前のコード(問題なく表示できました) <ul> <?php $latest_posts = get_posts( array( 'posts_per_page' => 5, // 表示する記事の数 'category_name' => '投稿ID',// 投稿IDを取得 'fields' => 'ids', ) ); foreach( $latest_posts as $post ): setup_postdata( $post ); if( has_post_thumbnail() ) { $post_thumb = get_the_post_thumbnail( '', 'post_thumbnail' ); // アイキャッチがあるときはアイキャッチを表示 } else { $post_thumb = '<img src="' . get_template_directory_uri() . '/img/noimage.gif" width="100" height="100" alt="デフォルト画像" />'; // アイキャッチがないときは《noimage.gif》を表示 } $post_categories = get_the_category(); // カテゴリーを取得 $post_content = wp_trim_words( get_the_content(), 30, '…' ); // 30字分を抜粋 ?> <li <?php post_class(); ?>> <a href="<?php the_permalink(); ?>"> <div class="blogListimg"> <?php echo wp_kses_post( $post_thumb ); ?> </div> <!-- アイキャッチここまで --> <p class="post-time blogDt"><?php the_time('Y.m.d'); ?></p> <p class="post-categories blogCt"><?php echo esc_html( $post_categories[0]->name ); ?></p> <h3 class="post-title"><?php the_title(); ?></h3> <p class="post-content blogBf"><?php echo esc_html( $post_content ); ?></p> </a> </li> <?php endforeach; wp_reset_postdata(); ?> </ul> PCとスマートフォンで記事の一覧表示を切り替えるコード 参考サイトを参考にfunctions.phpにfunction is_mobile() コードを追加。 トップページのphpに以下を改造。 <?php if ( is_mobile() ) : ?> <?php $latest_posts = get_posts( array( 'posts_per_page' => 5, // 表示する記事の数 'category_name' => '投稿ID',// 投稿IDを取得 'fields' => 'ids', ) ); foreach( $latest_posts as $post ): setup_postdata( $post );  ・  ・  ・ <?php else: ?> <?php $latest_posts = get_posts( array( 'posts_per_page' => 3, // 表示する記事の数 'category_name' => '投稿ID',// 投稿IDを取得 'fields' => 'ids', ) ); foreach( $latest_posts as $post ): setup_postdata( $post );  ・  ・  ・ <?php endforeach; wp_reset_postdata(); ?> </ul> 結果は真っ白になってしまいました。 HTMLソースも真っ白です。 空白はSublime Textのテキストエディターを使っていますので、確認しております。 どこが違うか、教えてくださいますか? よろしくおねがいします。

    • ベストアンサー
    • PHP
  • ワードプレス 最新記事1件だけ大きく表示

    トップページに記事一覧をリストしたものを表示させます。 最新記事1件だけ大きく表示し、以降は普通にしたいです。 検索しましたところ、参考サイトを見つけました。 https://naifix.com/latest-article-new/ これらのプログラム記述が現在使用しているTeemaのプログラムが違っています。 以下が現在使用しているTeemaのプログラム(index.php) get_template_part( 'template-parts/content' 記事一覧リストは「template-parts」フォルダ内にある「content.php」 を使用するといったものです。 最新記事の1件だけ「content2.php」を使用し、以降は「content.php」 を使用するといった記述が分からないのです。 アドバイスをお願いします。 <?php if ( have_posts() ) : if ( is_home() && ! is_front_page() ) : ?> <header> <h1><?php single_post_title(); ?></h1> </header> <?php endif; while ( have_posts() ) : the_post(); get_template_part( 'template-parts/content', get_post_format() ); endif; ?>

    • 締切済み
    • PHP
  • wordpressがログアウト状態だと制作したwebページが表示されません

    フルflashサイトのCMSとしてwordpressを利用しようか考えておりまして、 wordpressからxml(テンプレートを使用)を出力し、ソースをFlash(Xpath使用)で読み込み、表示させるwebページを作っています。 しかし、wordpressにログアウト状態だと真っ白で何も表示されません。 どうしたらログアウト状態でもxmlの読み込みをさせることができるでしょうか。 教えてください。よろしくお願い致します。 テンプレートソース <?php /* Template Name: sampleFlashXML */ ?> <?php header('Content-Type: text/xml; charset='.get_option('blog_charset'), true); ?> <?php echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>'; ?> <gallary> <?php if ( have_posts() ) : query_posts('cat=blogdata'); ?> <?php while (have_posts()) : the_post(); ?> <?php the_content(); ?> <?php endwhile;?> <?php endif; ?> </gallary

    • 締切済み
    • CSS
  • wordpressのリンクでの質問です。

    リンクの仕方で質問です。 現在参考書を読みながらwordpressの勉強をしています。 index.phpに <?php query_posts('category_name=test' ); ?> <?php if (have_posts()): ?> <ul class="item-lists"> <?php while(have_posts()): the_post(); ?> <li> <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail(); ?></a> </li> <?php endwhile; ?> </ul> <?php endif; wp_reset_query(); ?> というループ文があります。 投稿記事から設定したアイキャッチのみを表示させ横一列にフロートしています。 現在リンク先が共有テンプレートになっており記事一つ一つ、個別に表示されるようになってます。 <?php the_permalink(); ?>を<?php bloginfo('url'); ?>/test/ に変更すれば意図したカテゴリーへリンク出来ますが、この方法で正しいのでしょうか? また、本来リンクしたいカテゴリーは記事ごとにアンカーを設定しています。(t01&#65374;t10) このループ文の中でアイキャッチに対応した記事のアンカーへリンクするにはどうすれば良いでしょうか? アドバイス等頂ければ本当に助かります。

    • ベストアンサー
    • CSS
  • 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が表示されない原因は?

    非常に困っております。 html文書にwordpressを組み込もうと思っています。 その前提として、httpd.confには AddType application/x-httpd-php .php .html が記述されてあります。 以下が問題のソースです。 <?php require('絶対パス(省略)/wp-blog-header.php'); ?> <?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?> <?php query_posts('showposts=1');?> <?php if(have_posts()):while(have_posts()):the_post(); ?> &#65374;&#65374;&#65374;内容(省略)&#65374;&#65374;&#65374;&#65374; <?php endwhile;endif; ?> <?php wp_reset_query()?> これをアップすると、ページは表示されますが、記事部分が表示されません。 ソースを見ると、 <?php require('絶対パス(省略)/wp-blog-header.php'); ?> <?xml version="1.0" encoding="UTF-8"?> ←★変わった部分 <?php query_posts('showposts=1');?> <?php if(have_posts()):while(have_posts()):the_post(); ?> &#65374;&#65374;&#65374;内容(省略)&#65374;&#65374;&#65374;&#65374; <?php endwhile;endif; ?> <?php wp_reset_query()?> となっています。 wp-blog-header.phpへの絶対パスに間違いは無く、 また、 <?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?> が <?xml version="1.0" encoding="UTF-8"?>となっていることから、 php命令文は解釈されている(動いている)と思われます。 ということは、wordpressを組み込むソースが悪いと思うのですが、 何が悪いのか全く分かりません。 絶対パスが間違っていれば、エラー表示になる(ページが表示されるはずない)と思うのですが、 サーバーによっては絶対パスが間違っていても、エラーが表示されなかったりするのでしょうか? ちなみに、wp-blog-header.phpは別ドメインで動かすので“絶対パス”指定は必然設定です。 wordpress熟練者の皆様、どうか力を貸してください。 よろしくお願いします。

  • 「WordPress3サイト構築スタイルブック」

    chapter2の「business」を参考にサイトを作成しました。トップページの1箇所だけうまくいきません。http://wordpresstest.girako.com/ 検索したら、同じテキストを参考にして作成したサイトがあってそちらは正しく表示されていました。http://www.sys-f.com/wordpress2/ これは、トップページの下の文章の部分は、messageという固定ページで、表示してあります。 <div id="content"> <?php if(is_home()): ?> <?php query_posts('pagename=message'); ?> <?php if(have_posts()): while(have_posts()): the_post(); ?> <?php the_content(); ?> <?php endwhile; endif; ?> <?php else: ?> <?php if(have_posts()): while(have_posts()): the_post(); ?> <h2><?php the_title(); ?></h2> <?php the_content(); ?> <?php endwhile; endif; ?> <?php endif; ?> 以上はわたしのサイトの方のindex.phpの一部です。firebugでhtmlを見るようには参考にできないので、何が間違っているのか困っています。参考のファイルがテキストにはついていて、そのファイルと全く同じソースなのに、同じことが実現できないのです。一番早いのは、このテキストを持っている人だと話がわかりやすいのだと思いますが、どこからどこまで説明すればよいのかわからないので、不足部分があればご指摘ください。 これをきっかけにWPを克服しようとしているのに早速テキスト通りに行かず、困っているので教えてください。

    • 締切済み
    • PHP
  • wordpressの親ブログのみのカテゴリ別新着

    wordpressの親ブログのみのカテゴリ別新着記事タイトル(リンクつき)の取得をしたいです。 現在以下のように記述すると、子ブログの新着記事リストを取ってきます。 これを親ブログのみの新着にしたいのですが、やり方がわからず困っています。T_T <ul class="newlist"> <?php $myposts = get_posts('numberposts=5&category=3'); foreach($myposts as $post) : ?> <li><a href="<?php the_permalink(); ?>" id="post-<?php the_ID(); ?>"><?php the_title(); ?></a></li> <?php endforeach; ?> </ul> phpまったくの初心者です…。 どなたかご教授くださいませんでしょうか。。

    • 締切済み
    • PHP
  • WordPressの任意のカテゴリを記事をトップページへ表示させる方法+α

    ちょっと壁にぶつかりまして、質問させて頂きます。 「おすすめ」というカテゴリを作成し、それに属する記事たちを トップページに表示させる、という話なのですが、 <h3 id="h-recommend">おすすめの記事</h3> <?php $posts = get_posts('category_name=recommend'); foreach($posts as $post) : setup_postdata($post); ?> <h4><?php the_title(); ?></h4> <p>記事本文</p> <?php endforeach; ?> と記述しました。試しに、記事を三つばかり 「おすすめ」カテゴリに設定して投稿したら、 <h3>おすすめの記事一覧</h3> <h4>記事その(1)</h4> <p>記事その(1)の本文</p> <h4>記事その(2)</h4> <p>記事その(2)の本文</p> <h4>記事その(3)</h4> <p>記事その(3)の本文</p> という風になり、とりあえずの成功はしました。 この場合、<h4>たちに関しては、記事が0の時は当然何も表示されない のですが、 <h3>だけ表示されている状態が不自然です。 今回、記事を投稿して初めて<h3>も含む記事全てが表示さる ようにしたいと思っています。 但し、この時<h3>は繰り返しをしません。 「おすすめ」カテゴリに記事を投稿して初めて全てが発動する、 と言った感じにしたいです。 どのような記述方法を取ればよろしいでしょうか? どなたかご教授頂ければ、非常に助かります。よろしくお願い致します。