게시물 데이터를 저장하기 전에 어떻게 편집 할 수 있습니까?


19

플러그인이 있으며 데이터베이스에 저장하기 전에 일부 필터를 통해 게시물 내용을 실행할 수 있기를 원합니다. 상기 찾고에서 플러그인 API를 , 나는 모습들이 도움이 될 것 같은 것을 두 개의 후크를 참조하십시오

save_post
wp_insert_post

유일한 문제는 save_post변수를 반환 할 필요가없는 것처럼 보이 므로 내용을 필터링하는 방법을 모르고 wp_insert_post문서화 된 것처럼 보입니다.

나는 이런 식으로하고 싶다 :

add_action('whatever_hook_name','my_function');

function my_function($post_content){
    return $post_content.' <br> This post was saved on '.time();
}

타임 스탬프를 추가하는 것보다, 즉 일부 정규식 필터를 실행하는 것보다 더 유용한 것을 할 것입니다. 그러나 이것은 내가 추가하려는 일반적인 유형의 필터 / 액션입니다.

최신 정보

게시물에 표시 될 때가 아니라 데이터베이스에 저장되는 방식으로 데이터를 가로 채고 싶습니다 (예 :에 필터를 추가하지 않음 the_content)


참고 : 디자인이 잘못되었습니다 :-) 1. 게시물을 저장할 때마다이 문자열이 추가됩니다. 이전 하나를 삭제하지 않는 경우에 (, 당신은 많은의 "의 얻을 This post was..."등이 하나 :-) BTW 게시물의 메타 값으로 저장한다 2. 데이터이야 save_post라고 한 후 , 따라서 데이터가 저장되었다가 후에 그 데이터베이스에 저장되었습니다 (원하는 것이 아님).
jave.web

답변:


29

wp_insert_post_data 필터는 작업을 수행 할 수 있습니다

add_filter( 'wp_insert_post_data' , 'filter_post_data' , '99', 2 );

function filter_post_data( $data , $postarr ) {
    // Change post title
    $data['post_title'] .= '_suffix';
    return $data;
}

2
감사합니다, 올바른 방향으로 나아갔습니다. 나는 당신이 실제로 add_action대신 사용해야한다고 생각합니다 add_filter. 또한 당신 wpse35931_filter_post_datafilter_handler일치하지 않는 ...
cwd

1
그것은이다 확실히 필터. 필터와 동작은 일부 크로스 오버를 허용하는 동일한 기능을 기반으로합니다. 그러나이를 조치로 사용 하면 전체 포인트를 제거하는 데이터를 리턴 할 수 없습니다 . 데이터를 필터링 한 후 리턴하려고합니다.
Jake

2
wp_insert_post_data작동하지만 OP (및 다른 사람들)가 달성하고자하는 것에 비해 다소 압도적입니다. 이 상황에서 더 간단한 옵션은 content_save_pre@drzaus 가 권장하는 것입니다.
rinogo

1
wp_insert_post_data필터 개발자 문서 : developer.wordpress.org/reference/hooks/wp_insert_post_data
jave.web

a) 게시물이 가능한 모든 방법으로 저장 될 때마다 (예 : 프론트 엔드를 통해, 프론트 엔드를 통해) a) a) 수동으로 wp_insert_post ()를 호출하여 (예 : 게시물 삽입 / 업데이트를위한 테마의 functions.php) b , 어떻게 든 다른 ...)?
Vadim H


2

후크를 확인할 수도 있습니다 pre_post_update

add_action('pre_post_update', 'before_data_is_saved_function');

function before_data_is_saved_function($post_id) {

}

1

교체 활성 테마에 다음 코드를 추가 <shell>[shell]저장하기 전에 :

 add_filter('content_save_pre', 'my_sanitize_content', 10, 1);
 function my_sanitize_content($value) {
   return str_replace('<shell>', '[shell]', $value);
 }

0

모든 게시물 끝에 비슷한 것을 추가하려면 the_content필터 를 사용하는 것이 좋습니다 .

function append_to_content( $content ) {
    global $post;
    return $content.'<br />This post was saved on '.$post->post_date;
}
add_filter( 'the_content', 'append_to_content' );

감사하지만 실제로 데이터베이스에 저장하기 전에 데이터를 편집하고 싶습니다.
cwd
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.