안녕하세요.
워드프레스 초보가 몇개월째 혼자 끙끙대며 뭘 좀 만들어보려고 하는데, 또 오류가 생기네요.
커스텀 포스트타입으로 book을 만들었고 여기 book post 들은 메타데이터를 입력받습니다. 그래서,
아래와 같이, book post를 업데이트 할 때, 메타데이터를 저장하는 Hook을 걸어놨습니다.
function rnm_save_book_post( $post_id, $post, $update ){
if(!$update){ return; }
$book_date_default = sanitize_text_field($_POST['rnm_book_date']);
update_post_meta( $post_id, 'book_date', $book_date_default );
}
add_action( 'save_post_book', 'rnm_save_book_post', 10, 3);
본래의 목적에 맞게는 동작하는데, 문제는,
admin에서 book post를 삭제(move to trash)했을때, 위의 hook이 걸려서 함수가 실행됩니다.
그래서,
$book_date_default = sanitize_text_field($_POST['rnm_book_date']);
에 쓰인 변수가 읽혀 undefine 오류가 뜨네요.
삭제 시에는 위 함수 또는 hook 이 걸리지 않도록 하면 될 것 같기도 한데..
조언을 부탁드려도 될까요?ㅠ
감사합니다.
안녕하세요~^^
$_POST 혹은 $_GET 변수를 읽고 사용할 땐 PHP의 isset() 함수를 사용해보세요~
아래 코드를 참고해주세요.
$book_date_default = isset($_POST['rnm_book_date']) ? sanitize_text_field($_POST['rnm_book_date']) : '';
update_post_meta($post_id, 'book_date', $book_date_default);
값이 있을 때만 meta 값을 업데이트 하시려면 아래 처럼 해보세요.
$book_date_default = isset($_POST['rnm_book_date']) ? sanitize_text_field($_POST['rnm_book_date']) : '';
if($book_date_default){
update_post_meta($post_id, 'book_date', $book_date_default);
}
두 코드는 결과가 많이 바뀔 수 있기 때문에 실제로 테스트는 많이 해보셔야 합니다.
고맙습니다.
isset으로 해결되는군요. 감사합니다.
즐거운 하루 되세요. ^^