在预先存在的Wordpress插件中运行自定义SQL

时间:2013-03-01 13:06:45

标签: php sql wordpress plugins metadata

好的,所以我在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,我相信在WordPress的PHP中是$ post_id。

1 个答案:

答案 0 :(得分:1)

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

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

您可以将任何有效的SQL提供给该系统,它应该像任何查询一样工作,但您不能“堆叠”查询。 mysqlPDO允许堆叠查询(虽然我并不是他们的粉丝,是偏执狂的所有人),但是,如上所述wpdb仍然使用mysql函数。

您还应该使用$wpdb等效替换硬编码的WordPress表名。例如,代替wp_posts使用$wpdb->posts。原因是wp_前缀是可更改的。这是默认设置,非常常见但可以更改,并且可以轻松更改。这只是对wp-config.php的简单修改。