サポート » 使い方全般 » 入力がない場合というif文

  • 初歩的な質問で恐縮です。

    <?php
    if (is_single() or is_page()): ?>
    <?php $key="case"; echo get_post_meta($post->ID, $key, true); ?>
    <?php endif; ?>

    投稿とページに適用させたいif文なのですが、$key=”case”の値がない場合にタイトルを表示という具合にしく、elseで指定しようと思うのですが、下記のようにすると投稿とページじゃない場合という意味になってしまいます。

    $key=”case”に値がない場合というように指定するにはどうすればよいでしょうか?

    <?php
    if (is_single() or is_page()): ?>
    <?php $key="h1"; echo get_post_meta($post->ID, $key, true); ?>
    <?php else : ?>
    <?php the_title(); ?>
    <?php endif; ?>
9件の返信を表示中 - 1 - 9件目 (全9件中)
  • 難しく考え過ぎてるだけのきがします。

    if (シングルページ か 固定ページ)
     if (カスタムフィールドに値があるか)
      ある場合の表示
     else違う場合
      ない場合の表示
    endif
    endif

    という感じに最初の条件の中にもう一つif文をいれちゃえば大丈夫です。

    if (カスタムフィールドに値があるか)の部分は
    if (get_post_meta($post->ID, $key, true))
    若しくは、大丈夫だとは思いますが
    if (! empty(get_post_meta($post->ID, $key, true)))
    で判定します。

    トピック投稿者 rqcmt

    (@rqcmt)

    jdbbさまありがとうございます。

    <?php if (is_single() or is_page()): ?>
    <?php if (get_post_meta($post->ID, $key, true)); ?>
    <?php $key="case"; echo get_post_meta($post->ID, $key, true); ?>
    <?php else : ?>
    <?php the_title(); ?>
    <?php endif; ?>
    <?php else : ?>

    問題なく、値がある場合には$key=”case”をない場合はtitleを表示できました。

    しかし、投稿とページと指定してあるはずが、なぜかカテゴリーページで内包する一番新しい記事の$key=”case”、もしくはタイトルが表示されてしまいます。(カテゴリーページは記事の全文を読みこんでいます)

    そこでもう一つカテゴリーページの場合はという条件を足してみようと思い下記のようにしてみたところ、エラーになってしまいました。

    <?php if (is_single() or is_page()): ?>//投稿かページか?
    <?php if (get_post_meta($post->ID, $key, true)); ?>//その場合に$keyの値があるか?
    <?php $key="case"; echo get_post_meta($post->ID, $key, true); ?>//ある場合は$key="case"を出力
    <?php else : ?>//ない場合は
    <?php the_title(); ?>//タイトルを出力
    <?php endif; ?>
    <?php else : ?>//投稿かページでない場合
    <?php if (is_category()): ?>//カテゴリーページかどうか?
    <?php echo category_description(); ?>//カテゴリーページの場合はcategory_descriptionを出力
    <?php endif; ?>

    つまらないことかもしれませんが、アドバイスいただけましたら幸いです。

    コードを書くときはインデントさせてやればよくわかります。
    (ブラウザでソースを表示すると汚くなる時もありますが・・・)
    今回提示されたコードを簡単にまとめると

    if 個別記事かページか?
     if カスタムフィールドがあるかどうか
      カスタムフィールド表示
     else カスタムフィールドがない場合
      タイトル表示
     endif
    else 個別記事でもページでもない
     if カテゴリページかどうか?
      category_desc表示
     endif

    となっています。
    ちゃんと矛盾なくできていれば
    インデントがない状態でendifになるはずですがなっていないために
    エラーが起きています。

    トピック投稿者 rqcmt

    (@rqcmt)

    <?php if (is_single() or is_page()): ?>
     <?php if (get_post_meta($post->ID, $key, true)); ?>
      <?php $key="case"; echo get_post_meta($post->ID, $key, true); ?>
     <?php else : ?>
      <?php the_title(); ?>
     <?php endif; ?>
    <?php else : ?>
     <?php if (is_category()): ?>
      <?php echo category_description(); ?>
    <?php endif; ?>

    呑み込みが悪くて大変申し訳ありません。アドバイスのとおり、インデントさせて書いてみたのですが、syntax error, unexpected T_ELSEとなってしまいました。

    ELSEが予期しないところにある?ということらしいので、if (is_category())の上のendifかと思ったのですが、ここは(個別記事とページ)または(カテゴリページか)かという条件分岐なので必要ではないのでしょうか?削除してみるとエラーはでませんが、やはり条件分岐されていないようでカテゴリページでは両方が出力されてしまいます。

    言われていることが理解できていないようで申し訳ありませんが、よろしくお願いします。

    結論から言いますと
    if{ ~~~ }
    という書き方ではない場合
    if の数だけ endif が存在することになります。
    提示されたものを見ますと if が3つあるのに対し endif は2つしか無いために
    そのようなエラーが出ているのだと思います。

    カテゴリーページで両方が出力されるという部分はまた別のお話です。
    このあとに書かれているなにかで表示されているとかかもしれません。
    まず上記エラーを直して、ちゃんとcategory_descriptionが表示されるかどうかを確認してみて下さい。

    トピック投稿者 rqcmt

    (@rqcmt)

    お手間を取らせて申し訳ありません。

    そもそも最初の回答をいただいた段階で下のように考えました。

    <?php if (is_single() or is_page()): ?>//if-1
     <?php if (get_post_meta($post->ID, $key, true)); ?>//if-2
      <?php $key="case"; echo get_post_meta($post->ID, $key, true); ?>
     <?php else : ?>
      <?php the_title(); ?>
     <?php endif; ?>//if-2のendif
    <?php endif; ?>//if-1のendif

    しかし、これではsyntax error, unexpected T_ENDIFとなるため、最後のendifを削除してこれをベースにしました。そもそもこの時点でおかしいのでしょうか?

    また、下記を単独で書いてもerror, unexpected T_ELSEになってしまいます。

    <?php if (get_post_meta($post->ID, $key, true)); ?>//$keyに入力があるか?
     <?php $key="case"; echo get_post_meta($post->ID, $key, true); ?>//あれば $key="case"を出力
    <?php else : ?>//ない場合は
     <?php the_title(); ?>//titleを出力
    <?php endif; ?>

    なんだか分からなくなってきてしまいました。

    すみません。
    //if-2が原因でしたね。
    こちらが:ではなく;となっているためその後に続くelseでエラーが出ています。

    トピック投稿者 rqcmt

    (@rqcmt)

    if (get_post_meta($post->ID, $key, true));

    というと、この行の書き方がいけないということでしょうか?

    if (! empty(get_post_meta($post->ID, $key, true)))では Can’t use functionというエラーになってしまいます。

    いろいろと調べてみてるんですが、わたしにはどう修正してよいのか分かりません。

    しつこくて申し訳ありませんが、回答いただけますと幸いです。

    トピック投稿者 rqcmt

    (@rqcmt)

    jdbbさま

    試行錯誤した結果、下記の形で希望の結果となりました。
    お手間を取らせました。
    下記で何か問題点などありましたら、ご指摘ください。
    本当にお手数をお掛けして申し訳ありませんでした。

    <?php if (is_single() or is_page()): ?>
     <?php if (get_post_meta($post->ID, "case", true)) : ?>
      <?php $key="case"; echo get_post_meta($post->ID, $key, true); ?>
     <?php else : ?>
      <?php the_title(); ?>
     <?php endif; ?>
    <?php else : ?>
    <?php if (is_category()): ?>
     <?php echo category_description(); ?>
    <?php endif; ?>
    <?php endif; ?>
9件の返信を表示中 - 1 - 9件目 (全9件中)
  • トピック「入力がない場合というif文」には新たに返信することはできません。