表示しているページが最新の投稿10件に含まれるかどうかをチェックさせる

Pocket

..ビジョンのない場当たり的なサイト運営..

WordPressで、現在表示しているページが最新の投稿10件に含まれるかどうかをチェックさせて(トップページで最新記事10件、それ以外は過去の記事一覧ページというところでリスト表示という構成なので…)表示するリンクを切り替える…ということをする必要があったので、調べたけどWordpressの標準機能としてはなさげ?…なので無理くりやっつけてみたのでメモメモ。

以下、手順とサンプル

functions.php に、stdclassを配列に変換する stdclass_to_array() と 指定したIDの投稿が最新10投稿に入るかどうかをチェックして真偽を返す、 my_is_new_func () を記述して保存します。

//指定したIDの投稿が最新10投稿に入るかどうかをチェックする
function my_is_new_func ($atts) {
  $found_posts = get_posts( array( 'numberposts'=>10 ) ); //とりあえず10件データとってこい!
  $array_newposts = stdclass_to_array($found_posts); //stdclass_to_arrayで下ごしらえしとけ!
  $new = 0; //付箋の用意
  foreach ($array_newposts as $v1) { //1レコードとりだして…
    if ($v1['ID']==$atts){$new = 1;} //そのなかにIDの項目が渡された$idとおんなじのがあったら付箋な!
  }
  return $new; //single.phpさんに報告!
}
//stdclassを配列に変換
function stdclass_to_array($objDATA) {
  $arrayDATA = (array) $objDATA;
  $arrayKeys = array_keys($arrayDATA);
  $intCount = count($arrayKeys);
  for($i=0;$i<$intCount;$i++){
    $arrayDATA[$arrayKeys[$i]] = (array) $arrayDATA[$arrayKeys[$i]];
  }
  return $arrayDATA;
}

single.php で、previous_post_link()やらprevious_next_link()やらやってる間に以下のコードを挿入。

&lt;a href=&quot;/"&gt;トップへ戻る</a>|

&lt;a href=&quot;/kako/"&gt;過去のお知らせ一覧へ戻る</a>|

本当はどこの一覧からきたかを判断して(カテゴリ別の一覧とかもあるので…)、元の一覧に戻る的な仕様にしたいんだけど、テスト環境のWPからHTMLで吐き出して、サーバーサイド言語のまったく禁止されてる環境にアップする必要がある案件なので、余計なことはしないことにした。

苦労した点は、$idで現在のIDを取り出せることを知らなかったので、the_ID( )とかで頑張って関数に数値渡そうとしたけど、うまくいかなかった…とget_posts()でゲットした配列はPHPですぐに処理できないstdclassオブジェクトの配列だったんでそれをどうPHPの多次元配列に変換するのか…ってとこで、SugarClip:「stdClassオブジェクトを連想配列に変換する 」なんかを参考に(というかそのまま使わせてもらった)してなんとかなった。

WPではなんでもかんでもstdclassオブジェクトでやりとりされているみたいなので、直接stdclassオブジェクトを操作できるようになるといいんだろうけど、それはまた今後の課題ということで。

カテゴリー: Wordpress パーマリンク
おもろないいまいちだふつう…だまあまあだおもしろい (未評価)
※よろしければ、今後のために「おもろ指数」の評価をお願いします。
Loading...

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です