Custom Permalinksでリンク先が404になる場合の対応

Custom Permalinksでリンク先が404になる場合の対応

Custom Permalinksを使用した特定のページのパーマリンクが404になってしまう。

1、ツール>Custom Permalinksを確認し、「同じタイトル」「同じパーマリンク」があるか確認する。
2、revision というrevisionという投稿タイプが当てられている
3、問題のある記事のリビジョンを全て消す

——————–

上記では根本的な解決にはならないので、下記phpを修正する。
wp-content/plugins/custom-permalinks/custom-permalinks.phpの145行目付近にあるcustom_permalinks_request($query)なる関数の中にあるSQL文。

$sql = "SELECT $wpdb->posts.ID, $wpdb->postmeta.meta_value, $wpdb->posts.post_type FROM $wpdb->posts  ".
    "LEFT JOIN $wpdb->postmeta ON ($wpdb->posts.ID = $wpdb->postmeta.post_id) WHERE ".
    "  meta_key = 'custom_permalink' AND ".
    "  meta_value != '' AND ".
    "  ( LOWER(meta_value) = LEFT(LOWER('".mysql_real_escape_string($request_noslash)."'), LENGTH(meta_value)) OR ".
    "    LOWER(meta_value) = LEFT(LOWER('".mysql_real_escape_string($request_noslash."/")."'), LENGTH(meta_value)) ) ".
    "ORDER BY LENGTH(meta_value) DESC LIMIT 1";

これに一行下記のクエリを挿入する。

"  post_type NOT IN ('revision') AND ".
$sql = "SELECT $wpdb->posts.ID, $wpdb->postmeta.meta_value, $wpdb->posts.post_type FROM $wpdb->posts  ".
    "LEFT JOIN $wpdb->postmeta ON ($wpdb->posts.ID = $wpdb->postmeta.post_id) WHERE ".
    "  meta_key = 'custom_permalink' AND ".
    "  meta_value != '' AND ".
    "  post_type NOT IN ('revision') AND ".
    "  ( LOWER(meta_value) = LEFT(LOWER('".mysql_real_escape_string($request_noslash)."'), LENGTH(meta_value)) OR ".
    "    LOWER(meta_value) = LEFT(LOWER('".mysql_real_escape_string($request_noslash."/")."'), LENGTH(meta_value)) ) ".
    "ORDER BY LENGTH(meta_value) DESC LIMIT 1";

参考サイト

SuikoLog
「Custom Permalinks」で特定のパーマリンクを設定すると404エラーになる問題
http://suikoudesign.com/suikolog/wordpress/1450
WordPress.org Forums
Custom Permalinks 404 Error – potentially caused by revisions
https://wordpress.org/support/topic/404-error-potentially-caused-by-revisions/?replies=6