0

私はワードプレス用の gd star rating プラグインを使用しています。この関数を使用して親指データを保存します。

    function add_vote_comment_thumb($id, $user, $ip, $ua, $vote) {
        global $wpdb, $table_prefix;
        $trend_date = date("Y-m-d");
        $sql_trend = sprintf("SELECT count(*) FROM %sgdsr_votes_trend WHERE vote_date = '%s' and vote_type = 'cmmthumb' and id = %s", $table_prefix, $trend_date, $id);
        $trend_data = $wpdb->get_var($sql_trend);

        $trend_added = false;
        if ($trend_data == 0) {
            $trend_added = true;
            if ($user > 0) {
                $sql = sprintf("INSERT INTO %sgdsr_votes_trend (id, vote_type, user_voters, user_votes, vote_date) VALUES (%s, 'cmmthumb', 1, %s, '%s')",
                    $table_prefix, $id, $vote, $trend_date);
                $wpdb->query($sql);
            } else {
                $sql = sprintf("INSERT INTO %sgdsr_votes_trend (id, vote_type, visitor_voters, visitor_votes, vote_date) VALUES (%s, 'cmmthumb', 1, %s, '%s')",
                    $table_prefix, $id, $vote, $trend_date);
                $wpdb->query($sql);
            }
        }

        if ($user > 0) {
            $part = $vote == 1 ? "user_recc_plus = user_recc_plus + 1" : "user_recc_minus = user_recc_minus + 1";

            if (!$trend_added) {
                $sql = sprintf("UPDATE %sgdsr_votes_trend SET user_voters = user_voters + 1, user_votes = user_votes + %s WHERE id = %s and vote_type = 'cmmthumb' and vote_date = '%s'",
                    $table_prefix, $vote, $id, $trend_date);
                $wpdb->query($sql);
            }
        } else {
            $part = $vote == 1 ? "visitor_recc_plus = visitor_recc_plus + 1" : "visitor_recc_minus = visitor_recc_minus + 1";

            if (!$trend_added) {
                $sql = sprintf("UPDATE %sgdsr_votes_trend SET visitor_voters = visitor_voters + 1, visitor_votes = visitor_votes + %s WHERE id = %s and vote_type = 'cmmthumb' and vote_date = '%s'",
                    $table_prefix, $vote, $id, $trend_date);
                $wpdb->query($sql);
            }
        }

        $sql = sprintf("UPDATE %sgdsr_data_comment SET %s, last_voted_recc = CURRENT_TIMESTAMP WHERE comment_id = %s",
            $table_prefix, $part, $id);
        $wpdb->query($sql);

wp_gdsr_dump("SAVE_THUMB_VOTE", $sql);

        $logsql = sprintf("INSERT INTO %sgdsr_votes_log (id, vote_type, user_id, vote, object, voted, ip, user_agent) VALUES (%s, 'cmmthumb', %s, %s, '', '%s', '%s', '%s')",
            $table_prefix, $id, $user, $vote, str_replace("'", "''", current_time('mysql')), $ip, $ua);
        $wpdb->query($logsql);

wp_gdsr_dump("SAVE_THUMB_LOG", $logsql);

    }

このデータは、wordpress db にあるコメント カルマ フィールドにも保存されます。したがって、関数の最後に次を追加します。

//Integrate with comment karma system
    $up_qry = sprintf("SELECT visitor_recc_plus FROM %sgdsr_data_comment WHERE comment_id = %s", $table_prefix, $id);
    $votes_up = $wpdb->get_var($up_qry);
    $down_qry = sprintf("SELECT visitor_recc_minus FROM %sgdsr_data_comment WHERE comment_id = %s", $table_prefix, $id);
    $votes_down = $wpdb->get_var($down_qry);
    $votes = $votes_up - $votes_down;
    $votes_qry = sprintf("UPDATE %scomments SET comment_karma = $votes WHERE comment_ID = %s", $table_prefix, $id);
    $wpdb->query($votes_qry);

ただし、これは、訪問者が評価しているときにのみデータを comment_karma に保存します。ユーザーとしてログインしている場合、データは対応する列に保存されません!

私は何を間違っていますか?

4

1 に答える 1

0

あなたが追加しているコードは、非訪問者からの投票を単に無視しているように思えます。より大きなコード スニペットのコンテキストでそれを見てください。その最初のスニペットにより、次の変更が行われます。

  • ログインユーザーの投票数:増分user_recc_plus
  • ログインしたユーザーの反対票:増分user_recc_minus
  • 訪問者の投票数:増分visitor_recc_plus
  • 訪問者の反対票:増分visitor_recc_minus

2 番目のスニペットは、投票のソースを無視しているようです。のみに従ってカルマ値を設定しますvisitor_recc_plus - visitor_recc_minus

明確な修正を提供するのに十分なコンテキストがありませんが、カルマを相対的な変化 ($votes ではなく $vote) で単純に更新できませんか? もしそうなら、必要なのはこれだけです:

    $votes_qry = sprintf("UPDATE %scomments SET comment_karma = comment_karma + $vote WHERE comment_ID = %s", $table_prefix, $id);
    $wpdb->query($votes_qry);
于 2012-12-18T13:50:55.217 に答える