私は現在、パーマリンク構造にPost name
を使用しています。パーマリンクの最後にあるフィールドからテキストを追加したいです。 Post
が公開されたときにパーマリンクを作成するためのフックはありますか?
私の場合は、Advanced Custom Fields
を使用し、すべての投稿にタイトルと字幕があります。現在、パーマリンクは/title/
ですが、私は/title-subtitle/
になりたかったのです。
編集: これと似ています 前の質問 、これはのための災害である記事のURLを変更するので、私は記事作成のためだけにし、将来の記事版ではしたくないSEO。
これを実装するために私がしたことは次のとおりです。
function slug_save_post_callback( $post_ID, $post, $update ) {
// allow 'publish', 'draft', 'future'
if ($post->post_type != 'post' || $post->post_status == 'auto-draft')
return;
// only change slug when the post is created (both dates are equal)
if ($post->post_date_gmt != $post->post_modified_gmt)
return;
// use title, since $post->post_name might have unique numbers added
$new_slug = sanitize_title( $post->post_title, $post_ID );
$subtitle = sanitize_title( get_field( 'subtitle', $post_ID ), '' );
if (empty( $subtitle ) || strpos( $new_slug, $subtitle ) !== false)
return; // No subtitle or already in slug
$new_slug .= '-' . $subtitle;
if ($new_slug == $post->post_name)
return; // already set
// unhook this function to prevent infinite looping
remove_action( 'save_post', 'slug_save_post_callback', 10, 3 );
// update the post slug (WP handles unique post slug)
wp_update_post( array(
'ID' => $post_ID,
'post_name' => $new_slug
));
// re-hook this function
add_action( 'save_post', 'slug_save_post_callback', 10, 3 );
}
add_action( 'save_post', 'slug_save_post_callback', 10, 3 );
slug
を生成して更新します。 WPによって生成された以前のスラッグは、title/slugがすでに別の投稿で使用されている場合は一意の番号を持つことがあるため、再利用できません。だから、私はタイトルを消毒します。それから、wp_update_post
は、wp_unique_post_slug
を持つ新しいスラッグの重複がないことを確認します。
私が公開時にのみこれを行うことができる唯一の方法は、作成と変更された時間を比較することです。投稿が作成されたときにのみ等しくなります。 $update
パラメータは、公開用のtrue
なので、役に立ちません。