私はカスタム投稿を使用しています、そしてこれらの中で、私はタイトルの必要はありません。
これにより、Wordpressは私の投稿のタイトルを "自動ドラフト"に設定します。
自分の投稿の他のフィールドから計算した、タイトルの値を別のものに変更したいです。
Save_postまたはその他の手段を使用してそれを行う方法を教えてください。
この最も簡単な方法は、wp_insert_post_data
の代わりに save_post
を使用して、後で更新するのではなく、データを挿入した時点で編集することです。これは、新しい投稿を作成したり、既存の投稿を変更せずに更新したりします。また、update_post
内で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.
}
私はまったく同じニーズを持っていたので、私はこの機能を書きました - それは機能します。必要に応じて修正してください。お役に立てれば。
// 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 );
フィルタ 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;
}
これは、無限ループを防ぐために静的変数を使用する解決策です。これにより、save_post
にフックされている関数内でwp_update_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} フックを使用してください。