追記です。
404エラーが開くと書きましたが、正確には1.のページを開いているのに2.のページが開いてしまい、でも下書きなので404になるという感じです。
管理画面に入っていると404にはならない(2.の記事が普通に開く)ので、これもまたわかりづらい部分であります。
wp4.7.1で確認してみました。
「スラッグを自分で指定して、それが他の投稿と被る場合に変更する(hogeをhoge-2のようにする)処理が、下書き保存した時は行われない。公開した時に行われる」
が問題のような気がしますね。
404エラーについては、URLが完全に一致する場合のみ起きるようです。
1. パーマリンクがデフォルトや数字ベースなら問題なく表示される
2. パーマリンクに年月日が入っていれば、年月日まで一致する場合のみ、404になる
下書き保存でもスラッグが衝突しないような修正が好ましいと思います。
現状での回避策としては、
確実なもの
● スラッグは自分でつけない(WPに任せる)
or
● パーマリンクをデフォルトや数字ベースなど、スラッグが無いものにする
ほぼ大丈夫なもの
● パーマリンクに年月日を入れる
ご返答ありがとうございます!
確実なもの
● スラッグは自分でつけない(WPに任せる)
or
● パーマリンクをデフォルトや数字ベースなど、スラッグが無いものにする
ほぼ大丈夫なもの
● パーマリンクに年月日を入れる
そうですよね・・・
ひとまず気をつけるということで対処したいと思います。
もう1点気になる点のご報告として、この現象が起きた際、1.の公開済みの記事の方を編集保存すると、スラッグ名がに「-2」がついてしまいます(例:hoge-2)
ただ、これでちゃんと1.のページが閲覧できるようになります。(スラッグ名は変わってしまいますが)
そして、2.の下書きの方をそのあとで公開保存すると、スラッグ名がそのままになります(例:hoge)
後追いのほうが勝つというのは正直どうかと思います。(ページが入れ替わっちゃってますし・・・あ、これを狙ってる?)
そのうちバージョンアップで治ると良いのですが・・・
ちゃんとテストはしていないですが、こんな感じでひとまず404エラーは回避できそうです。
functions.phpに以下を追記
add_action('pre_get_posts', 'custom_pre_get_posts' );
function custom_pre_get_posts($query){
if ( is_admin() || ! $query->is_main_query() ){
return;
}
if($query->is_single && !$query->is_preview){
$query->set( 'post_status' , 'publish');
}
}
CG
(@du-bist-der-lenz)
WordPress 4.7.1, Twenty Seventeen で Hello world のタイトルで投稿を新規作成したところ、スラッグもhello-world-2となり、これまで道理です。
問題とは感じないのですが、そういうことではないのですか?
ご返信ありがとうございます。
上記にも書かせていただいているのですが、タイトルから自動的にスラッグが生成される場合はこの問題は起こりません。
任意にスラッグ名を付けた場合にこの問題が起こります。
また、Fumito MIZUNO様もおっしゃっている通り、完全にURLが一致する場合に限りますので、年月日URLで日付が違ったりする場合は正常に動作します。
例:↓この場合は大丈夫
http://ja.wordpress.org/2017/01/19/hello-world(下書き)
http://ja.wordpress.org/2017/01/18/hello-world(公開済み)
このようなこともあるため、なかなか発覚しづらい問題ではあるかと思います。
CG
(@du-bist-der-lenz)
同日に同一記事が重複投稿されるのを予防する策ではないのか。
CG
(@du-bist-der-lenz)
最初の Hello world は20時間前ですが、現在1月19日午後21時ですので、投稿日は同じ。パーマリンクは投稿名です。
注意するという方向で解決とさせていただきます。
ご返信頂きました皆さん、ありがとうございました。