私はアパートの区画で多くの不動産が売られている不動産サイトを運営しています。
このため、コンテンツ編集者が行うことは、すべての詳細を含む投稿/プロパティを作成してから、他のものを作成するために重複した投稿プラグインを使用することです。
投稿/プロパティを複製するたびに、プロパティ番号を反映するようにタイトルを変更し、メタデータE.Gの価格を数ビット変更する可能性があります。
彼らが忘れているのは、ナメクジを一掃して、タイトルから新しいものを生成させることです。これは、最初に入力したプロパティのスラッグの例です。
merle-court-plot-50-182-carlton-vale-nw6-5hh
しかしそれらが複製されるとナメクジは次のようになります。
merle-court-plot-50-182-carlton-vale-nw6-5hh-2
merle-court-plot-50-182-carlton-vale-nw6-5hh-2-2
merle-court-plot-50-182-carlton-vale-nw6-5hh-2-2-2
merle-court-plot-50-182-carlton-vale-nw6-5hh-2-2-2-2
etc
しかし、彼らがタイトルを変えるとき、ナメクジはより良いようになるでしょう:
merle-court-plot-51-182-carlton-vale-nw6-5hh
merle-court-plot-52-182-carlton-vale-nw6-5hh
merle-court-plot-53-182-carlton-vale-nw6-5hh
merle-court-plot-54-182-carlton-vale-nw6-5hh
etc
だから私の質問:
プロパティのタイトルを更新した後に、保存後にスラッグを強制的に再生成するにはどうすればよいですか。
このCPTのスラッグは常に自動生成されるはずです。手動で設定する必要はありません。
最も簡単な回避策は次のとおりです。
function myplugin_update_slug( $data, $postarr ) {
if ( ! in_array( $data['post_status'], array( 'draft', 'pending', 'auto-draft' ) ) ) {
$data['post_name'] = sanitize_title( $data['post_title'] );
}
return $data;
}
add_filter( 'wp_insert_post_data', 'myplugin_update_slug', 99, 2 );
また、スラッグをsanitize_title_with_dashes()
から wp_unique_post_slug()
まで実行して、一意であることを確認します。必要に応じて、自動的に「-2」、「-3」などが追加されます。
スペースを置き換える代わりに、組み込み関数 sanitize_title()
を使うべきです。
このような:
sanitize_title( $post_title, $post->ID );
また、あなたはユニークなスラグを使うべきです。これは関数 wp_unique_post_slug()
で得られます。
それで解決策をまとめると:
function myplugin_update_slug( $data, $postarr ) {
if ( ! in_array( $data['post_status'], array( 'draft', 'pending', 'auto-draft' ) ) ) {
$data['post_name'] = wp_unique_post_slug( sanitize_title( $data['post_title'] ), $postarr['ID'], $data['post_status'], $data['post_type'], $data['post_parent'] );
}
return $data;
}
add_filter( 'wp_insert_post_data', 'myplugin_update_slug', 99, 2 );
私がしばらくの間予約していたのは、次のようなものです(まだテストされていません)。
//add our action
add_action( 'save_post', 'my_save_post', 11, 2 );
function my_save_post($post_id, $post){
//if it is just a revision don't worry about it
if (wp_is_post_revision($post_id))
return false;
//if the post is an auto-draft we don't want to do anything either
if($post->post_status != 'auto-draft' ){
// unhook this function so it doesn't loop infinitely
remove_action('save_post', 'my_save_post' );
//this is where it happens -- update the post and change the post_name/slug to the post_title
wp_update_post(array('ID' => $post_id, 'post_name' => str_replace(' ', '-', $_POST['post_title'])));
//re-hook this function
add_action('save_post', 'my_save_post' );
}
}