備忘録16〜固定ページに新着記事一覧を表示
固定ページで作った「フロントページ」
フロントページを固定ページで作成しました。
記事投稿を進めていく上で、更新されていることを出しておきたいが・・・
手動でやるのは、手間がかかるなあと思い、何かできないかと調べてみました。
プラグインかPHPでできるようだ・・・
プラグインの方法は、これ以上プラグインを増やすのか・・・?と疑問に思いつつ読んでみました。
結構簡単にできそうだ・・・
PHPの方はどうだろう・・・、いっぱい出てくる。
ここが分かりやすかったです。
PHPでやってみよう!!
とりあえず、コピペで試した
コピーしたコード
<?php
$information= get_posts( array(
'posts_per_page' => 10
));
if( $information):
?>
<ul>
<?php
foreach( $information as $post ):
setup_postdata( $post );
?>
<li>
<?php the_time('Y年n月j日'); ?> - <a href="<?php the_permalink(); ?>"> <?php the_title(); ?></a>
</li>
<?php
endforeach;
wp_reset_postdata();
?>
</ul>
<?php else: ?>
<p>表示できる情報はありません。</p>
<?php endif; ?>
カテゴリー関係なく、新着が10件表示される。
ショートコードで、呼び出しができるとのことだったので、検索する項目と関数化に挑戦・・・
/* 最新記事リスト */
function getNewItems($atts) {
extract(shortcode_atts(array(
"num" => '', //最新記事リストの取得数
"cat" => '', //表示する記事のカテゴリー指定
"days" => '', //何日以内の記事にadd_textをつけるか指定
"add_text" => '' //表示するテキスト
), $atts));
global $post;
$oldpost = $post;
$myposts = get_posts('numberposts='.$num.'&order=DESC&orderby=post_date&category='.$cat);
$retHtml='<div class="row p-0 col-sm-11 col-12 mx-auto float-none">';
foreach($myposts as $post) :
$cat = get_the_category();
$catname = $cat[0]->cat_name;
$catslug = $cat[0]->slug;
setup_postdata($post);
$retHtml.='<div data-aos="fade" data-aos-offset="140" data-aos-duration="3000" data-aos-delay="500" class="aos-animate text-center p-0 card col-sm-5 col-12 bg-light m-1">';
$retHtml.=get_the_post_thumbnail().'';
$retHtml.='<p class="news_date">'.get_post_time( get_option( 'date_format' )).'';
$retHtml.='<span class="badge badge-pill badge-secondary cat">'.$catname.'</span></p>';
$retHtml.='<div class="card-title news_title">'.the_title("","",false).'</div>';
$retHtml.='<a class="stretched-link" href="'.get_permalink().'">read more...<a>';
//指定日以内にadd_textをつける
$today = date_i18n('U');
$entry_day = get_the_time('U');
$past_days = date('U',($today - $entry_day)) / 86400;
if ( $days > $past_days ):
$retHtml.='<span class="add_New">'.$add_text.'</span>';
endif;
$retHtml.='</div>';
endforeach;
$retHtml.='</div>';
$post = $oldpost;
wp_reset_postdata();
return $retHtml;
}
add_shortcode("newsNew", "getNewItems"); //getNewItemsは関数名、newsNewはショートコード名
ついでに、Bootstrap4のカード形式で表示しつつ
以前の記事で書いた、スクロールしたらふわっと出るように、属性を追加してみました。
ショートコードにしたので、このように書くと、カテゴリーIDが8の記事を5個表示となります。
こちらにすると、追加で投稿日が3日以内だと、追加のテキスト「おすすめ」がでる仕様になります。
ここに出るようにしてみました。タブ切り替えでタブ内に書くショートコードの指定を変えています。
見た目上、ボタンを押したら絞り込んでいるように見えるかと思います。
カテゴリーのID指定を「-1」のように、マイナスをつけるとそのカテゴリを除外して表示してくれます。
「,」で区切ってカテゴリーIDを登録すると複数のカテゴリ分表示されるようになります。
// 一覧記事取得関数 --------------------------------------------------------------------------------
// "num" = 表示記事数, "cat" = カテゴリ番号
// 呼び出し元での指定も可能 ->
2021年10月9日桜木鍼灸治療院「桜木鍼灸治療院」 川畠 裕子 さん 不妊、マタニティ、美容に特化した女性のための鍼灸院。 女性の一生は目まぐるしく何度も変化し、それに伴って体の不調も出てきます。 川畠さんは院長であり、総合病院の外科病棟で勤務の経験が […]
function getCatItems($atts, $content = null) {
extract(shortcode_atts(array(
"num" => '3',
"cat" => '14'
), $atts));
// 処理中のpost変数をoldpost変数に退避
global $post;
$oldpost = $post;
// カテゴリーの記事データ取得
$myposts = get_posts('numberposts='.$num.'&order=DESC&orderby=post_date&category='.$cat);
if($myposts) {
// 記事がある場合↓
$retHtml = '<div class="getPostDispArea bg-black text-white">';
// 取得した記事の個数分繰り返す
foreach($myposts as $post) :
// 投稿ごとの区切りのdiv
$retHtml .= '<div class="getPost p-2 row">';
// 記事オブジェクトの整形
setup_postdata($post);
// サムネイルの有無チェック
if ( has_post_thumbnail() ) {
// サムネイルがある場合↓
$retHtml .= '<div class="getPostImgArea col-3">' . get_the_post_thumbnail($page->ID, 'thumbnail') . '</div>';
} else {
// サムネイルがない場合↓※何も表示しない
$retHtml .= '';
}
// 文章のみのエリアをdivで囲う
$retHtml .= '<div class="getPostStringArea">';
$retHtml.= '<span class="h4 getPostTitle">';
// 投稿年月日を取得
$year = get_the_time('Y'); // 年
$month = get_the_time('n'); // 月
$day = get_the_time('j'); // 日
$retHtml .= '<span>' . $year . '年' . $month . '月' . $day . '日</span>';
// タイトル設定(リンクも設定する)
$retHtml.= '<a href="' . get_permalink() . '">' . the_title("","",false) . '</a>';
$retHtml.= '</span>';
// 本文を抜粋して取得
$getString = get_the_excerpt();
$retHtml.= '<span class="getPostContent">' . $getString . '</span>';
$retHtml.= '</div></div>';
endforeach;
$retHtml.= '</div>';
} else {
// 記事がない場合↓
$retHtml='<p>記事がありません。</p>';
}
// oldpost変数をpost変数に戻す
$post = $oldpost;
return $retHtml;
}
// 呼び出しの指定
add_shortcode("getCategoryArticle", "getCatItems");
こっちは、カテゴリー固定版で、画像なしの1行で表示するスタイルです。
ニュースを表示させるのに使っています。
PHPもなかなか奥深いものです。
ディスカッション
コメント一覧
まだ、コメントがありません