WordPressのアーカイブページに月毎のページ送りを設置する方法。

下記ブログを参照(まんま流用)して、ページ送りを作成する。

参照元:前の月と次の月のリンク

<?php
$link_next_month = '';
$link_prev_month = '';

global $wpdb;

$thisyear = intval( get_the_time( 'Y' ) );
$thismonth = intval( get_the_time( 'm' ) );

$previous = $wpdb->get_row(
"SELECT DISTINCT MONTH(post_date) AS month, YEAR(post_date) AS year
FROM $wpdb->posts
WHERE post_date < '$thisyear-$thismonth-01'
AND post_type = 'post'
AND post_status = 'publish'
ORDER BY post_date DESC
LIMIT 1");

$next = $wpdb->get_row(
"SELECT DISTINCT MONTH(post_date) AS month, YEAR(post_date) AS year
FROM $wpdb->posts
WHERE post_date > '$thisyear-$thismonth-01'
AND MONTH( post_date ) != MONTH( '$thisyear-$thismonth-01' )
AND post_type = 'post'
AND post_status = 'publish'
ORDER BY post_date ASC
LIMIT 1");

if( $previous ) $link_prev_month = get_month_link( $previous->year, $previous->month );
if( $next ) $link_next_month = get_month_link( $next->year, $next->month );
?>

これで表示月の前月($link_prev_month)と次月($link_next_month)のリンク先URLを出得することができる。

あとは、こいつらを必要な場所に記述してあげれば完了。

アーカイブページのタイトル「月毎のアーカイブ:0000年00月」の前後にそれぞれ前月と次月のリンク表示をつけてやる。

archive.phpの、

elseif ( is_month() ) :
printf( __( 'Monthly Archives: %s', 'twentyfourteen' ), get_the_date( _x( 'F Y', 'monthly archives date format', 'twentyfourteen' ) ) );

の部分から、「月毎のアーカイブ:」の表示を取り除き、『≪前月|該当月|次月≫」のような左に前月、右に次月の表示を、あれば(最初の月は前月が、最新の月は次月が無い)記述する。



elseif ( is_month() ) :
if( $previous ): echo '<a href="'.$link_prev_month.'">&laquo;'.$previous->year.'年'.$previous->month.'月</a>|'; endif;
printf( get_the_date( _x( 'F Y', 'monthly archives date format', 'twentyfourteen' ) ) );
if( $next ): echo'|<a href="'.$link_next_month.'">'.$next->year.'年'.$next->month.'月&raquo;</a>'; endif;

あとはCSSで整形して出来上がり


ちなみに「前年」「次年」と年毎の場合は、同じ要領が下記ブログにありました。

参照:WordPressのアーカイブページで「前の年」「次の年」のページ送りをつける方法。
カテゴリーページなどで、属する記事のリストを表示させる際に、タイトルや画像、抜粋などで構成したブロックを横に並べていく時の設定の仕方。

普通にCSSで「float: left」の設定だけでは、ブロックの天地によって綺麗に並ばなかったりします。

なので、ブロックを行の頭揃えで表示するようにします。

考え方は、予め行に含めるブロックの数を決めておき、行を構成するためのソース<div>を1個目のブロックの前に、</div>を決めておいたブロック数のブロックの後にそれぞれ記述するようにする。
ループの中でカウントさせて1個目と決めておいたブロック数、最後の判断をさせる。

下記ソースは、1行の中に3個ずつ表示させる設定。

$category = get_category($cat); //表示中のカテゴリーの情報を取得
$cat_name = $category->cat_name; //表示中のカテゴリー名を代入
$cat_num = $category->count; //表示中のカテゴリーに属する記事の数を取得
?>
<h3><?php echo $cat_name; ?></h3>
<?php
$count = 1; //カウントのスタート1を設定
$args = array('category' => $category->cat_ID);
$mypost = get_posts($args); //カテゴリーに属する記事の情報全て取得
if($mypost):
foreach($mypost as $post):
if($count%3 == 1): //$countを「3」で割った余りが「1」である場合に
echo '<div class="bloc-gyo clearfix">';
endif;
?>
<div>
<dl>
<dt><?php echo mysql2date('Y.m.d', $post->post_date); ?></dt>
<dd><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></dd>
</dl>
</div>
<?php
if($count%3 == 0 || $count == $cat_num): //$countを「3」で割り切れた、もしくは最後のブロックに到達した場合に
echo '</div><!--bloc-gyo_box-->';
endif;
$count++; //$count++でカウントを増やして次のループへ
endforeach;
?>

WordPressのカテゴリーページにページ送りを表示してくれるプラグイン『WP-PageNavi』。

こちら からダウンロードして、プラグインフォルダ(wp-content/plugins)にアップロード。

管理画面の「プラグイン」の一覧に表示されるWP-PageNaviを有効化させる。

あとは、カテゴリーページの、ページ送りを表示させたい箇所に書きソースを追記すればOK。

<?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); } ?>


表示についての細かい設定は、管理画面の「設定」メニューに“WP-PageNavi”の項目ができているのでそちらで。


見栄えを調整する場合は、管理画面のプラグイン>プラグインの編集画面右上にあるプルダウンからWP-PageNaviを選択し、その下に表示される「wp-pagenavi/pagenavi-css.css」で、CSS情報を編集します。


最後に、サイトの引っ越しなどでプラグイン編集の画面に『ファイルを更新』ボタンが表示されず編集できない場合の対処方法。

編集したいプラグインのファイルの管理権限(パーミション)を666に変更すると、『ファイルを更新』ボタンが表示され管理編集が反映されるようになる。
『AD Gallery』というスライドショープログラムをWordPressに設置した際、メインのスライドショー部分が表示されないトラブルに陥った。

単体のhtmlやphpファイルでは、稼働するけれど、WordPressに設置すると稼働しないという状況。

他にも、Javascriptでスライドさせたりするプログラムが稼働しないトラブルに遭遇していた。

いろいろ調べていくと、スライドショーなどjQueryを使ったフリープログラムをWordPressに設置したときに、正常に稼働しない状態に陥ることが多々あります。

原因は、わかりやすくいうと(自分もよくわかっていない(^^ゞ)jQueryがぶつかっているらしい。


そんなときの対処法のひとつとして、読み込む[jQuery」ファイルを調整する方法があるとのこと。

「テーマのための関数」(function.php)に下記ソースを追記します。


function load_cdn() {
if ( !is_admin() ) {
wp_deregister_script('jquery');
wp_enqueue_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js', array(), '1.7.1');
}
}
add_action('init', 'load_cdn');


Wordpress本来の「jQuery」の読込は停止して、指定したjQueryを読み込むようにする。
ただし管理画面は対象外。

みたいな内容らしい。
ただ、プラグインなどに影響を及ぼす可能性もかるので、慎重に!


今回の「AD Gallery」は、この対処法で稼働したのでとりあえず備忘録。

なんだか少し危うい対処法。(゚_゚i)
固定ページで階層が2階層までの場合は、

$parent_slug = get_page_uri($post->post_parent);

これで親ページのスラッグを取得する事ができるが、

3階層以上の構成になった場合、上記の方法では、ディレクトリ形式で一番上の階層のスラッグからの情報となってします。

例:1kaiso/2kaiso/3kaiso


今回は、一つ上の親ページのスラッグだけを表示する方法。

考え方は、

1.親のIDを取得して変数へ

2.1の変数とget_postを使って親ページの情報を変数へ

3.2の変数からスラッグ名(post_name)を取得する

以上、ソースは以下。


<?php
if(is_page() && $post->post_parent):
//固定ページで且つ親ページがある場合の条件分岐

$post_id=$post->post_parent;
//親のIDを取得して変数へ

$page_name=get_post($post_id);
//親ページの情報を変数へ

echo '$page_name->post_name';
//スラッグ名を書き出し命令

endif; ?>
//おしまい

とりあえずこれで動くけど、違う方法もあったような気がする。