smbutton-blue_no_shadow

WordPress の投稿スラッグを自動的に生成する

WordPress のパーマリンク構造に %postname% が含まれていて、うっかりパーマリンクの設定をし忘れると、ブラウザのアドレス欄に日本語が表示されたり、 %e3%81%8a%e5%95%8f%e3%81%84%e5%90%88%e3%82%8f%e3%81%9b みたいな感じで、イミフな文字列がならんでしまったりしてあまり気持ちの良いものではありませんよね。
よく分かっているならまだしも、運営を任せていたりすると、そんなURLが大量に発生してげんなり・・・そんな状況もよくあり得ます。

先日フォーラムの 記事のスラッグ名を自動的に記事IDにしたい に回答した内容を一歩進めて、なるべく汎用的に使えるコードを書いてみました。

方針としては、

  • 自分で設定したスラッグの場合は、変更しない
  • 日本語などマルチバイトの場合は、{投稿タイプ}-{記事ID}に強制的に変更

記事IDのみにしていないのは、IDが4桁の場合、年別のアーカイブとURLの競合が発生する可能性があるため、接頭辞として投稿タイプを付けるようにしています。ここらへんは各自お好みで。(articleとか固定のものでも大丈夫ですよね。)

CODE 1 では、マルチバイトをエンコードした場合の % + 16進数2桁 がスラッグに見つかったら、強制的に変更するロジックになっています。もれなどありましたら、ご意見ください。

CODE 1

この記事は、jim912によって書かれたものです。
引用を行う場合は、著作権法に定める範囲にて、引用元であるSimple Colorsの出展元表示とhttp://www.warna.info/archives/2317/へのリンクを必ず行って下さい。

function auto_post_slug( $slug, $post_ID, $post_status, $post_type ) {
	if ( preg_match( '/(%[0-9a-f]{2})+/', $slug ) ) {
		$slug = utf8_uri_encode( $post_type ) . '-' . $post_ID;
	}
	return $slug;
}
add_filter( 'wp_unique_post_slug', 'auto_post_slug', 10, 4  );
カテゴリー: WordPressの小技   パーマリンク

WordPress の投稿スラッグを自動的に生成する への8件のコメント

  1. ピンバック: 【WordPress】投稿スラッグ名を自動的に記事IDにする方法 | Q-miz blog(きゆみずぶろぐ)

  2. ピンバック: WordPress サイトの永代供養 | dogmap.jp

  3. rararara より:

    はじめまして。
    「the Event Calendar」というプラグインで、パーマリンクが変更できなかったので、こちらの記事を参考にカスタマイズしました(プラグインをインストールすると「tribe_event」というカスタム投稿ができるので、このpost_typeにだけ適用)。
    うまく個別のイベントのスラッグが自動で変更できたのですが、固定ページのスラッグ編集の部分が消えてしまいました。
    何か回避方法はありますでしょうか?
    使用バージョン:WordPress3.5.1

    以下の内容をfunctions.phpに記述しました。

    function auto_post_slug( $slug, $post_ID, $post_status, $post_type ) {
    if( $post_type == 'tribe_events' ){//イベント情報の時だけ実行
    if ( preg_match( '/(%[0-9a-f]{2})+/', $slug ) ) {
    $slug = 'event' . $post_ID ;
    }
    return $slug;
    }
    }
    add_filter( 'wp_unique_post_slug', 'auto_post_slug', 10, 4 );

  4. jim912 より:

    return 分を if の条件分岐の外に出してください。

  5. rararara より:

    jim912様

    うまくいきました!
    ありがとうございました。

  6. acro より:

    初めまして。
    WordPressをマルチサイト化し、buddypress1.9.2+bbpress2.5.3でSNSサイトを運営しています。フォーラムにて問題が起きたので、ご教授いただければと思います。

    パーマリンクを「/%postname%/」にしていますが、複数人で記事を投稿しているためpostnameの変更が面倒なのでコチラで紹介されているCODE1を使用させていただいています。

    そうした場合、bbpressのフォーラムにもCODE1が適用されてしまうのか、投稿した全てのトピックが「http://hogehoge.com/forums/topic/topic-0/」というURLになってしまいます。

    フォーラムのみpost_idにする方法はありますでしょうか?回答の方宜しくお願いいたします。

  7. なむじん より:

    はじめまして。
    検索でたどり着きました。
    この記事の内容を応用して「カテゴリ」や「タグ」のスラッグをアルファベットのみ使用するようにできませんでしょうか。
    記事からカテゴリやタグを追加した際にスラッグの編集ができず、あとから一覧で変更するのがひと手間なので。
    ご教授いただければ幸いです。

  8. haha より:

    はじめまして、hahaと申します。
    いろいろ調べていたらここにたどり着きました。
    少しアドバイスをいただけないかと思いまして。

    現在ワードプレスのプラグインのbbpressを使ってサイトを作っています。

    日本語のUPLはやめて

    function auto_post_slug( $slug, $post_ID, $post_status, $post_type ) {
    if ( preg_match( ‘/(%[0-9a-f]{2})+/’, $slug ) ) {
    $slug = utf8_uri_encode( $post_type ) . ‘-‘ . $post_ID;
    }
    return $slug;
    }
    add_filter( ‘wp_unique_post_slug’, ‘auto_post_slug’, 10, 4 );

    を使用しています。

    通常は機能しているのですが、新規ユーザー(外部)がトピックを作ると同じURLになってしまいます。topic-0です。

    ******/forums/topic/topic-0/

    なんとかしたいのですが、アドバイスいただけないでしょうか?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です