目次
はじめに
Cocoonは、表1の設定を行うことで、独自のアクセス集計機能が有効になり、投稿一覧で各記事のPV数を確認できます。
| 設定 | 大項目 | 項目 | 設定値 |
|---|---|---|---|
| アクセス集計 | アクセス集計 | アクセス集計の有効化 | オン |
| 管理者画面 | カラム表示 | PVを表示する | オン |
ただし、このアクセス数をリセットする機能はデフォルトでは搭載されていません。
アクセス数をリセットするには、プラグイン「WP-DBManager」などを使用する必要があります。
そこで、投稿一覧に「PV数リセット」ボタンを追加します。
この記事では、この方法について説明します。
投稿一覧のPVカラムに「リセット」ボタンを追加する方法
投稿一覧の PV 数がある投稿の PV カラムに「リセット」ボタンを追加します。
完成イメージ

実装手順
以下のコードをfunctions.phpに追加します。
// 管理画面一覧のカラムにデータを表示
add_action('manage_posts_custom_column', function ($column_name, $post_id) {
if ($column_name !== 'pv') {
return;
}
// PV数を確認
if (get_todays_pv() || get_last_7days_pv() || get_last_30days_pv() || get_all_pv()) {
$raw_url = admin_url("admin-post.php?action=reset_pv&id={$post_id}");
$nonce_url = wp_nonce_url($raw_url, 'reset_pv_' . $post_id);
echo '<a class="button button-small" href="' . esc_url($nonce_url) . '">リセット</a><br>';
}
}, 10, 2);
// PV数をリセット
add_action('admin_post_reset_pv', function () {
$post_id = isset($_GET['id']) ? absint($_GET['id']) : 0;
if (!$post_id) {
wp_die('無効な投稿IDです。');
}
// nonceチェック
if (!check_admin_referer('reset_pv_' . $post_id)) {
wp_die('セキュリティチェックに失敗しました。');
}
// 権限チェック
if (!current_user_can('edit_post', $post_id)) {
wp_die('この操作を行う権限がありません。');
}
// PV数を削除
global $wpdb;
$table_name = ACCESSES_TABLE_NAME;
$wpdb->delete($table_name, ['post_id' => $post_id], ['%d']);
// 元のページへ戻る
$redirect_url = wp_get_referer();
$safe_redirect = wp_validate_redirect($redirect_url, admin_url('edit.php'));
wp_safe_redirect($safe_redirect);
exit;
});
投稿一覧の一括操作に「PV数をリセット」を追加する方法
投稿一覧の一括操作に「PV数をリセット」オプションを追加します。
これにより、複数の投稿を選択し、PV数をリセットできます。
完成イメージ

実装手順
以下のコードをfunctions.phpに追加します。
// 一括操作にを追加
add_filter('bulk_actions-edit-post', function ($bulk_actions) {
$bulk_actions['clear_pv'] = 'PV数をリセット';
return $bulk_actions;
});
// 一括操作を実行
add_filter('handle_bulk_actions-edit-post', function ($redirect_url, $action, $post_ids) {
if ($action !== 'clear_pv') {
return $redirect_url;
}
// 権限のある投稿IDのみを抽出
$valid_ids = array_filter($post_ids, function ($id) {
return current_user_can('edit_post', $id);
});
if (empty($valid_ids)) {
return $redirect_url;
}
global $wpdb;
$table_name = ACCESSES_TABLE_NAME;
// PV数を削除
$ids_placeholder = implode(',', array_fill(0, count($valid_ids), '%d'));
$wpdb->query(
$wpdb->prepare(
"DELETE FROM {$table_name} WHERE post_id IN ({$ids_placeholder})",
$valid_ids
)
);
return add_query_arg('cleared_pv', count($valid_ids), $redirect_url);
}, 10, 3);
// 通知メッセージを出力
add_action('admin_notices', function () {
$screen = get_current_screen();
if ($screen && $screen->id === 'edit-post' && isset($_GET['cleared_pv'])) {
$count = absint($_GET['cleared_pv']);
echo '<div class="notice notice-success is-dismissible"><p>' . esc_html($count) . ' 件の投稿のPV数をリセットしました。</p></div>';
}
});
全投稿のPV数をリセットする方法
Cocoon設定→アクセス集計に 「アクセス履歴リセット」 を追加します。
「全クリア」ボタンを押すことで、アクセス履歴をデータベースから削除します。
完成イメージ

実装手順
以下のコードをfunctions.phpに追加します。
// 対象の処理を実行
add_action('admin_footer', function () {
if (isset($_GET['page']) && $_GET['page'] === 'theme-access') {
add_access_field();
}
});
/**
* アクセス集計(設定)のメニュー項目を追加
*
* @return void
*/
if (!function_exists('add_access_field')):
function add_access_field() {
ob_start();
?>
<tr>
<th scope="row">アクセス履歴のリセット</th>
<td>
<form method="POST">
<?php wp_nonce_field('clear_access_action', 'clear_access_nonce'); ?>
<input type="hidden" name="clear_access" value="1">
<input type="submit" class="button" value="リセット" onclick="return confirm('本当にアクセス履歴をリセットしますか?');">
</form>
<p class="tips">
<span class="fas fa-info-circle"></span>
投稿タイプpostのアクセス履歴をリセットします。
</p>
</td>
</tr>
<?php
$html = ob_get_clean();
?>
<script>
jQuery(function ($) {
$('#speed-up .form-table tbody').append(<?php echo wp_json_encode($html); ?>);
});
</script>
<?php
}
endif;
// 管理画面からの設定データ更新
add_action('admin_init', function () {
if ($_SERVER['REQUEST_METHOD'] !== 'POST' || !isset($_POST['clear_access'])) {
return;
}
// nonceチェック
if (!isset($_POST['clear_access_nonce']) || !wp_verify_nonce(wp_unslash($_POST['clear_access_nonce']), 'clear_access_action')) {
return;
}
// 権限チェック
if (!current_user_can('manage_options')) {
wp_die('この操作を行う権限がありません。');
}
global $wpdb;
$table = ACCESSES_TABLE_NAME;
// アクセス履歴を削除
$wpdb->delete($table, ['post_type' => 'post'], ['%s']);
$redirect_url = admin_url('admin.php?page=theme-access&view=settings');
wp_safe_redirect(add_query_arg('clear_access_done', '1', $redirect_url));
exit;
});
// 通知メッセージを出力
add_action('admin_notices', function () {
if (isset($_GET['clear_access_done']) && $_GET['clear_access_done'] === '1') {
echo '<div class="notice notice-success is-dismissible"><p>アクセス履歴をリセットしました。</p></div>';
}
});
参考:プラグイン「WP-DBManager」を用いた手順

以下の手順でアクセス集計をクリアします(2024年10月30日時点)。
- データベース→テーブルを空にする/ドロップするを選択します。
wp_cocoon_accessesテーブルの空を選択します。- 空にする/ドロップをクリックします。
さいごに
今回紹介した方法を使えば、投稿一覧にPV数をクリアするボタンを簡単に追加できます。
これにより、個別にアクセス数のリセットが可能になります。


