ダリの雑記:WEBプログラム版

スラッグ名の重複対策 改

そもそもの原因についてはこちら

【WordPress】スラッグ名が重複すると、公開中の投稿ページが404になる

上記の対策方法を、こちらの記事「スラッグ名の重複対策」で書かせてもらいましたが、よくよく考えてみたら、こんなに複雑に考える必要はありませんでした。

つまり、下書きだろうが、スラッグ名を確定させてしまえばよい!(というか、なぜそうなってないのか)

プログラム修正版はこちらです。

[PHP]
function change_post_name($post_id){
if(!wp_is_post_revision($post_id)){
$get_post = get_post($post_id);
if(!empty($get_post->post_name)){
remove_action('save_post', 'change_post_name', 13, 2 );
if($get_post->post_status == "draft" || $get_post->post_status == "pending"){
$post_name = wp_unique_post_slug($get_post->post_name, $post_id, "publish", $get_post->post_type, $get_post->post_parent);
wp_update_post( array( 'ID' => $post_id, 'post_name' => $post_name) );
}
add_action('save_post', 'change_post_name', 13, 2 );
}
}
}
add_action('save_post', 'change_post_name', 13, 2 );
[/PHP]

7行目のwp_unique_post_slugは、wp_insert_post関数内で使用されてる、ユニークなスラッグ名を付けてくれる関数です。

この関数の第3引数が、下書きの場合は、ユニークにしてくれません(第1引数のスラッグ名をそのまま返します)

ということであれば、第3引数だけ「publish」にして、ユニークなスラッグ名を取得し、保存し直せばよい!

ということで、作ってみたのですが、とりあえず大丈夫っぽい。

※このプログラムについて責任はとれませんので、自己責任でお願いします。

 

参考サイト

wp_unique_post_slug – WordPress私的マニュアル

モバイルバージョンを終了