はじめに
Cocoonの「人気記事」機能で、アクセスカウントが正しく反映されないケースがあります。
この記事では、その原因と対処法を紹介します。
原因
Cocoonのアクセス情報は、データベースのwp_cocoon_accessesテーブルに保存されます。
以下のような状態になると、カウントが更新されなくなります。
- idがAUTO_INCREMENTになっていない
- id=0が存在している
通常は発生しませんが、何らかのデータベース操作の影響が考えられます。
対策
phpMyAdminでSQLを実行
参照リンクにも書かれている通り、phpMyAdminにログインして、以下を実行すると改善できます。
SET @n:=0;
UPDATE wp_cocoon_accesses SET id=@n:=@n+1;
ALTER TABLE wp_cocoon_accesses AUTO_INCREMENT = 1;
管理画面ダッシュボード「wp_cocoon_accesses修復」ウィジェット を追加
管理画面ダッシュボードに「wp_cocoon_accesses修復」ウィジェット を追加します。
ウィジェット内のボタンを押すことで、データベースの修復を行うことができます。
直接SQLを実行するのが不安な場合でも、このウィジェットを使えば安全に修復可能です。
完成イメージ

実装手順
以下のコードをfunctions.phpに追記します。
// ダッシュボードウィジェットを追加
add_action('wp_dashboard_setup', function () {
wp_add_dashboard_widget(
'reset-cocoon-ids',
'wp_cocoon_accessess修復',
'render_reset_cocoon_ids'
);
});
/**
* ダッシュボードにウィジェットを出力
*
* @return void
*/
if (!function_exists('render_reset_cocoon_ids')):
function render_reset_cocoon_ids() {
?>
<div class="reset-cocoon-ids">
<form method="post" class="reset-cocoon-ids__form">
<?php wp_nonce_field('reset_cocoon_ids_action', 'reset_cocoon_ids_nonce'); ?>
<input type="hidden" name="reset_cocoon_ids" value="1">
<button type="submit" class="button button-primary reset-cocoon-ids__button">
修復
</button>
</form>
</div>
<?php
}
endif;
// 管理画面からの設定データ更新
add_action('admin_init', function () {
if (!isset($_POST['reset_cocoon_ids'])) {
return;
}
// nonceチェック
if (!isset($_POST['reset_cocoon_ids_nonce']) || !wp_verify_nonce($_POST['reset_cocoon_ids_nonce'], 'reset_cocoon_ids_action')) {
return;
}
// 権限チェック
if (!current_user_can('manage_options')) {
return;
}
global $wpdb;
$table = ACCESSES_TABLE_NAME;
// リセット
$wpdb->query("SET @n:=0");
$wpdb->query("UPDATE {$table} SET id=@n:=@n+1");
$wpdb->query("ALTER TABLE {$table} AUTO_INCREMENT = 1");
set_transient('my_admin_notice', 'wp_cocoon_accessesの修復が完了しました。', 30);
wp_safe_redirect(admin_url('index.php'));
exit;
});
// 通知メッセージを出力
add_action('admin_notices', function () {
if ($notice = get_transient('my_admin_notice')) {
echo '<div class="notice notice-success is-dismissible"><p>' . esc_html($notice) . '</p></div>';
delete_transient('my_admin_notice');
}
});
さいごに
以前、Cocoonのアクセス集計が正しく動作しないとの問い合わせがありました。
当事者は、曖昧な情報しかなく、情報を言語化して、正しく第三者に伝える技術がないと、何も分かりません。
また、対面ではないので実際のデータベースの状態を確認できるわけではありません。
単に「うまくいかない」「昨日は動いていた」とか言われても、その場で見ているわけではありません。
その回答に対して、不満があったようです。
フォーラムは対面ではありません、できるだけ、情報提示を願います。
回答しなくても、私は何も困りませんし、時間を無駄にすることはあっても、得はありません。
それでもと思い有志が時間を割いて回答していることに配慮願います。



