CocoonのPV数をSWELLに引き継ぐ方法

Cocoonカスタマイズ集
この記事は約4分で読めます。
記事内に広告が含まれています。

はじめに

以下をCocoonで実現します。

CocoonはPV数をデータベースで管理しているのに対し、SWELLはカスタムフィールドで管理しています。
そのため、CocoonでデータベースからPV数を取得し、SWELL用のカスタムフィールドへ引き継ぐ必要があります。

また、SWELLは「全期間のPV数」」のみを管理する設計です。

そこで管理画面ダッシュボードに 「全期間PV数(Cocoon→SWELL)」ウィジェット を追加します。
Cocoonでウィジェット内のボタンを押すことで、Cocoon→SWELLにPV数を引き継ぎます。

この記事では、この方法について説明します。

完成イメージ

実装手順

以下のコードをfunctions.phpに追加します。

// ダッシュボードウィジェットを追加
add_action('wp_dashboard_setup', function () {
  wp_add_dashboard_widget(
    'sync-post-views',
    '全期間PV数(Cocoon→SWELL)',
    'render_sync_post_views'
  );
});


/**
 * ダッシュボードにウィジェットを出力
 *
 * @return void
 */
if (!function_exists('render_sync_post_views')):
function render_sync_post_views() {
  ?>
  <form method="post">
    <?php wp_nonce_field('sync_post_views_action', 'sync_post_views_nonce'); ?>
    <input type="hidden" name="sync_post_views" value="1">
    <button type="submit" class="button button-primary">PV同期</button>
  </form>
  <?php

  if (!isset($_POST['sync_post_views'])) {
    return;
  }

  // nonceチェック
  check_admin_referer('sync_post_views_action', 'sync_post_views_nonce');

  // 公開済み投稿IDを全件取得
  $posts = get_posts([
    'post_type'      => 'post',
    'posts_per_page' => -1,
    'post_status'    => 'publish',
    'fields'         => 'ids',
  ]);

  foreach ($posts as $post_id) {
    global $post;
    $post = get_post($post_id);
    setup_postdata($post);

    // 全期間PV数を取得
    $views = intval(get_all_pv());

    // PV数をSWELLカスタムフィールドに保存
    update_post_meta($post_id, 'ct_post_views_byloos', $views);
  }

  wp_reset_postdata();

  // 成功通知をTransientに保存
  set_transient('my_admin_notice', 'PV数をカスタムフィールドに同期しました。', 30);

  // ダッシュボードへリダイレクト
  wp_safe_redirect(admin_url('index.php'));
  exit;
}
endif;


// 通知メッセージを出力
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で蓄積したPV数をSWELLへスムーズに引き継ぐことができます。
テーマを変更しても閲覧データを無駄にせず、アクセス解析や関連記事の精度を保てるのは大きなメリットです。
移行作業の一環として取り入れてみてください。

タイトルとURLをコピーしました