WordPressサイトの運営で「記事が読まれるたびに投稿者へポイントを付与したい」と考えたことはありませんか?
コミュニティ活性化や投稿者のモチベーションアップに効果的なこの仕組みは、myCred(マイ・クレッド)というプラグインを使うことで実現できます。ただし、標準機能だけでは難しい部分もあり、カスタマイズが必要です。
この記事では、myCredの基本機能から、実際に「記事閲覧時に投稿者へポイントを付与する」ための具体的なカスタマイズ方法まで、初心者にもわかりやすく丁寧に解説します。
「同じユーザー(またはIP)からの複数回閲覧はカウントしない」など、よくある要望への対応方法も紹介しますので、ぜひ参考にしてください。
myCredとは?WordPressで人気のポイントシステム
myCredは、WordPressサイトにポイント・バッジ・ランクなどの報酬システムを導入できるプラグインです。
コミュニティサイト、eラーニング、ECサイト、会員制サイトなど、ユーザーのアクションを促進したい場面で幅広く活用されています。
主な機能
- ポイント付与
投稿、コメント、ログイン、商品購入など、さまざまなアクションに対して自動的にポイントを付与できます。 - ポイントの減算
投稿の削除やルール違反など、特定の行動でポイントを減らすことも可能です。 - ポイントの交換
貯めたポイントを商品や特典、割引クーポンなどと交換できる仕組みを作れます。 - バッジ・ランク機能
一定の条件を満たしたユーザーにバッジやランクを付与し、モチベーションを高めます。 - ショートコード・ウィジェット
ポイント残高の表示やランキングなどを簡単にサイト内に表示できます。 - アドオンによる拡張
WooCommerceやBuddyPressなど、他のプラグインと連携するアドオンが豊富に用意されています。
代表的な利用例
- コミュニティサイトでのユーザー活性化
- eラーニングサイトでの学習進捗管理
- ECサイトでのリワードプログラム
- 会員制サイトでの特典付与
注意点
- 基本機能は無料ですが、高度な機能や連携には有料アドオンが必要な場合があります。
- ポイントの管理や不正対策も考慮する必要があります。
「記事閲覧時に投稿者へポイント付与」はmyCred標準機能でできる?
結論から言うと、myCredの標準機能だけでは「記事が閲覧されたときに、その投稿者へポイントを付与する」ことはできません。
myCredは「ユーザーのアクション(例:自分が投稿した、コメントした、ログインした)」に対してポイントを付与する設計が基本です。
標準機能の限界
- 「記事が閲覧された」というイベント自体をトリガーにできない
- 「閲覧した人」ではなく「投稿者」にポイントを付与する仕組みがない
このため、カスタムコード(PHPカスタマイズ)による実装が必要となります。
カスタマイズで「記事閲覧時に投稿者へポイント付与」を実現する方法
ここからは、実際にWordPressのfunctions.phpなどに追加することで、「記事が閲覧されたときに投稿者へポイントを付与する」カスタマイズ方法を解説します。
基本の実装例
以下のコードを、テーマのfunctions.php
やカスタムプラグインに追加してください。
add_action('wp', function() {
if (is_singular('post')) { // 投稿ページの場合
global $post;
if (!$post) return;
$author_id = $post->post_author;
// ポイント付与(例:1ポイント)
if (function_exists('mycred_add')) {
mycred_add(
'viewed_post', // ログ名(任意)
$author_id, // ポイント付与先(投稿者)
1, // 付与ポイント数
'記事が閲覧されました', // ログの説明
$post->ID // 参照ID
);
}
}
});
ポイント
is_singular('post')
の部分を変更すれば、カスタム投稿タイプや固定ページにも対応可能です。- ポイント数やログ名は自由に変更できます。
注意点
このままでは、同じユーザーが何度もリロードしたり再訪問したりするたびにポイントが加算されてしまいます。
不正なポイント稼ぎを防ぐためには、「同じユーザー(またはIP)からの複数回閲覧はカウントしない」制御が必要です。
「同じユーザー(またはIP)からの複数回閲覧はカウントしない」制御方法
Cookieを使った重複防止
もっとも簡単な方法は、Cookieを使って「同じブラウザからは1記事につき1回だけポイント付与」することです。
サンプルコード
add_action('wp', function() {
if (is_singular('post')) {
global $post;
if (!$post) return;
$author_id = $post->post_author;
$post_id = $post->ID;
// Cookie名を作成(例: viewed_post_123)
$cookie_name = 'viewed_post_' . $post_id;
// すでにCookieがあれば何もしない
if (isset($_COOKIE[$cookie_name])) return;
// ポイント付与
if (function_exists('mycred_add')) {
mycred_add(
'viewed_post',
$author_id,
1,
'記事が閲覧されました',
$post_id
);
}
// Cookieをセット(有効期限:30日)
setcookie($cookie_name, '1', time() + 60 * 60 * 24 * 30, COOKIEPATH, COOKIE_DOMAIN);
}
});
動作イメージ
- 同じブラウザ・同じ記事なら1回だけポイント付与
- 同じブラウザでも別の記事なら、それぞれ1回ずつポイント付与
- IPアドレスは関係ありません(Cookieベースのため)
メリット・デメリット
メリット | デメリット |
---|---|
実装が簡単 | Cookieを削除したり、別ブラウザ・端末からアクセスすれば再度ポイント付与される |
サーバー負荷が少ない | 完全な不正防止にはならない |
IPアドレスを使った重複防止
より厳密に制御したい場合は、IPアドレスを使って「同じIPから同じ記事は1回だけポイント付与」する方法もあります。
実装の流れ
- 投稿IDとIPアドレスの組み合わせをデータベースや一時ファイルに保存
- すでに記録があればポイント付与しない
注意点
- プライバシーや法的な観点から、IPアドレスの取り扱いには注意が必要です。
- 共有IP環境(会社・学校・カフェなど)では、複数人が同じIPを使うため、意図しない制限がかかる場合があります。
サンプルコード(ご希望があれば個別にご案内します)
よくあるカスタマイズ要望と対応例
Q1. 投稿タイプを限定したい
is_singular('post')
の部分をis_singular('custom_post_type')
などに変更すれば、特定の投稿タイプだけを対象にできます。
Q2. ポイント数を変えたい
mycred_add
の第3引数(例:1)を変更すれば、付与するポイント数を自由に設定できます。
Q3. ログ名や説明をカスタマイズしたい
mycred_add
の第1・第4引数を変更すれば、管理画面のログ表示もわかりやすくなります。
Q4. 1日1回だけ付与したい
Cookieの有効期限を1日に設定する、またはデータベースで日付ごとに記録するなどの工夫が必要です。
実装時の注意点と運用アドバイス
- テスト環境で十分に動作確認を行いましょう。
- ポイントの不正取得対策は万全に。
CookieやIPだけでは完全な防止は難しいため、必要に応じて追加の制御や監視を検討しましょう。 - myCredのアップデートや他プラグインとの競合にも注意。
カスタムコードはmyCredやWordPress本体のアップデートで動作しなくなる場合があります。定期的なメンテナンスが大切です。
まとめ
myCredはWordPressでポイントシステムを構築できる強力なプラグインですが、「記事閲覧時に投稿者へポイント付与」という仕組みは標準機能だけでは実現できません。
しかし、カスタムコードを追加することで、投稿者のモチベーションアップやサイトの活性化に役立つ独自のリワードシステムを簡単に導入できます。
- CookieやIPアドレスを使った重複防止も可能
- 要件に合わせて柔軟にカスタマイズできる
- 不正対策や運用面の工夫も忘れずに
「もっと細かい制御をしたい」「特定の条件でポイント付与したい」など、さらに高度なカスタマイズも可能です。
ご不明点やご要望があれば、ぜひコメントやお問い合わせフォームからご相談ください。
コメント