web-dev-qa-db-ja.com

ページのコンテンツをタイトルとして自動的に挿入する方法

タイトルフィールドのないカスタム投稿タイプがあります。内容だけが重要な短いステータスメッセージです。 RSSフィードとパーマリンクはタイトルを自動ドラフトとして表示しますが、あまり役に立ちません。理想的には、投稿コンテンツ、または少なくとも最初の10語程度の単語が含まれます。

この機能を試してみましたが、それでも自動ドラフトとして表示されます。

add_filter('title_save_pre', 'save_title');
function save_title($my_post_title) {
        if ($_POST['post_type'] == 'servicestatus') :
          $new_title = wp_trim_words( $_POST['content'], $num_words = 10, $more = null )
          $my_post_title = $new_title;
        endif;
        return $my_post_title;
}

add_filter('name_save_pre', 'save_name');
function save_name($my_post_name) {
        if ($_POST['post_type'] == 'servicestatus') :
          $new_name = wp_trim_words( $_POST['content'], $num_words = 10, $more = null )
          $my_post_name = $new_name;
        endif;
        return $my_post_name;
}
1
Jodi Warren

私はsave_postアクションフックが適切だと思います。このコードは常にコンテンツに従ってタイトルを更新するため、投稿のタイトルが既に設定されているかどうかのチェックを挿入することをお勧めします($post_object->post_title)。

add_action( 'save_post', 'save_post_wpse_87921', 10, 2 );

function save_post_wpse_87921( $post_id, $post_object ) 
{
    // Auto save?
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )  
        return;

    // Correct post_type
    if ( 'servicestatus' != $post_object->post_type )
        return;

    $new_title = wp_trim_words( $post_object->post_content, $num_words = 10, $more = '' );

    // Unhook this function so it doesn't loop infinitely
    remove_action( 'save_post', 'save_post_wpse_87921' );

    // Call wp_update_post update, which calls save_post again. 
    wp_update_post( array( 
        'ID' => $post_id,
        'post_title' => $new_title
    ));

    add_action( 'save_post', 'save_post_wpse_87921', 10, 2 );
}
1
brasofilo