save_post를 사용하여 게시물 제목 바꾸기


16

맞춤 게시물을 사용하고 있는데 제목이 필요 없습니다.

이로 인해 Wordpress가 내 게시물의 제목을 "자동 초안"으로 설정합니다.

내 게시물의 다른 필드에서 계산 된 제목 값을 다른 것으로 변경하고 싶습니다.

save_post 또는 다른 방법을 사용하여 어떻게합니까?


register_post_type()전화 를 포함하도록 질문을 편집하십시오 .
칩 베넷

정확히 달성하려고 무엇입니까? CPT에 대한 게시물 제목을 원하지 않거나 사용자 정의 필드 값에서 설정하고 싶습니까?
Rutwick Gangurde

1
전혀 원하지 않지만 게시물 목록에서 더 이상 게시물을 편집 할 수 없으므로 제거 할 수 없습니다. 즉, 대신 "가짜"제목을 배치 할 방법이 필요합니다.
Tsahi Levent-Levi

1
따라서 실제로 원하는 것은 게시물 관리 화면을 수정하여 사용자 정의 게시물 유형에 대해 다른 열을 출력하는 것입니까? 그렇다면 더 유리한 질문이 될 수 있습니다. :)
칩 베넷

그것은 일부입니다. 그는 이런 종류의 "충격적인"질문을하는데, 그는 프로젝트의 여러 측면을 제안하는 데 도움이되는 답변을 찾고 있기 때문입니다. 검색, 템플릿 등
e4rthdog

답변:


16

이 가장 간단한 방법은 대신에 데이터를 업데이트하는 대신 삽입 한 시점에서 데이터를 편집하는 wp_insert_post_data것입니다 save_post. 새 게시물을 만들거나 기존 게시물을 변경하지 않고 업데이트합니다. 또한 update_postwithin 내에서 트리거하여 무한 루프를 생성 할 위험을 피합니다 save_post.

add_filter( 'wp_insert_post_data' , 'modify_post_title' , '99', 1 ); // Grabs the inserted post data so you can modify it.

function modify_post_title( $data )
{
  if($data['post_type'] == 'rating' && isset($_POST['rating_date'])) { // If the actual field name of the rating date is different, you'll have to update this.
    $date = date('l, d.m.Y', strtotime($_POST['rating_date']));
    $title = 'TV ratings for ' . $date;
    $data['post_title'] =  $title ; //Updates the post title to your new title.
  }
  return $data; // Returns the modified data.
}

10

나는 똑같은 요구가 있었 으므로이 기능을 작성했습니다. 필요에 따라 수정하십시오. 도움이 되었기를 바랍니다.

// set daily rating title
function set_rating_title ($post_id) {
    if ( $post_id == null || empty($_POST) )
        return;

    if ( !isset( $_POST['post_type'] ) || $_POST['post_type']!='rating' )  
        return; 

    if ( wp_is_post_revision( $post_id ) )
        $post_id = wp_is_post_revision( $post_id );

    global $post;  
    if ( empty( $post ) )
        $post = get_post($post_id);

    if ($_POST['rating_date']!='') {
        global $wpdb;
        $date = date('l, d.m.Y', strtotime($_POST['rating_date']));
        $title = 'TV ratings for ' . $date;
        $where = array( 'ID' => $post_id );
        $wpdb->update( $wpdb->posts, array( 'post_title' => $title ), $where );
    }
}
add_action('save_post', 'set_rating_title', 12 );

2

default_title 필터를 사용해보십시오 .

add_filter( 'default_title', 'my_default_title', 10, 2 );

function my_default_title( $post_title, $post ){

  $custom_post_type = 'my_awesome_cpt';

  // do it only on your custom post type(s)
  if( $post->post_type !== $custom_post_type )
    return $post_title;

  // create your preferred title here
  $post_title = $custom_post_type . date( 'Y-m-d :: H:i:s', time() );

  return $post_title;
}

1
이 솔루션에서는 요청한대로 "내 게시물의 다른 필드에서 계산 된"제목을 만들 수 없습니다. 해당 종류의 모든 게시물에 대해 자동 제목을 생성 할 수 있으면 좋습니다. 그러나 동적 변수에 의존 해야하는 경우 도움이되지 않습니다.
Biranit Goren

1
@Biranit Goren "내 게시물의 다른 필드에서 계산 된"은 무엇을 의미합니까? 에 저장된 게시물 개체에서 어느 필드를 놓치 $post셨습니까? 초기 질문과 아래의 의견을 읽으십시오. 자동 생성 된 포스트 타이틀은 요청 되지 않습니다 . 가짜 포스트 제목 (WordPress "Auto Draft"대체) 만 필요합니다.
Ralf912

2

다음은 정적 변수를 사용하여 무한 루프를 방지하는 솔루션입니다. 이를 통해 wp_update_post()에 연결된 함수 내부 를 안전하게 호출 할 수 있습니다 save_post.

function km_set_title_on_save( $post_id ) {

    // Set this variable to false initially.
    static $updated = false;

    // If title has already been set once, bail.
    if ( $updated ) {
        return;
    }

    // Since we're updating this post's title, set this
    // variable to true to ensure it doesn't happen again.
    $updated = true;

    $date           = get_post_meta( $post_id, 'rating_date', true );
    $date_formatted = date( 'l, d.m.Y', strtotime( $date ) );

    // Update the post's title.
    wp_update_post( [
        'ID'         => $post_id,
        'post_title' => 'TV ratings for ' . $date_formatted,
    ] );
}
add_action( 'save_post', 'km_set_title_on_save' );

참고 :이 기능을 특정 게시물 유형으로 제한하려면 save_post 대신 save_post _ {$ post-> post_type} 후크를 사용하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.