広告・Googleアドセンス728px

Article(記事)

WordPressの投稿の古い記事にメッセージを表示するプラグイン「WP Posts Date Alert」を改造してみた

更新日:

WebCakeさんが作成し配布している「WP Posts Date Alert」を少し改造させてもらったのでそれを記事にします。

WordPressで投稿の公開日と現在の日付を比較して古い記事にメッセージを表示するプラグイン「WP Posts Date Alert」を作りました – WebCake
WordPressで投稿の公開日と現在の日付を比較して古い記事にメッセージを表示するプラグイン「WP Posts Date Alert」 ...

WP Posts Date Alertは以下のように記事が古い場合に注意メッセージを表示する仕組みです。

改造のポイントは以下の通りです。

改造ポイント

  • 投稿日だけでなく更新日とも比べたい
  • 特定のカテゴリのみ対応したい

初投稿後、最新化するなど記事のメンテナンスをしているケースにも対応したい、ということと、日記的なものは記事の古さに関係ないため、技術動向や新製品レビューなど特定のカテゴリにのみ警告文は表示したいと思っています。

パッチ作成

まずはwp-posts-date-alert.php本体へのパッチとなります。

*** wp-posts-date-alert.php.org 2017-01-07 01:46:59.315298325 +0900
--- wp-posts-date-alert.php     2017-02-14 22:56:57.027582744 +0900
***************
*** 87,93 ****
{
// 日付のチェック
if ( self::check_date() == true ) {
!                               return true;
}
}
--- 87,105 ----
{
// 日付のチェック
if ( self::check_date() == true ) {
!
!                               // アラート対象カテゴリの取得
!                               $category_str = get_option( self::n( 'category' ), '' );
!                               if ( $category_str !== '' ){
!                                       $categories = explode(',',$category_str);
!                                       foreach ( $categories as $category ){
!                                               // 記事に設定されているカテゴリーをチェック
!                                               if( in_category( $category )){
!                                                       return true;
!                                               }
!                                       }
!                               // カテゴリーの指定がない場合には全カテゴリーを対象とする
!                               } else { return true; }
}
}
***************
*** 104,110 ****
// DAY_IN_SECONDS     = 24 * HOUR_IN_SECONDS
// WEEK_IN_SECONDS    = 7 * DAY_IN_SECONDS
// YEAR_IN_SECONDS    = 365 * DAY_IN_SECONDS
!               $day = round( (int) abs( get_the_time( 'U' ) - current_time( 'timestamp' ) ) / DAY_IN_SECONDS );
$type = get_option( self::n( 'use_type' ), -1 );
--- 116,131 ----
// DAY_IN_SECONDS     = 24 * HOUR_IN_SECONDS
// WEEK_IN_SECONDS    = 7 * DAY_IN_SECONDS
// YEAR_IN_SECONDS    = 365 * DAY_IN_SECONDS
!
!               // 投稿日
!               $ctime = current_time( 'timestamp' );
!               $day = round( (int) abs( get_the_time( 'U' ) - $ctime ) / DAY_IN_SECONDS );
!
!               // 更新日
!               $mday = round( (int) abs( get_the_modified_time( 'U' ) - $ctime ) / DAY_IN_SECONDS );
!
!               // 更新日の方が新しければ更新日と比較する
!               if ( ($mday >= 0) && ($day >= $mday) ){ $day = $mday;}
$type = get_option( self::n( 'use_type' ), -1 );
***************
*** 190,195 ****
--- 211,217 ----
update_option( self::n( 'use_css' ) , $_POST[ self::n( 'use_css' ) ] );
update_option( self::n( 'alert_position' ) , $_POST[ self::n( 'alert_position' ) ] );
update_option( self::n( 'use_wrapper' ) , $_POST[ self::n( 'use_wrapper' ) ] );
+                       update_option( self::n( 'category' ) , $_POST[ self::n( 'category' ) ] );
// 画面に更新されたことを伝えるメッセージを表示
echo '<div class="updated"><p><strong>' . __( 'Settings saved', self::PREFIX ) . '</strong></p></div>';
***************
*** 292,297 ****
--- 314,331 ----
</fieldset>
</td>
</tr>
+                                       //設定画面でのカテゴリー登録エリア
+                                       <tr valign="top">
+                                               <th scope="row"><?php _e( 'Category', self::PREFIX ); ?></th>
+                                               <td>
+                                                       <fieldset><legend class="screen-reader-text"><span><?php _e( 'Categories', self::PREFIX ); ?></span></legend>
+                                                       <p><label for="<?php echo self::n( 'category' ); ?>"><?php _e( 'Please input the category id which you want to alart. (Use commas to separete each ids)', self::PREFIX ); ?></label></p>
+                                                       <p>
+                                                       <textarea name="<?php echo self::n( 'category' ); ?>" rows="1" cols="50" id="<?php echo self::n( 'category' ); ?>" class="large-text code"><?php echo esc_textarea( get_option( self::n( 'category' ) ) ); ?></textarea>
+                                                       </p>
+                                                       </fieldset>
+                                               </td>
+                                       </tr>
<tr valign="top">
<th scope="row"><?php _e( 'Message', self::PREFIX ); ?></th>
<td><fieldset><legend class="screen-reader-text"><?php _e( 'Message', self::PREFIX ); ?></span></legend>
***************
*** 348,351 ****
if ( PostsDateAlert::is_disp() == true ) {
echo PostsDateAlert::get_content();
}
! }
\ ファイル末尾に改行がありません
--- 382,385 ----
if ( PostsDateAlert::is_disp() == true ) {
echo PostsDateAlert::get_content();
}
! }

続いて日本語メッセージ用にパッチを作成しました。

** wppda-ja.po.org     2017-01-07 01:46:59.314298335 +0900
--- wppda-ja.po 2017-01-07 12:04:46.700463140 +0900
***************
*** 91,96 ****
--- 91,104 ----
msgid "Enclose with a"
msgstr "divで括る"
+ #:
+ msgid "Category"
+ msgstr "カテゴリー"
+
+ #:
+ msgid "Please input the category id which you want to alart. (Use commas to separete each ids)"
+ msgstr "アラートを表示したいカテゴリーIDを指定してください。(カンマで区切ってください)"
+
#~ msgid "Year Date"
#~ msgstr "年日"

こちらはパッチを当てただけではだめで、poファイルをmoファイルに変換する必要があります。

#msgfmt wppda-ja.po -o wppda-ja.mo

としましょう。

ダウンロードはこちらから。

使い方

WordPressの設定画面で「WP Posts Date Alert」を選択すると以下の画面が出てきます。今回パッチを当てたことで赤で囲んだ部分が新規に追加されています。
こちらに注意書きを表示したいカテゴリーIDを指定します。指定がない場合には全カテゴリを対象とします。

個別の投稿画面には以下のようなウィジェットがあり個別に指定することができますが、チェックを入れたとしても上記で設定したカテゴリではない場合には設定は有効になりません。

逆に警告文を出すカテゴリだとしてもチェックを外しておけば警告文はでませんのでご注意下さい。

まとめ

  • 個別記事でチェックを外せば警告文は表示されない
  • 個別記事でチェックを入れれば、設定したカテゴリに属する記事であれば警告文が表示される

ということになります。

この記事は役に立ちましたか?評価をお願いいたします。
[合計: 0 平均: 0]

広告336px

広告336px

-Article(記事)
-WordPress, WP-Plugin, WPカスタマイズ

Copyright© 蒲田ネット , 2017 AllRights Reserved.