タイトルフィールドのないカスタム投稿タイプがあります。内容だけが重要な短いステータスメッセージです。 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;
}
私は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 );
}