이라는 사용자 정의 파일이 xxxx_url
있습니다. xxxx_url
고유해야합니다.
게시물을 게시하기 전에 xxxx_url
고유 한지 확인하고 싶 습니까? 고유하지 않은 경우 게시물 게시가 거부되어야합니다.
나는 노력했다 publish_post
. 그러나 게시물을 게시 할 때 트리거되기 때문에 올바른 것은 아닙니다. 게시 직전에 코드를 실행하고 싶습니다.
이라는 사용자 정의 파일이 xxxx_url
있습니다. xxxx_url
고유해야합니다.
게시물을 게시하기 전에 xxxx_url
고유 한지 확인하고 싶 습니까? 고유하지 않은 경우 게시물 게시가 거부되어야합니다.
나는 노력했다 publish_post
. 그러나 게시물을 게시 할 때 트리거되기 때문에 올바른 것은 아닙니다. 게시 직전에 코드를 실행하고 싶습니다.
답변:
시작 부분에 wp_insert_post
게시물을 저장 / 업데이트하는 기능인이라는 필터가 wp_insert_post_empty_content
있습니다. 기본적으로이 필터는 제목, 편집기 및 발췌 필드가 모두 비어 있는지 확인합니다.이 경우 저장 프로세스가 중지됩니다.
그러나 저장할 모든 필드가이 필터로 전달되므로이 필터를 확장하여 게시물을 비워야하는지 여부를 결정하는 다른 테스트를 포함 할 수 있습니다. 다음과 같습니다.
add_filter ('wp_insert_post_empty_content','wpse312975_check_unique_url',10,2);
function wpse312975_check_unique_url ($maybe_empty, $postarr) {
// extract custom field from $postarr, check uniqueness
if ($unique) return false else return true;
}
참고 : 저장 프로세스를 중단하려면 함수가 'true'를 반환해야합니다.
사용자 정의 필드가 고유하지 않은 경우 경고를 표시 할 수도 있습니다.
wp_insert_post_empty_content
의미 적 으로 게시하는 것을 게시하지 않기로 결정했습니다 . 그 말에도 불구하고, 나는 이것의 의미 론적으로 올바른 후크를 찾지 못했습니다.
wp_insert_post_valid_content
그 이름 을 나타 내기 위해 이름 을 지정해야 하지만 나머지는 정확히 올바른 위치에 있습니다.
wp_insert_post_empty_content
필터 를 찾았 어 ?
게시를 위해 게시물을 제출하기 전에 AJAX를 사용하여 고유성을 확인하는 것은 어떻습니까?
$( '#post' ).on( 'submit', function( event ) {
event.preventDefault(); // Prevent publishing
//Now do some AJAX Checks
$.post( ajaxurl, data, function(response) {
if ( response === 'success' ) {
$( this ).off( event ).submit();
} else {
alert( 'The custom field must be unique' );
}
});
});
코드는 테스트되지 않았지만 작동해야합니다. 원하는 결과를 얻기 위해 게임을해야 할 수도 있습니다.
wp_insert_post_data 필터에 연결 하고 게시물 삽입을 차단하고 싶지 않다는 것을 이해하기 때문에 중복 메타 값으로 게시물을 게시하지 않기를 원하기 때문에 가능한 한 덜 방해가됩니다.
코드를 공유하지 않았기 때문에이 경우 너무 많이 절약 할 수 없지만 다음은 작동하는 필터의 의사 코드입니다.
function wp8193131_check_if_meta_value_is_unique ( $data, $postarr ) {
// setup an uniqueness flag.
$meta_is_unique = true;
// check if the meta is unique and modify the `$meta_is_unique` flag accordingly.
// {...} <- your code
// if the meta is NOT unique keep the post status in draft.
if ( ! $meta_is_unique ) {
// you can force the current post to be draft until the meta value will became unique.
$data['post_status'] = 'draft';
// maybe, update the meta value with a hint of the fact that it's not unique.
// or display a dashboard notice about it.
}
return $data;
}
add_filter( 'wp_insert_post_data', 'wp8193131_check_if_meta_value_is_unique' );
이 필터의 또 다른 장점은 첨부 파일 one과 분리되어 있다는 것 wp_insert_attachment_data
입니다.
도움이 되었기를 바랍니다.
$data['post_status']
이다 publish
와 사용자가이를 업데이트하고? 게시물 을 해당 게시물 draft
의 404
이슈 로 만들지 않습니까?
확인은로 이동해야합니다 wp_insert_post
. 이 후크는 게시물이 게시되거나 편집 될 때마다 시작됩니다.
여기에서 xxxx_url
값 이 같은 게시물이 있는지 확인하기 위해 사용자 지정 쿼리를 수행 할 수 있습니다 .
add_action('wp_insert_post', function($post_id) {
$meta_key = 'xxxx_url';
$meta_value = get_post_meta($post_id, $meta_key, true);
$query = new WP_Query([
'post_type' => get_post_type($post_id), // This might be unnecessary, if you check `post` post type only. Or use `any`.
'meta_query' => [
[
'meta_key' => $meta_key,
'meta_value' => $meta_value,
]
]
]);
if ($query->have_posts()) {
// invalid key, post with the same value already exists
} else {
// valid, key was not found anywhere
}
});
wp_insert_post
게시물이 저장되면 액션이 실행 된 후 if / else 명세서 게시물에 작성한 내용이 게시되므로 게시 또는 게시물 삽입을 차단할 수 없습니다.
If it isn't unique it should reject publishing post.
내 질문에 그것을 분명히 언급 했다.
132_url
어디에 있습니까132
? 당신은 항상 여기에서 독특한 가치를 가지고 있습니다. 그 외에도 : 사용자 정의 필드는save_post
작업에 저장해야합니다 . 이 작업에서 사용자 정의 필드 (예 : 비어 있지 않고 고유 한 값이있는 경우)를 확인하고이를 기반으로 확인할 수update_post_meta
있습니다. 사용자 정의 필드를 확인하고 고유 한 값이 없으면post-status
todraft
또는 다른 것을 설정하여 게시를 비활성화 할 수 있다고 생각합니다 . 그렇지 않으면 jQuery가 필요하다고 생각합니다.