商品のパーマリンク設定について
タグ: パーマリンク
-
投稿者投稿
-
2015年8月7日 4:08 PM #75286yousan参加者
こんにちは!
Welcartをありがたく使わせてもらっています。Welcartを導入したサイトにおいて、商品個別ページのパーマリンクを設定したいと思っています。
例) http://www.example.com/shop/123/
としたいです。
現在は標準のパーマリンク設定を
http://www.example.com [/shop/%post_id%]
としています。ですがこれですと他のカスタム投稿タイプが
http://www.example.com/shop/blog/123
のようになってしまいます。ですので
標準のパーマリンク設定を
http://www.example.com [/%post_id%]
として、ウェルカートの商品についてのパーマリンクを
[/shop/%post_id%]
としようと思っているのですが、何か良い案などはありますでしょうか〜?——————————————-
WordPress のバージョン:WordPress 4.2.4
Welcart のバージョン: 1.4.20
ご利用のテーマ:独自テーマ
症状を確認したブラウザ:safari, chrome
サーバー(会社名、サービス名):gmo
SSLの利用: no
WordPress のパーマリンク設定:カスタム [/shop/%post_id%]
——————————————–2015年8月17日 10:29 AM #75398nanbuキーマスターこんにちは。
私はそれができないと思っているのですが、どなたか経験のある方がいらっしゃいましたら教えていただけると助かります。
2015年8月18日 12:45 AM #75421Mizuho Ogino参加者Custom Post Type Permalinksというプラグインをつかって、標準のパーマリンクを[/shop/%post_id%]に設定して、カスタム投稿ごとのパーマリンクを[/%post_id%]に設定すれば、ご希望の表示を実現できるのではないでしょうか。
2015年8月18日 10:45 AM #75423kitamuuu参加者私も気になったので試してみました。
Mizuho Ogino様が言うようにCustom Post Type Permalinksを使って設定しようとしたところ、標準のパーマリンクを[/shop/%post_id%]に設定すると、カスタム投稿タイプのパーマリンクにも/shop/が入ってしまうと思うのですが私だけでしょうか。2015年8月18日 3:54 PM #75429Mizuho Ogino参加者「Custom Post Type Permalinks」ダメでしたか^^;
記憶違いですね、失礼いたしました。残った手としては、投稿タイプ「post」をカスタム投稿タイプとして再度レジストしてrewrite設定をするという手があります。「register_post_type」をfunctions.phpに追加します。
add_action( 'init', 'my_new_default_post_type', 1 ); function my_new_default_post_type() { register_post_type( 'post', array( 'labels' => array( 'name_admin_bar' => _x( 'Post', 'add new on admin bar' ), ), 'public' => true, '_builtin' => false, '_edit_link' => 'post.php?post=%d', 'capability_type' => 'post', 'map_meta_cap' => true, 'hierarchical' => false, 'rewrite' => array( 'slug' => 'myslug' ), 'query_var' => false, 'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'post-formats' ), ) ); }
これで 「example.com/myslug/投稿スラッグ」というパーマリンクになります。しかしカスタム投稿と同じく既存のパーマリンク設定が効かないはず。ですので、上記設定後、改めてregister_post_typeした後で「Custom Post Type Permalinks」をインストールする、という手もあると思います(未検証です)。あと、「post」のパーマリンクだけを変えたいなら、以下をfunctions.phpに記述するだけでいけるのではないかと思います。
add_filter('post_type_link', 'my_new_default_post_type_link', 1, 3); function my_new_default_post_type_link( $post_link, $post = 0, $leavename = false ) { if ($post->post_type == 'post') return home_url( 'myslug/' . $post->ID ); else return $post_link; } add_action( 'init', 'my_new_default_rewrites_init' ); function my_new_default_rewrites_init(){ add_rewrite_rule( 'myslug/([0-9]+)?$', 'index.php?post_type=post&p=$matches[1]', 'top' ); }
以上、welcart込みで検証していませんので、動作は保証し兼ねます^^;
2015年8月19日 1:32 PM #75437yousan参加者こんにちはー! 近年はカスタム投稿タイプの導入が増えてますし、みなさんお困りだったりするんですね〜。
実はその後リリースに向けて調整をしましてなんとか解決しました。
報告が遅くなってしまって申し訳ないです。Mizuho OginoさんのおっしゃるCustom Post Type Permalinksと組み合わせて解決しました。
カスタムパーマリンク: http://www.example.com/ [/%category%/%post_id%] Custom Post Type Permalinksの設定で blog http://www.example.com/blog [/%post_id%] event http://www.example.com/event [/%post_id%]
というふうに設定しました!
商品はすべて「shop」というスラッグのカテゴリに入れてあります。
こうすることで [%category%] をでshopが出てくるようになりました。この [%category%] の仕組みについては
%category%
投稿のカテゴリーを取得します。サブカテゴリーは入れ子にされたディレクトリとして取得されます。また
複数カテゴリにした投稿の %category% と %tag%
一つの投稿に複数カテゴリを指定していても、パーマリンクには一つしか表示できません。一番小さいカテゴリ ID(カテゴリ管理 参照)が使われます。アクセスはどのカテゴリからでも普通にできます。
パーマリンク構造に %tag% を使用している場合も、同様です。http://wpdocs.osdn.jp/パーマリンクの使い方
とのことでした。
ですのでスラッグが「shop」のカテゴリにサブカテゴリを作らないようにすることと、shopのIDを若いものに設定することが肝要かと思います 🙂
(ちなみに今回の案件ではすでに「shop」の下に「新商品」「おすすめ商品」というカテゴリがあったので、それらは階層を一つ上げました。 ((でもサブカテゴリに指定されていても仕様通りのnestedなカテゴリは出力されなかったんですが…))どなたかのお役に立てれば幸いです。
2015年8月19日 3:12 PM #75443kitamuuu参加者「post」ってカスタム投稿タイプにできてしまうんですね。WordPressとしては問題ないのでしょうか?
最初に貼っていただいた記述をテーマのfunctions.phpに記述した後、カスタム投稿タイプ「post」のパーマリンクを設定するため、Custom Post Type Permalinksをインストールしましたが、”post”をカスタム投稿タイプと判定してくれないためなのか、カスタム投稿タイプ「post」のパーマリンク設定ができませんでした。
ですので、後述された2つの記述を使ってカスタム投稿タイプ「post」のときのリンクとリライトルールを指定しました。
Custom Post Type Permalinksを有効化していると、add_filter(‘post_type_link’, ‘my_new_default_post_type_link’, 1, 3);
の記述の実行順序が1では早すぎて上書きされてしまうため、以下のように11に変更しました。
add_filter(‘post_type_link’, ‘my_new_default_post_type_link’, 11, 3);
これでURLはyousan様が希望された形で商品登録から購入までうまく動いている感じですが、やはり「post」をカスタム投稿タイプとしたことで動作に何かしらの影響があるのではないかと気になります。
2015年8月19日 3:21 PM #75444nanbuキーマスターMizuho Ogino さん
情報ありがとうございます。
if ($post->post_type == ‘post’) return home_url( ‘myslug/’
の部分
if ($post->post_type == ‘post’ && $post->post_mime_type == ‘item’) return home_url( ‘myslug/’
とすると商品だけスラッグを変えられるかもしれませんね。
2015年8月19日 3:44 PM #75445nanbuキーマスターyousan さん
カテゴリーを使うのは最も簡単でいいですね。
ただ、後から設定しようと思った場合は shop のIDを一番若くするのはちょっと難しいですね。因みに私の開発環境の商品詳細ページは、/%category%/%post_id% で以下の様なURLになっています。
http://****.com/item/632そして、shopと言うカテゴリを新たに作って、「商品(item)」カテゴリの親をshopにしてみたところこの様なリンクになりました。
http://****.com/shop/item/632カテゴリー階層によるカスタマイズをしていないのだったら、また、shop/item といった形になっても良いのだったら、こういう手もあるかも知れませんね。
2015年8月22日 1:59 AM #75482Mizuho Ogino参加者>yousanさん
解決されたようで何よりです。いろいろいい加減な記憶と未検証の意見を勢いで書いてしまい申し訳有りません。一助になったならば幸いです。>kitamuuuさん
都度チェックしていただきありがとうございます^^;
言葉の綾というか、私の表現がまずかったですね。postと他のカスタム投稿とは原則posttype名で区分されているだけですので、おそらく通常の使用では問題は起きにくいと思ってます。変更してるのはrewriteの項目だけですしね。いずれにせよ、アップデート時にチェックする要素を増やすことには間違いないので、ウェブショップのような環境下では一層慎重になるべきかな、と私も思います。>nanbuさん
post_type_linkは出力されるリンクしか変更してくれないので、register_post_typeのrewriteで予め同じパーマリンクを設定していないと404になります。この場合、post_mime_typeがitemのものは表示されるが、それ以外の投稿は404になると思われます。itemとpostのパーマリンクを区別する方法は考えてみたのですが、現状思いつきません。2015年8月22日 12:33 PM #75486nanbuキーマスターMizuho Ogino さん
こんな感じで、URLを分けることはできました。新規登録や更新もできています。
ただ、やはりビルトインのpostを上書きしている事、パーマリンク設定が無視される事など考えると、個別の環境での検証が必要になってくるかと思います。add_action( ‘init’, ‘my_new_default_post_type’, 1 );
function my_new_default_post_type() {
register_post_type( ‘post’, array(
‘labels’ => array(
‘name_admin_bar’ => _x( ‘Post’, ‘add new on admin bar’ ),
),
‘public’ => true,
‘_builtin’ => false,
‘_edit_link’ => ‘post.php?post=%d’,
‘capability_type’ => ‘post’,
‘map_meta_cap’ => true,
‘hierarchical’ => false,
‘rewrite’ => array( ‘slug’ => ‘myslug’ ),
‘query_var’ => false,
‘supports’ => array( ‘title’, ‘editor’, ‘author’, ‘thumbnail’, ‘excerpt’, ‘trackbacks’, ‘custom-fields’, ‘comments’, ‘revisions’, ‘post-formats’ ),
));
}add_filter(‘post_type_link’, ‘my_new_default_post_type_link’, 1, 3);
function my_new_default_post_type_link( $post_link, $post = 0, $leavename = false ) {if ( $post->post_type == ‘post’ && $post->post_mime_type == ‘item’ ){
$post_link = home_url( ‘myslug/’ . $post->ID );
}else{
$post_link = home_url( ‘/’ . $post->ID );
}
return $post_link;
}add_action( ‘init’, ‘my_new_default_rewrites_init’ );
function my_new_default_rewrites_init($aa){
add_rewrite_rule( ‘myslug/([0-9]+)?$’, ‘index.php?post_type=post&p=$matches[1]’, ‘top’ );
add_rewrite_rule( ‘([0-9]+)?$’, ‘index.php?post_type=post&p=$matches[1]’, ‘top’ );
}※このコードを有効にするには、WordPress の 管理画面から、「設定」->「パーマリンク設定」を選択し、何も変更せずに「変更を保存」をクリックする必要があります。
※CSV一括登録の検証は行っていません。
-
投稿者投稿
- このトピックに返信するにはログインが必要です。