こんにちは。「Javaを復習する初心者」です。
このブログはwordpressで作ってます。固定ページに投稿ページの情報を載せたくて調べて実施した結果、大変苦労したという話を書きます。
経緯
時系列で書いていきますが、結局どうしたのかというを知りたい方は最後のを見るだけで十分だと思います。
まず最初に知ったのはショートコードという機能でした。このブログではプログラムのコードを載せるために、SyntaxHighlighter Evolvedというプラグインを使っていて、投稿記事のテキストでショートコードで該当箇所を囲むという使いかたのプラグインです。それならば、getMostRecentというショートコードを記載した箇所に直近の投稿ページの情報が載れば便利だな思ったのです。たくさん載っても良くないと思い、とりあえず直近の3件でタイトルと投稿日を載せるのを目標にしました。そして、ネットで様々なページを見て回りました。
ショートコードの定義の仕方は分かったので、投稿ページの取得の方法を調べました。get_postsという関数使って、戻り値を使うところは分かりました。その次にforeachを使うことが書いてあるのですが、そこでグローバル変数の$postを使うということが書いてあってその通りにしました。foreach($postlists as $post)という感じの使いかたです。ショートコードとして定義した関数で使ったのですが、なぜか関数がreturnしたhtmlが記事の上に来てしまいました。このような動きになる原因が不明で、もしかして使ってるテーマtwentyfourteen特有の動きなのかなと考えました。そこでforeachで格納先の変数をローカル変数にしたのですが、困ったことにthe_title()などの関数はどうやらグローバル変数postから情報を取ってくるもののようでエラーが出てしまいました。
グローバル変数を使った方法はあきらめて、再度調べた結果、WP_POSTというクラスがあることを知りました。get_postsで返却される配列はこのクラスの配列らしいことが分かりました。ということで、ネット上にある方法と少し変えてローカル変数を使って投稿ページのタイトル等を取得することにしました。
プログラム
以下にローカル変数を定義して投稿記事のタイトルと投稿日時returnするソースを載せます。(連結した文字列をreturnするだけのものです。)
ソース
function getMostRecent_shortcode() {
$postslist = get_posts(
array(
'posts_per_page' => 3,
));
$str = '';
foreach ($postslist as $p) :
$str .= $p->post_title
.mysql2date('Y年n月j日', $p->post_date);
endforeach;
wp_reset_postdata();
return $str;
}
add_shortcode('getMostRecent', 'getMostRecent_shortcode');
これでタイトルと日付が出力できました。htmlを使った場合も指定箇所に出力されることが確認できました。ここまで到達するのが大変苦労しました。表示件数3件で固定している点について、ショートコードで引数を使って件数指定する方法があるということも分かったのですが、そこまでする余裕はありませんでした。今は上記コードをもとにして改良を加えて使ってます。あとで新着記事を表示するプラグインの存在を知りましたが、先にそれを知っていればプラグインを使って済ませていたかもしれません。