3ヶ月前の投稿情報を削除するには
4件の返信を表示中 - 1 - 4件目 (全4件中)
-
wordpress 本体に、wp_delete_post という関数が用意されています。
データベースを直接いじるよりは、こちらを使うほうが良いでしょう。http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wp_delete_post
記事、添付ファイル、固定ページなどの投稿を削除します。記事やページの場合は、それに関連づけられている情報(コメント、カスタムフィールド、タームなど)もすべて削除されます。もう解決済みなのですが、一応。
<?php /* Plugin Name: Old Post Delete Plugin URI: http://geeeek.crz.jp/ Description: 3か月前より以前の古い投稿をデータベースから削除します。 Author: oumiya shun Version: 0.1 Author URI: http://geeeek.crz.jp/ */ function delete_old_options() { ?> <div class=wrap> <?php if ( function_exists( 'screen_icon' ) ) { screen_icon(); } ?> <h2>古い投稿の削除</h2> <?php if ( !empty($_POST) && check_admin_referer( 'delete_old_post_page', 'delete_old_post_field' ) ) { $year = isset($_POST['year']) ? $_POST['year'] : null; $month = isset($_POST['month']) ? $_POST['month'] : null; $day = isset($_POST['day']) ? $_POST['day'] : null; $delete_option = isset($_POST['delete_option']) ? $_POST['delete_option'] : null; if (empty($year) || empty($month) || empty($day) || empty($delete_option)) { echo '<p>設定値が正しくありません。</p>'; } else { $force_delete = false; if ($delete_option == "2") { $force_delete = true; } delete_old_posts($year, $month, $day, $force_delete); } } ?> <p class="description"> 削除対象の日付を設定して「変更を保存」ボタンをクリックすると、 設定した日付より過去の投稿がすべて削除されます。 (設定日付は含みません。) </p> <p style="color: #ff0000; font-weight: bold;"> この操作を行う前に必ずデータベースのバックアップ・投稿のエクスポートを行ってください。<br /> この操作は元に戻せません! </p> <form action="" method="post"> <?php wp_nonce_field( 'delete_old_post_page','delete_old_post_field' ); ?> <table class="form-table"> <tr valign="top"> <th>年</th> <td> <input type="text" name="year" /> </td> </tr> <tr valign="top"> <th>月</th> <td> <input type="text" name="month" /> </td> </tr> <tr valign="top"> <th>日</th> <td> <input type="text" name="day" /> </td> </tr> <tr valign="top"> <th>削除操作</th> <td> <select name="delete_option"> <option value="1">ゴミ箱に移動</option> <option value="2">完全に削除</option> </select> </td> </tr> </table> <?php submit_button(); ?> </form> </div> <?php } function delete_old_menu() { add_options_page('古い投稿の削除', '古い投稿の削除', 8, __FILE__, 'delete_old_options'); } add_action('admin_menu', 'delete_old_menu'); // 指定の日付より前の投稿を削除します。(指定の日付は含みません。) // 引数にtrueを指定するとゴミ箱に移動ではなく削除します。 function delete_old_posts($year, $month, $day, $force_delete = false) { global $wpdb; if (checkdate($month, $day, $year) === false) { echo '<p>日付が正しくありません。</p>'; return; } // 指定の日付より前の投稿IDを取得 // NOTE: WordPressに用意されている関数で指定日付より以前のpost_idを取得が見つからなかったので // wpdbでデータベースを直接検索しています。 // NOTE: よって公開状態や修正日時を考慮したい場合はSELECT文を直接修正してください。 $target_date = $year . '-' . $month . '-' .$day; $query_text = "SELECT ID FROM wp_posts WHERE post_type = 'post' AND post_date < '$target_date'"; $query_result = $wpdb->get_results($query_text); // 削除したリスト $delete_post_ids = ""; // 削除に失敗したリスト $not_found_post_id = ""; foreach($query_result as $item) { $id = $item->ID; if (wp_delete_post($id, $force_delete) === false) { $not_found_post_id .= "<li>$id</li>"; } else { $delete_post_ids .= "<li>$id</li>"; } } if (empty($delete_post_ids)) { echo "<p>対象の投稿が見つかりませんでした。日付を指定しなおしてください。</p>"; } else { if ($force_delete === true) { echo "<p>次の投稿を削除しました。</p>"; } else { echo "<p>次の投稿をゴミ箱に移動しました。</p>"; } echo '<ul>'; echo $delete_post_ids; echo '</ul>'; } if (empty($not_found_post_id) === false) { if ($force_delete === true) { echo "<p>次の投稿を削除できませんでした。</p>"; } else { echo "<p>次の投稿をゴミ箱に移動できませんでした。</p>"; } echo '<ul>'; echo $not_found_post_id; echo '</ul>'; } }
4件の返信を表示中 - 1 - 4件目 (全4件中)
- トピック「3ヶ月前の投稿情報を削除するには」には新たに返信することはできません。