アーカイブを年毎ではなく、年度毎に表示させる必要があるときのカスタマイズ方法。

まずは、プラグイン「Archives for a category」をインストールして有効化する。

このプラグインのおかげで、アーカイブリストを取得する関数「wp_get_archives」に設定したカテゴリーが反映されるようになる。このプラグインがなければカテゴリーの絞り込みができないというわけだ。

wp_get_archives()を次の様に設定する。

※注)カテゴリーIDが1だった場合
wp_get_archives('type=yearly&cat=1');

これで、年毎のアーカイブリストを取得する事が出来る。

更にプルダウン化させるのであれば、下記のように追記する。

<select name="archive-dropdown" onChange='document.location.href=this.options[this.selectedIndex].value;'>
<?php wp_get_archives('type=yearly&format=option&cat=30'); ?>
</select>

wp_get_archivesにformat=optionを追記することで、取得結果を<option value="url">2014</opution>という風にオプションタグで書き出されるので、<select>タグを前後に付ければプルダウンにできる。

これで、リンク先がドメイン名/date/西暦?cat=カテゴリーIDとなって、指定した西暦、カテゴリーに絞られたアーカイブが表示される。


あとは、表示されるページの投稿取得範囲を、4月1日~3月31日に設定すれば完了。

3ヵ月遅らせるソースは下記の通り。

function query_for_fiscal_year( $where ) {
global $wpdb, $wp_query, $fiscal_year;
if ( is_year() ) {
$fiscal_year = (int)$wp_query->query_vars['year'];
$next_year = $fiscal_year + 1;
$where = preg_replace("/AND YEAR\(wp_posts\.post_date\)='[0-9]+'/", '', $where);
$where .= "
AND ( ( YEAR($wpdb->posts.post_date) = '$fiscal_year' AND MONTH($wpdb->posts.post_date) BETWEEN '4' AND '12' )
OR ( YEAR($wpdb->posts.post_date) = '$next_year' AND MONTH($wpdb->posts.post_date) BETWEEN '1' AND '3') )";
}
return $where;
}
add_action( 'posts_where', 'query_for_fiscal_year' );

上記ソースをfunctions.phpに追記すれば完成。
SEOの観点から、タイトルの表示をキャッチフレーズやページ名をサイト名の前に表示させたい時の対処法。

WordPressはデフォルトだと「サイト名|タイトル(キャッチフレーズ)になっているので、この順番を入れ替える。

『フィルターフック』なるものがあるらしいが、何だかよくわからないので直接functions.phpをいじって「wp_title」を変更する。

functions.phpの中に、「function twentyfourteen_wp_title( $title, $sep )」というwp_titleの設定部分があるので、その中を変更します。

if ( $site_description && ( is_home() || is_front_page() ) ) {
$title = "$title $sep $site_description";
}

$title $sep $site_description = サイト名 区切り 説明(キャッチフレーズ)なので、

if ( $site_description && ( is_home() || is_front_page() ) ) {
$title = "$site_description $sep $title";
}

と、入れ替えを行えばOK。
Twenty Fourteenから無くなった(?それとも自分で消したのかは不明)、単一記事のページの上部もしくは下部に表示されていた、一つ前と一つ後のページへのナビゲーションを設置する方法。

一つ前の記事を表示させるためには、
previous_post_link()

一つ後の記事を表示させるためには、
next_post_link()

を使う。

単一記事の投稿(Single.php)に、ナビゲーションのソースを下記の様に設置します。

<?php previous_post_link(); ?> <?php next_post_link(); ?>


ただ、複数カテゴリーが存在する場合は、“前後”の基準が時間のみとなり、カテゴリー関係なく表示されてしまうので、同一のカテゴリーでの前後に絞り込むように設定する。

<?php previous_post_link('« %link', '%title', TRUE, ''); ?> <?php next_post_link('%link »', '%title', TRUE, ''); ?>

このままだと、前後の記事タイトルがくっついた状態になるので、タグを付けてCSSで整形。

<div>
<p><?php previous_post_link('« %link', '%title', TRUE, ''); ?></p>
<p><?php next_post_link('%link »', '%title', TRUE, ''); ?></p>
</div>


で、完了。
WordPressの備忘録

ホームページに新着情報欄を設けて、その中に様々なカテゴリーをまとめて表示させるけれども、属するカテゴリーごとに表現を変更したい場合の対処方法。

ちょっとだけ引っかかってしまったので、ここに残しておく。

書き方としては、

1.get_postsでカテゴリを複数して格納

2.foreachで繰り返し
 (繰り返しの中で、各投稿毎のカテゴリを取得して判別)
  2-1.get_the_categoryで、カテゴリー情報を取得、格納

  2-2.更にカテゴリーIDを取得、格納

  2-3.取得したカテゴリーIDをif文条件分岐にかけて、カテゴリー毎の表現を設定

3.foreachの終了

といった感じ。

これに、投稿が無かった場合の分岐も加えれば完璧かな。


実際のソース

<h3>新着情報</h3>
<div>
<?php
$mypost = get_posts('category=1,2');
if($mypost) {
foreach($mypost as $post):
$cat_now = get_the_category();
$cat_now = $cat_now[0];
$cat_id = $cat_now->cat_ID;
?>
<dl>
<dt><?php echo mysql2date('Y.m.d', $post->post_date); ?></dt>
<?php if($cat_id == 1) { ?>
<dd>【お知らせ】<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></dd>
<?php } elseif($cat_id == 2) { ?>
<dd>【オススメ物件】<a href="<?php the_permalink(); ?>">「<?php the_title(); ?>」</a>の情報をアップ致しました。</dd>
<?php } ?>
</dl>
<?php endforeach; } else { ?>
<dl>
<dt><?php $today = date("Y.m.d"); print($today); ?></dt>
<dd>現在、お知らせ・物件情報はございません。</dd>
</dl>
<?php } ?>
</div>


なんで、否、何に躓いたかが思い出せない…
忙しくてなかなかブログが更新できていない。

そもそも「備忘録」ってテーマ、なんで作ったんだろう。

この「WordPress」ってテーマが既にWordPressに関する備忘録なのにorz


んで、タイトルの件。

投稿に設定されているアイキャッチ画像を取得して表示する場合。

・get_posts()で投稿情報を取得

・get_the_post_thumbnail()で<img src="~の情報を書き出し

というふうに処理。

<?php
$mypost = get_posts();
foreach($mypost as $post):
if(has_post_thumbnail()) {
?>
<li><a href="<?php the_permalink( ); ?>"><?php echo get_the_post_thumbnail( $post->ID, array(190,190) ); ?></a></li>
<?php } endforeach; ?>

と、まぁこんな感じになるかと。


では、固定ページの場合はというと、基本的には投稿と同じ。

ただ、一部固定ページ用の処理をしてあげないと、抽出した情報に投稿の情報が混在してしまうようです。

<?php
$pages = get_pages();
foreach($pages as $page):
if(has_post_thumbnail($page->ID)) {
?>
<li><a href="<?php echo get_page_link($page->ID); ?>"><?php echo get_the_post_thumbnail( $page->ID, array(190,190) ); ?></a></li>
<?php } endforeach; ?>

で、なんとか成功!

違いは、

・$mypost = get_posts(); → $pages = get_pages();

・has_post_thumbnail() → has_post_thumbnail($page->ID)

・<?php the_permalink( ); ?> → <?php echo get_page_link($page->ID); ?>

・get_the_post_thumbnail( $post->ID, array(190,190) ) → get_the_post_thumbnail( $page->ID, array(190,190) )

似て非なるもの。投稿と固定ページの処理。