難しく考え過ぎてるだけのきがします。
if (シングルページ か 固定ページ)
if (カスタムフィールドに値があるか)
ある場合の表示
else違う場合
ない場合の表示
endif
endif
という感じに最初の条件の中にもう一つif文をいれちゃえば大丈夫です。
if (カスタムフィールドに値があるか)の部分は
if (get_post_meta($post->ID, $key, true))
若しくは、大丈夫だとは思いますが
if (! empty(get_post_meta($post->ID, $key, true)))
で判定します。
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になるはずですがなっていないために
エラーが起きています。
<?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が表示されるかどうかを確認してみて下さい。
お手間を取らせて申し訳ありません。
そもそも最初の回答をいただいた段階で下のように考えました。
<?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でエラーが出ています。
if (get_post_meta($post->ID, $key, true));
というと、この行の書き方がいけないということでしょうか?
if (! empty(get_post_meta($post->ID, $key, true)))では Can’t use functionというエラーになってしまいます。
いろいろと調べてみてるんですが、わたしにはどう修正してよいのか分かりません。
しつこくて申し訳ありませんが、回答いただけますと幸いです。
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; ?>