답변해주신 것을 참고하였습니다
https://www.cosmosfarm.com/threads/document/24517
제가 미디어 파일을 올린 뒤에 다른 테이블에 미디어 파일을 올린 경로를 update문으로 날려서 수정하려고 합니다.
우선 경로를 가져오기 위해서 select 문으로 올린 아이디를 조건문으로 한 뒤에 가장 최신에 쓴 글을 가져와서
guid(경로값)을 가져와서 user_id를 다른 테이블의 id랑 비교하여 같으면 그걸 바꾸는 쿼리인데 오류가 생깁니다
코드를 올려야 할 경우 '코드 스니펫 삽입' 기능을 사용해달라고 하셨는데 이걸 어떻게 사용하는지 몰라서
이번에 이렇게 올렸습니다. 죄송합니다
add_action('add_attachment', 'attachment_manipulation');
function attachment_manipulation($id){
if(is_user_logged_in()){
$sql = "SELECT guid FROM wp_posts WHERE post_author=".$id." ORDER BY post_date ASC LIMIT 1";
$arr_rs = $wpdb->get_row(esc_sql($sql),ARRAY_N);
$guid = "";
foreach($arr_rs as $r){
$guid = $r[0];
}
$wpdb->update('wp_subscription_business',array('guid' => $guid),array( 'user_id', $id),array( '%s'),array( '%d'));
}
}
안녕하세요.
해당 테이블에 user_id 컬럼과 값이 있는지요?
wp_subscription_business 테이블에 변경할 데이터들이 이미 있는지요?
예를 들어서 업로드하는 회원 id가 '1'이라면 wp_subscription_business 테이블에서도
회원 id가 '1'인 데이터가 있어야 값이 수정됩니다.
그게 아니라면 별도로 체크를 해서 테이블에 회원의 id가 없을 때
데이터를 추가해서 저장하고 있다면 수정하는 쿼리를 보내주셔야 할 듯합니다.
아래의 코드를 활용해보시겠어요?
add_action('add_attachment', 'attachment_manipulation');
function attachment_manipulation($id){
global $wpdb;
$user_id = get_current_user_id();
if(is_user_logged_in()){
$sql = "SELECT guid FROM wp_posts WHERE post_author=".$user_id." ORDER BY post_date DESC LIMIT 1";
$arr_rs = $wpdb->get_row(esc_sql($sql));
$guid = $arr_rs->guid;
$count = $wpdb->get_var("SELECT COUNT(*) FROM `{$wpdb->prefix}subscription_business` WHERE `user_id`={$user_id}");
if($count){
$wpdb->update("{$wpdb->prefix}subscription_business", array('guid' => $guid), array('user_id' => $user_id), array('%s', '%d'));
}
else{
$wpdb->insert("{$wpdb->prefix}subscription_business",array('guid' => $guid, 'user_id'=> $user_id), array('%s', '%d'));
}
}
}
고맙습니다.
네 페이지에 경로가 그대로 뜹니다.
현재 테이블(wp_subscription_business)은 있고 guid 칼럼 값은 null 입니다
null -> 'http://localhost:8080/wordpress/~.png' 이런 식으로 교체하려고 하는건데
혹시 null이라서 update 문이 안된다는 건 아니겠죠?
아니라면 DB 구조가 잘못 되어있는건가요?
테이블에서 guid의 값은 이렇습니다
table명 : wp_subscription_business
Name : guid
type : varcher(255)
Defult : none
Collation : utf8_general_ci
입니다
wp_subscription_business 테이블이 실제로 있고 테이블 안에 값이 있는지요?
아래의 코드로 적용하신 후에 업로드 시에 이미지 경로가 페이지에 표시되는지 확인해보시겠어요?
add_action('add_attachment', 'attachment_manipulation');
function attachment_manipulation($id){
global $wpdb;
$user_id = get_current_user_id();
if(is_user_logged_in()){
$sql = "SELECT guid FROM wp_posts WHERE post_author=".$user_id." ORDER BY post_date DESC LIMIT 1";
$arr_rs = $wpdb->get_row(esc_sql($sql));
$guid = $arr_rs->guid;
print_r($guid); exit;
$wpdb->update('wp_subscription_business',array('guid' => $guid),array('user_id', $user_id), array('%s'), array('%d'));
}
}
고맙습니다.
이 코드가 맞는 코드일까요?
add_action('add_attachment', 'attachment_manipulation');
function attachment_manipulation(){
global $wpdb;
$id = get_current_user_id();
if(is_user_logged_in()){
$sql = "SELECT guid FROM wp_posts WHERE post_author=".$id." ORDER BY post_date DESC LIMIT 1";
$arr_rs = $wpdb->get_row(esc_sql($sql),ARRAY_N);
$guid = $arr_rs;
$wpdb->update('wp_subscription_business',array('guid' => $guid),array('user_id', $id), array('%s'), array('%d'));
}
}
미디어 라이브러리에 현재 사용자가 이미지 업로드 하고 그 경로를 가져와서 다른 DB에 넣는것 뿐인데
작동이 안되네요. wp_posts에는 다 들어가는게 확인이 되는데 다른 DB에는 안 들어가니깐 답답하네요
알고리즘이 잘못 되어있어서 그런걸까요?
$id 값은 wp_posts 테이블에서 ID컬럼입니다.
현재 로그인된 사용자의 id를 가져오시려면
get_current_user_id() 함수로 가져오실 수 있습니다.
고맙습니다.
코드 감사합니다
추가적으로 질문할게 있는데요
함수에서 받은 매개변수 ($id) <= 이 변수가 뭔지 알고 싶습니다
저는 사용자의 wp_users 테이블의 ID 칼럼 값으로 알고 있는데 ID칼럼 값이 아닌 user_login 칼럼 값인가요?
ID 칼럼 값이면 업데이트가 맞게끔 작동이 되어야하는데 작동이 안되서 난감해서 추가적으로 질문드립니다
안녕하세요~^^
워드프레스에서 테마의 functions.php 파일이나 다른 곳에서
$wpdb를 사용하시려면 global $wpdb; 코드를 추가해주셔야 합니다.
아래의 코드를 활용해보시겠어요?
add_action('add_attachment', 'attachment_manipulation');
function attachment_manipulation($id){
global $wpdb;
if(is_user_logged_in()){
$sql = "SELECT guid FROM wp_posts WHERE post_author=".$id." ORDER BY post_date ASC LIMIT 1";
$arr_rs = $wpdb->get_row(esc_sql($sql),ARRAY_N);
$guid = $arr_rs;
$wpdb->update('wp_subscription_business',array('guid' => $guid),array( 'user_id', $id),array( '%s'),array( '%d'));
}
}
고맙습니다.