2013-03-01 2 views
1

좋아요, 그래서 저는 PHP에 관해서는 약간 초보자지만, 여기서는 제가 달성하기를 원합니다.기존 Wordpress Plugin에서 사용자 정의 SQL 실행

플러그인을 사용하여 게시물 (WP 등급)을 등급 지정 기능이있는 새 테마로 평가하는 Wordpress 사이트 테마를 변경하고 싶습니다. 새 테마는 등급을 메타 데이터로 저장하고, 필자는 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라고 생각하십시오.

+0

시도한 내용과 그 오류에 대해 자세히 설명해주십시오. 나는 당신의 SQL을 형식화하고 과정에서 눈을 뜨지 않았다. :) 순간적으로 나는 여분이 있다고 의심한다. 그러나 나는 휴식을 취하고 꼭 다시 와야한다. LOL –

답변

1

wpdb을 사용하려고합니다. PHP의 mysql (예, mysql) 함수를 감싸는 아주 간단한 래퍼입니다.

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

모든 유효한 SQL을 해당 메타 노드에 공급할 수 있으며 모든 쿼리와 동일하게 작동하지만 쿼리를 "스택"할 수는 없습니다. mysqlPDO은 누적 된 쿼리를 허용합니다 (비록 내가 실제로 편집자가 아니며 모두 편집증을 썼지 만). wpdb은 여전히 ​​mysql 함수를 사용합니다.

또한 하드 코딩 된 WordPress 테이블 이름을 $wpdb 개로 대체해야합니다. 예를 들어, wp_posts 대신 $wpdb->posts을 사용하십시오. 그 이유는 wp_ 접두사를 바꿀 수 있기 때문입니다. 그것은 기본값이며 매우 일반적이지만 변경할 수 있으며 쉽게 변경할 수 있습니다. 그것은 wp-config.php에 대한 간단한 편집 일뿐입니다.

관련 문제