質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

474閲覧

日本語スラッグになってしまう

nekokotk

総合スコア6

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2023/04/22 10:14

実現したいこと

ワードプレスのパーマリンク構造は、「投稿名」のままbbpressで投稿されたトピックのスラッグをIDベースにしたい。

前提

bbpressで投稿されたトピックのURLスラッグが日本語になってしまいます。
一般的な投稿ページや固定ページの場合は、以下のようなコードを追加すれば、日本語スラッグをIDベースにできるかと思うのですがbbpressの場合は適用できませんでした

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 );

発生している問題・エラーメッセージ

上記のコードを仮に実装した場合、bbpressには適用されないため、新しく投稿されたURLスラッグが全て

/topic/topic-0/のようになります。

試したこと

以下のようなこーどを試してみましたが無理でした。

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

補足情報(FW/ツールのバージョンなど)

ワードプレス、bbpress最新バージョン

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

トピック登録時をフックしてslugを設定してみてはいかがでしょうか。

PHP

1function my_bbp_new_topic_pre_insert($topic_data) { 2 $topic_data['post_name'] = my_make_post_name($topic_data['post_type']); 3 return $topic_data; 4} 5add_filter('bbp_new_topic_pre_insert', 'my_bbp_new_topic_pre_insert'); 6 7function my_make_post_name($post_type) { 8 $name = $post_type.'-'.uniqid(); 9 global $wpdb; 10 $c = $wpdb->get_var("SELECT count(*) FROM $wpdb->posts WHERE post_name = '$name'"); 11 if ($c == 0) { 12 return $name; 13 } else { 14 my_make_post_name($post_type); 15 } 16}

投稿2023/04/24 00:24

編集2023/04/24 23:10
tabuu

総合スコア2449

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nekokotk

2023/04/24 16:20

わざわざ回答ありがとうございます。質問です '...';の部分には何を追加すれば良いのでしょうか?
nekokotk

2023/04/24 16:30

function my_bbp_new_topic_pre_insert($topic_data) { $topic_data['post_name'] = 'topic-' . $topic_data['topic_id']; return $topic_data; } add_filter('bbp_new_topic_pre_insert', 'my_bbp_new_topic_pre_insert'); このような感じでしょうか?これだと理想通りにIDベースになるのですがスラッグが重複するリスクはないですかね・・
nekokotk

2023/04/24 16:30

連投してしまいすみません GPTにも聞いたところこのような案をいただいたのですが、リスクありますかね・・ function my_bbp_new_topic_pre_insert($topic_data) { $topic_data['post_name'] = 'topic-' . $topic_data['forum_id'] . '-' . uniqid(); return $topic_data; } add_filter('bbp_new_topic_pre_insert', 'my_bbp_new_topic_pre_insert');
tabuu

2023/04/24 23:00

>$topic_data['post_name'] = 'topic-' . $topic_data['topic_id']; そもそもトピック登録前の処理なので、まだトピックのIDはありません。 uniqid()はトピック登録程度の頻度で重複するとは考え難いですが 仮にsulgが重複した場合はWPが123-2、123-3のように自動で連番を付けます。 $topic_dataからフォーラムのIDは下記のように取得します。 $topic_data['post_parent']
tabuu

2023/04/24 23:14 編集

過去に作成した重複チェックのコードを一部修正して追記しました。 3年くらい前に作成したコードなのでそのまま使わず参考程度にしてください。 ※get_posts関数ではゴミ箱の中までは探さないので直接DBを検索しています。
nekokotk

2023/04/26 15:58

回答ありがとうございます。 →そもそもトピック登録前の処理なので、まだトピックのIDはありません。 トピック登録前の処理の場合、どのような問題やリスクがあるのでしょうか? $topic_data['post_name'] = 'topic-' . $topic_data['topic_id'];のコードの方を試しに貼っていたのですが、投稿するとtopic-2 topic-3 と綺麗に投稿した順に数字が増えていくので問題なければこれでもいいのかなと思っているのですが、これのリスク等あれば教えてください、、(無知ですみません) ちなみにトピックは完全にユーザーが投稿する形なので、手動でいじる予定はありません。
tabuu

2023/04/26 22:58

>$topic_data['topic_id'] これが常に値を返さないので「topic-」に自動で連番を振っているだけです。 slugが重複するとWordPressが誤動作するので、そのための防衛機能だと思っています。 なのであまりおすすめはできません。 ちなみにPHPのバージョンはいくつでしょうか。 PHP8ではエラーになると思いますので実施する場合は常に下記のようにしておく方がよいと思います。 $topic_data['post_name'] = 'topic-';
nekokotk

2023/04/27 17:36

ご返信ありがとうございます。。 なるほど、PHPバージョンは7.4でした 8.025にしてみたところ一応大丈夫ではあったのですがやはり避けた方が良いですかね、、 あまり複雑なスラッグにはしたくなく、1.2.3と連番で増やしていきたいのですが、連番のような形で安全にする方法はないのでしょうか? 何度も質問ばかりですみません。もし可能であればお手隙に確認していただけたらと思います🙇‍♂️
tabuu

2023/04/27 23:23

トピックに対する付番でしたらuniqid()で十分だと思いますけど。 100%重複しないとは言えませんが仮に重複してもWPが枝番を付けてくれますので。
nekokotk

2023/04/28 02:12

確かにそうですね、回答ありがとうございました🙇‍♂️
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問