カスタムフィールドテンプレートを使って表示のON・OFFを行う際、
デフォルト設定では表示をONにして、チェックボックスにチェックをつけたら「表示しない」にする場合の書き方をメモです。
こちらのサイトを参考にさせて頂いて大変助かりました。
ページナビゲーションの表示をON/OFFしたかったので、テンプレートの出力部分をこう書き換えました。
変更前
while ( have_posts() ) : the_post();
get_template_part( 'template-parts/content', get_post_format() );
the_post_navigation();
endwhile;
変更後
while ( have_posts() ) : the_post();
get_template_part( 'template-parts/content', get_post_format() );
$ctm = get_post_meta($post->ID, 'navi', true);
if(empty($ctm)):
the_post_navigation(array( 'prev_text' => '<< %title', 'next_text' => '%title >>' ) );
endif;
カスタムフィールドテンプレートはこう
コピペ用↓
[navi] type = checkbox value = 表示しない default = 表示しない
さらに
もう少し細かい事をしました。
記事編集中なので書けたら公開します。
さらにさらに
これを応用して記事リストも設置しました。
今日はこんなのが作りたかった。
- カスタム投稿タイプ「お知らせ(info)」に設置したカスタム分類(tax_info)に「ABC(abc)」を登録
- カスタムフィールドテンプレートで[コメント]枠を登録し、[コメント]に記入があれば記事一覧に表示。記事へのリンクは手動でコメント欄から貼る。
- コメントがなければタイトルに自動でリンクを付ける。
書いた内容
カスタムフィールドテンプレート
[コメント] type = textarea rows = 4 cols = 40 tinyMCE = true htmlEditor = true mediaButton = true
functions.php
function getInfo($atts, $content = null) {
global $post;
$oldpost = $post;
$myposts = query_posts(
array(
'posts_per_page' => '-1',
'post_type' => 'announce' ,
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'tax_info',
'terms' => 'abc',
'field' => 'slug',
'operator' => 'IN',
)
),
'paged' => $paged
)
);
if(have_posts()):
while ( have_posts() ) : the_post();
foreach($myposts as $post) :
setup_postdata($post);
$retHtml.='<h5><span class="announce"><span class="announce_date">'.get_post_time('Y/m/d').'</span> ';
//コメント記入なしなら以下を表示
$ctm = get_post_meta($post->ID, 'コメント', true);
if(empty($ctm)):
$retHtml.='<a href="'.get_permalink().'">'.the_title("","",false).'</a>';
$days=14;$today=date('U'); $entry=get_the_time('U');$diff1=date('U',($today - $entry))/86400;
if ($days > $diff1) {
$retHtml.= "\n" . '<span class="ico_new">New</span>' . "\n";}
$retHtml.='</span></h5>';
else:
//コメント記入ありなら以下を表示
$retHtml.=''.the_title("","",false).'';
$days=14;$today=date('U'); $entry=get_the_time('U');$diff1=date('U',($today - $entry))/86400;
if ($days > $diff1) {
$retHtml.= "\n" . '<span class="ico_new">New</span>' . "\n";}
$retHtml.='</span></h5>';
$retHtml.='<br><p>'.post_custom('コメント').'</p>';
endif;
endforeach;
wp_reset_query();
$post = $oldpost;
return $retHtml;
endwhile;
endif;
}
※記事リストを呼び出したいページの編集画面にショートコードの[InfoList]記入
結果表示例
コメントに記入がある時
2016/11/04 タイトル New!
コメントコメントコメント。くわしくは「タイトル」をご覧ください。
コメントに記入がない時
2016/11/04 タイトル New!
・・・もっとスマートな記入の仕方があるんだろうなぁ。
という不安を抱えつつさらに
カスタムフィールドテンプレートで複数条件での表示切替え。
テンプレート
$ctm = get_post_meta($post->ID, 'navi', true);
if(empty($ctm)):
the_post_navigation(array( 'prev_text' => '<< %title', 'next_text' => '>> %title' ) );
elseif(get_post_meta($post->ID,'navi',true) == '前ページのみ表示'):
previous_post_link();
else:
endif;
カスタムフィールドテンプレートの設定
[navi] type = checkbox value = 表示しない # 前ページのみ表示 default = 表示しない
これで、記事の作成画面にはこんな選択肢が出て
—————-
□表示しない
□前ページのみ表示
—————-
【何もチェックを付けなければページナビの「前へ/次へ」が普通に表示されて、
表示しないにチェックを付ければ出ない。
前ページのみ表示にチェックを付ければ「前へ」だけ出る】というのが出来ます。
previous_post_link();を使うとリンクに「<<」を含めてくれないので、後で少し直しました。
<?php $ctm = get_post_meta($post->ID, 'navi', true);
if(empty($ctm)):
the_post_navigation(array( 'prev_text' => '<< %title', 'next_text' => '>> %title' ) );
elseif(get_post_meta($post->ID,'navi',true) == '前ページのみ表示'):
if (get_previous_post(TRUE)){ ?>
<div class="nav-links"><div class="nav-previous"><?php previous_post_link('%link', '<< %title'); ?></div></div>
<?php } ?>
<?php else:
endif;?>
これで、前のページの表示については<a href=””><< ページタイトル</a>という形に出来たし、前のページが無い場合は<div>ごとごっそり表示しないというのが出来ました。すっきりした!
コメントを残す