Wordoressにはパーマリンク機能と言って、投稿やページの表示URLを自由にカスタムできる機能があります。ですが残念ながら、パーマリンク機能はカスタム投稿タイプ(カスタムポストタイプ)では充分に機能しません。

カスタム投稿タイプのパーマリンクを『投稿ID』にしたいのに、上手く動かない!と感じている人は多いのではないでしょうか。

今回は、カスタム投稿タイプを公開時に、自動で『投稿IDをスラッグに設定』する方法を紹介します。 

カスタム投稿タイプのURLに日本語のタイトルが入ってしまう問題点

現在Wordpressのカスタム投稿タイプでは、記事のタイトルが自動で投稿スラッグに設定されるようになっています。(スラッグとは、投稿別の固有URLになる部分のこと。)

日本語タイトルでカスタム投稿を追加すると、タイトル冒頭の日本語が自動でスラッグに設定され、カスタム投稿タイプのURL(パーマリンク)は下記のようになってしまいます。

カスタム投稿のURL:site.com/customname/記事タイトルの冒頭が日本語URLで表示される

日本語URLは記述が非常に長く、不便を感じることもあるのではないでしょうか。特にURLをコピペした時や、Twitterで呟くときは文字制限に引っかかってしまったり、見た目の悪さも感じます。

カスタム投稿タイプのURLを投稿IDにリライトする方法もあるようですが、今回は別の解決策として『カスタム投稿タイプのスラッグそのものを投稿IDに固定してしまう』方法を紹介します。

カスタム投稿タイプのスラッグを投稿IDに固定する手順

やり方は単純で、アクションフックを用いてカスタム投稿タイプの公開時に自動で投稿IDをスラッグに設定してしまいます。

下書き時はスラッグにタイトルが入ってしまいますが『記事を公開する』段階で投稿IDがスラッグにセットされます。

■使用中のテーマファイルのfunction.phpに下記を追加。
//カスタム投稿タイプの公開時に自動で投稿IDをスラッグにセットする

function add_slug_for_posts($post_id) {
global $wpdb;

$posts_data = get_post($post_id, ARRAY_A);
$slug = $posts_data['post_name'];

if ($post_id != $slug){
  $my_post = array();
  $my_post['ID'] = $post_id;
  $my_post['post_name'] = $post_id;
wp_update_post($my_post);
}
     
}
add_action('publish_custom_post_name', 'add_slug_for_posts');
赤文字・・・ custom_post_nameを自分のカスタム投稿タイプ名に変更
緑文字・・・ファンクションに対するコメントアウトやメモ
※テーマの編集は自己責任でお願いします。不安な人は編集前にバックアップを。

functions.phpに記述する場所はどこでも構いませんが、後で誤って消してしまわないようにコメントアウトを添えておきましょう。
functions.phpの編集は、「外観⇒テーマ編集 ⇒テーマの為の関数( functions.php )」から編集できます。

※必ず下記の注意点を合わせて読んでご利用下さい! 

カスタムポストのスラッグをIDに固定する。注意点をよんでー

今回紹介した『カスタム投稿タイプのスラッグを投稿IDに固定する手順』は、新規にカスタム投稿タイプを追加する場合や、サイトの立ち上げ初期の利用を想定しています。

既にカスタム投稿タイプで記事を投稿している場合は、下記の不具合が予想されるので充分に注意して下さい。

・過去に投稿したカスタム投稿タイプには適用されない。
・投稿済みのカスタム投稿を更新すると、その時点からスラッグがIDにセットされてしまう。(URLが変わってしまう)

ご利用は自己責任でお願いします。
前の記事次の記事