게시물 유형에 사용자 정의 필드를 정의하는 함수가 있습니다. 필드가 "subhead"라고 가정하십시오.
게시물이 저장되면 입력에 대한 유효성 검사를 수행하고 필요한 경우 게시물 편집 화면에 오류 메시지를 표시하려고합니다. 다음과 같은 것 :
// Handle post updating
function wpse_update_post_custom_values($post_id, $post) {
// Do some checking...
if($_POST['subhead'] != 'value i expect') {
// Add an error here
$errors->add('oops', 'There was an error.');
}
return $errors;
}
add_action('save_post','wpse_update_post_custom_values',1,2);
이것을 save_post 액션에 연결하려고하는데 오류를 처리하는 방법을 알 수 없습니다. 함수에 전달 된 오류 객체가없는 것 같습니다. 내 자신의 WP_Error obj를 만들고 반환하면 게시물 편집 페이지에서 오류를 내뿜는 메커니즘이 존중되지 않습니다.
현재 맞춤 메타 상자에 페이지 오류 메시지가 표시되어 있지만 이상적이지는 않습니다. WP가 일반적으로 표시하는 것과 같이 크고 빨간색의 최상위 오류가 발생합니다.
어떤 아이디어?
최신 정보:
@Denis의 답변을 바탕으로 몇 가지 다른 시도를했습니다. Wordpress는 save_post 프로세스 중에 경로 재 지정을 수행하여 전역을 표시하기 전에 오류를 발생시키기 때문에 오류를 전역으로 저장하지 못했습니다.
결국 메타 필드에 저장했습니다. 이것의 문제는 그것들을 지우거나 다른 페이지로 이동할 때 사라지지 않기 때문에 admin_footer에 연결된 다른 함수를 추가하여 오류를 지우는 것입니다.
너무 일반적인 (업데이트 업데이트)에 대한 오류 처리가 어수선하다고 생각하지 않았습니다. 내가 명백한 것을 놓치고 있거나 이것이 최선의 접근법입니까?
// Handle post updating
function wpse_5102_update_post_custom_values($post_id, $post) {
// To keep the errors in
$errors = false;
// Do some validation...
if($_POST['subhead'] != 'value i expect') {
// Add an error here
$errors .= 'whoops...there was an error.';
}
update_option('my_admin_errors', $errors);
return;
}
add_action('save_post','wpse_5102_update_post_custom_values',1,2);
// Display any errors
function wpse_5102_admin_notice_handler() {
$errors = get_option('my_admin_errors');
if($errors) {
echo '<div class="error"><p>' . $errors . '</p></div>';
}
}
add_action( 'admin_notices', 'wpse_5102_admin_notice_handler' );
// Clear any errors
function wpse_5102__clear_errors() {
update_option('my_admin_errors', false);
}
add_action( 'admin_footer', 'wpse_5102_clear_errors' );
update_option('my_admin_errors', false);
끝에 if 문 직후 에 실행하는 것이 약간 더 효율적 wpse_5102_admin_notice_handler()
입니까?
admin_footer
통지 핸들러 함수의 끝에서 오류를 지우면 후크를 제거 할 수 있다고 생각합니다 . 일을 조금만 단순화합니다.