1

好的,所以我在 PHP 方面有点新手,但这就是我想要实现的目标。

我想将 Wordpress 网站的主题从使用插件对帖子(WP-Ratings)进行评级的主题更改为内置评级的新主题。新主题将评级存储为元数据,我已经设法编写一个查询,从 wp_ratings 表中获取评级并将其转换为必要的元数据。我想做的是将此查询存储在当前评级插件中,以便在对帖子进行评级时存储我们迁移到新主题时所需的元数据。就像我说的那样,我是 PHP 的新手,但可以使用 SQL,所以有人可以告诉我如何对 Wordpress 数据库运行以下查询。

谢谢!

SET @post_id = 1110;
SET SESSION group_concat_max_len = 1000000;

insert into wp_postmeta (post_id,meta_key,meta_value)
  SELECT
    rating_postid
    ,'like'
    ,CONCAT
      ('a:', COUNT(rating_id), ':{',
        (SELECT CONCAT( GROUP_CONCAT(meta_data_vote SEPARATOR ''), '}') 
         FROM
          (SELECT CONCAT
            ('i:',
             @curRow := @curRow + 1,
             ';a:2:{s:7:"',
             'user_id',
             '";s:1:"0";s:2:"ip";s:16:"',
             '-127-000-000-001',
             '";}'
            ) AS meta_data_vote
           FROM wp_ratings JOIN
             (SELECT @curRow := -1 AS j) r
              WHERE rating_postid = @post_id
                and rating_rating > 0
             )AS meta_data_votes
          )
      ) AS new_ratings_meta_data
  FROM wp_ratings l
  WHERE rating_postid = @post_id
    and rating_rating > 0

请注意,帖子 ID 变量应该等于被评分的帖子 ID,我相信它是 PHP for Wordpress 中的 $post_id。

4

1 回答 1

2

您想使用wpdb. 它是 PHP 的mysql(是的,mysql)函数的一个非常简单的包装器。

$results = $wpdb->query($your_complicated query); // Congrats on actually knowing how to write SQL :)

您可以将任何有效的 SQL 提供给该方法,它应该像任何查询一样工作,但您不能“堆叠”查询。mysql并且PDO确实允许堆叠查询(尽管我不是他们的粉丝,偏执和所有),但是,如前所述,wpdb仍然使用mysql函数。

您还应该将硬编码的 WordPress 表名替换为$wpdb等效项。例如,而不是wp_posts使用$wpdb->posts. 原因是wp_前缀是可变的。这是默认设置,非常常见,但可以更改,并且很容易更改。这只是对wp-config.php.

于 2013-03-02T15:00:49.757 回答