MENU

my-forum-plugin

my-forum-plugin.php

<?php
/*
Plugin Name: My Forum Plugin
Description: A custom forum plugin for WordPress.
Version: 1.0
Author: Your Name
*/

if (!defined('ABSPATH')) {
    exit;
}

require_once plugin_dir_path(__FILE__) . 'includes/database.php';
require_once plugin_dir_path(__FILE__) . 'includes/thread-functions.php';
require_once plugin_dir_path(__FILE__) . 'includes/admin-settings.php';

register_activation_hook(__FILE__, 'my_forum_install');

add_action('wp_enqueue_scripts', 'forum_enqueue_scripts');
function forum_enqueue_scripts() {
    wp_enqueue_script('jquery', false, [], false, true); // jQueryをフッターで確実に読み込み
    wp_enqueue_script('forum-ajax', plugin_dir_url(__FILE__) . 'assets/js/forum-ajax.js', ['jquery'], '1.0', true);
    wp_localize_script('forum-ajax', 'forumAjax', ['ajax_url' => admin_url('admin-ajax.php')]);
}

add_action('wp_ajax_add_like', 'add_like_callback');
function add_like_callback() {
    if (!is_user_logged_in()) {
        wp_send_json_error(['message' => 'ログインしてください']);
    }

    $post_id = intval($_POST['post_id']);
    $user_id = get_current_user_id();
    global $wpdb;

    $post = $wpdb->get_row("SELECT * FROM {$wpdb->prefix}forum_posts WHERE id = $post_id");
    if (!$post) {
        wp_send_json_error(['message' => '投稿が見つかりません']);
    }

    $liked = $wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->prefix}forum_likes WHERE user_id = $user_id AND post_id = $post_id");
    if ($liked) {
        $wpdb->delete("{$wpdb->prefix}forum_likes", ['user_id' => $user_id, 'post_id' => $post_id]);
        $wpdb->query("UPDATE {$wpdb->prefix}forum_posts SET likes = likes - 1 WHERE id = $post_id");
        $points_per_like = get_option('points_per_like', 1);
        $wpdb->query("UPDATE {$wpdb->prefix}forum_points SET points = points - $points_per_like WHERE user_id = {$post->author_id}");
        update_user_title($post->author_id);
        wp_send_json_success(['likes' => $post->likes - 1, 'liked' => false]);
    } else {
        $wpdb->insert("{$wpdb->prefix}forum_likes", ['user_id' => $user_id, 'post_id' => $post_id]);
        $wpdb->query("UPDATE {$wpdb->prefix}forum_posts SET likes = likes + 1 WHERE id = $post_id");
        $points_per_like = get_option('points_per_like', 1);
        $wpdb->query("INSERT INTO {$wpdb->prefix}forum_points (user_id, points) VALUES ({$post->author_id}, $points_per_like) ON DUPLICATE KEY UPDATE points = points + $points_per_like");
        update_user_title($post->author_id);
        wp_send_json_success(['likes' => $post->likes + 1, 'liked' => true]);
    }
}

function update_user_title($user_id) {
    global $wpdb;
    $points = $wpdb->get_var("SELECT points FROM {$wpdb->prefix}forum_points WHERE user_id = $user_id");
    $titles = get_option('forum_titles', [
        ['points' => 0, 'title' => '初心者'],
        ['points' => 20, 'title' => '中級者'],
        ['points' => 50, 'title' => '上級者'],
        ['points' => 100, 'title' => 'フォーラムマスター']
    ]);
    $title = '初心者';
    foreach (array_reverse($titles) as $t) {
        if ($points >= $t['points']) {
            $title = $t['title'];
            break;
        }
    }
    $wpdb->update("{$wpdb->prefix}forum_points", ['title' => $title], ['user_id' => $user_id]);
}

add_shortcode('my_forum', 'display_my_forum');
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする


目次