###前提・実現したいこと
お世話になっております。
先日からWordpressでのサイト作りに取り組んでいます。
以下のURL構造を目指し、「red/smith」や「pink/smith」の部分をスラッグとして扱いたいです。
http://example.com/mypost/red/smith
http://example.com/mypost/pink/smith
(※mypostはカスタム投稿タイムです)
###発生している問題
スラッグからページ情報を取得する関数「get_page_by_path()」の使用に際して、第一引数に上のような「red/smith」というスラッグを指定しても、ページ情報が取得できません。
つまり次のコードで「$page」を取得したいのですが…できますでしょうか?
$page = get_page_by_path( 'red/smith', OBJECT, 'mypost' );
###該当のソースコード
functions.phpに以下「sanitize_title」を記載し、スラッグに「/」を含めることには成功致しました。
あとは問題の点ですが、どうすれば最終行にある「$page」を取得できますでしょうか。
php
1 2// 各記事のページでパーマリンク文字列を入力する際、スラッシュがハイフンに自動変換されてしまうのを防ぐ 3remove_filter('sanitize_title', 'sanitize_title_with_dashes'); 4add_filter('sanitize_title', function($title, $raw_title = '', $context = 'display'){ 5 if(seems_utf8($title)){ 6 $title = utf8_uri_encode($title, 200); 7 } 8 return $title; 9}); 10 11// 以下の取得が目的 12$page = get_page_by_path( 'red/smith', OBJECT, 'mypost' ); 13
###試したこと
■プラグイン導入
上のソースコードを削除し、プラグイン「Permalink Manager Lite」を導入しました。
しかしこちらも、スラッグに「/」を含めることには成功しても、「get_page_by_path()」が使用できません。
■ソースコードの追加
functions.phpに以下を追加しましたが、「get_page_by_path()」は使えませんでした。
php
1// リライトルールを書き換える 2function my_rewrite_rules_array($my_rewrite) { 3 4 $return_rule = array(); 5 6 foreach ($my_rewrite as $regex => $rewrite){ 7 8 // スラッシュをはじかないルールに書き換える。 9 $regex = str_replace('[^/]', '.', $regex); 10 11 // リライトルールをセット 12 $return_rule[$regex] = $rewrite; 13 } 14 15 return $return_rule; 16} 17 18add_filter('rewrite_rules_array', 'my_rewrite_rules_array');
■ハイフンへの置換
最終的にできたのが次で、「/」として保存したものを、取得の際は「-」に置換するという方法です。
php
1// スラッグを取得 2$url = "http://example.com/mypost/red/smith/"; 3preg_match( '/http://example.com/mypost/(\S+)/', $url, $slug ); 4/* 5var_dump( $slug ); 6array(2) { 7 [0]=>string(36) "http://example.com/mypost/red/smith/" 8 [1]=>string(10) "red/smith/" 9} 10*/ 11 12// 上の「red/smith/」を「red-smith」へ置換 13$slug = rtrim( $slug[1], '/' ); 14$slug = str_replace('/', '-', $slug); 15 16// 以下で取得できたが、置換の手間をなくしたい 17$page = get_page_by_path( $slug, OBJECT, 'mypost' );
上のコードでできましたがこの置換の手間をなんとも野暮ったく感じております。
登録値が「red/smith」なのですから、置換の手間なくそのまま
$page = get_page_by_path( 'red/smith', OBJECT, 'mypost' );
で取得したいと考え、ご質問させて頂いた次第です。
アドバイスや情報などお待ちしております。どうぞ宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/02 10:54
2019/12/03 03:50
2019/12/03 07:18
2019/12/04 02:32
2019/12/04 09:16