ポータルページを作る。時代の最後尾を往くWebサイト。プライバシーポリシーポータルページを作る。目次はじめにChangeLogの自動生成SQL文の作成ChangeLogを表示するためのショートコードを書く。ランダムに選択した記事を1件表示する。まとめスポンサーリンクはじめに今回はあまり手っ取り早くない作業について書きます。Oneテーマでは、トップページに最新の投稿を表示する設定としていましたが、過去に投稿した記事についても適宜修正を加えています。そこで、以下の機能を持つポータルページを作成することにしました。記事の新規投稿と修正・更新を合わせたChangeLog(最新の10件分)をページの先頭に表示する。ChangeLogの下にランダムに選択した記事を1件表示する。ChangeLogの自動生成SQL文の作成まず、記事の新規投稿と修正・更新を合わせたChangeLogをページの先頭に表示するのですが、WordPressの記事はデータベースに格納されているので、SQL文を使って最近新規投稿されたか修正・更新された記事を新規投稿または修正・更新された時刻の新しい順に10件取り出し、かつその中から以下の情報をデータベースから取り出すためのSQL文を書きます。(URLを作成するために必要です。記事が新規に投稿されたものなのか、それともアップデートされたものなのかを示すフラグ上記の4個の情報のうち、最後の1個を除く3個についてはwp_portsテーブルにそのものズバリのカラムがありますが、最後の1個は直接カラムに格納されているものではないので、記事の新規投稿時刻(post_dateカラム)と記事の最後の修正時刻(post_modifiedカラム)を利用して作成する必要があります。post_dateカラムとpost_modifiedカラムの値は記事の状況に応じて以下のように変化します。対応するpost_dateカラムとpost_modifiedカラムの値が等しくなる。post_modifiedカラムが修正・更新された時刻に変更される。よって、post_dataカラムとpost_modifiedカラムの値が等しくなくなる。SQL文のCASE句を使って仮のカラムを作成し、上記の2ケースのうち前者の場合には1を、後者の場合には2をそれぞれ割り当てることにします。wp_postsテーブルには公開されている記事以外の要素(ナビゲーションの要素等)などについての情報もレコードとして書き込まれているので、記事または固定ページで、かつ公開されているものをwhere句で選択する必要があります。以上の点を踏まえて、必要な情報をデータベースから取り出すためのSQL文は以下のようになります。10;ChangeLogを表示するためのショートコードを書く。ここまででSQL文が作ることができたので、これを呼び出して、HTMLのsnippetを作成するためのショートコードをfunction.phpに追加します。今回は以下のようなコードを追加してみました。“<p>新着記事または修正情報はありません。href=\”/?p=”.$row[‘id’].”\”>”.$row[‘post_title’].”</a>」”.(($row[‘is_updated’]==1)?”を新規に追加”:”の内容を更新”).”しました。snippetを追加することができます。ランダムに選択した記事を1件表示する。ChangeLogだけだとポータルページの内容としてはいまいち内容が薄くなってしまうので、本サイトの記事から記事をランダムに1件選択して表示するためのショートコードを作成して、ポータルページから呼び出すことにします。以下のコードをfunction.phpに追加します。$string;}add_shortcode(‘select-random-posts’,’select_random_posts’);検索の条件が前項の新着・修正記事の検索のときほど複雑ではない(少なくともCASE句は使わなくても事足ります。)ので、WP_Queryを使ってランダムに1件記事を取得しています。記事の内容はget_the_content関数を使ったあとthe_contentフィルタを適用していますが、これはthe_content関数をそのまま使用すると、ランダムに取得した記事がページの先頭に来てしまうためで、the_content関数の中からthe_contentフィルタを適用する部分だけを抜き出して適用するコードとしています。これを思いつくまでにかなりハマりました。上記のコードを追加して、記事の編集画面中の適当な場所で、[select-random-posts]と書くと、ランダムに選択した記事を1件表示することができます。スポンサーリンクまとめ本記事ではポータルページの作り方について書いてみました。実はショートコードは初めて書いてみたのですが、割といろいろできそうです。あと、MariaDBでもCASE句が使えますが、これをうまく使うと呼び出し側のロジック(今回の例ではPHPのロジックになりますが、)を大幅に削減できるので、覚えておくといろいろなところで役に立つと思います。Plugin)を使ってみる。Plugin)をカスタマイズする。pandanote.infoのロゴ動画(take3)を作る。AviUtlでYouTube用のロゴ動画を1時間くらいで作ってみる。【動画を一部差し替えました。】Blender(2.78a)でポリゴンにテクスチャを貼る方法をいつも忘れてしまうのでメモしてみた(その1)。このウィジェットの背景が黒くなってしまうことがある理由についてはこちらをクリック。AviUtlgimp-2.10.sikuliGIMP-2.10を使ってスクリーンショットを取得するためのSikuliXのスクリプト。SikuliX-2.0.1+GIMP-2.10.10の組み合わせでのみ動作確認を行っています。SolrのDataImportHandlerで7-zipで圧縮されたファイルのインポートをサポートするためのJARファイル。struts2ajaxtestStruts2でAjaxを使用するWebアプリケーションのサンプル。LANを発行するためのスクリプトのサンプル(Fedora用)。8用のNEologd入りkuromojiをビルドするためのパッチ。8.1→10にアップグレードしてみたところ、途中で電池が切れて復旧に手間取った件。APIを呼び出し、Bitcoinの価格を取得するPython3のプログラムを書いてみた。httpからhttpsへのリダイレクトを削減するためのnginxの設定。YouTube↓のボタンを押していただくとチャンネルを登録できます。見解等とは一切関係ありません。