著者とページングのカスタム投稿タイプ書き換えルール?
-
-
* @banesto *-あなたの質問に答えられるようにするには、もっとコンテキストが必要です.どのフックを使用していますか?関数 `add_rewrite_rule()`を使用していますか?あなたが完全な例を投稿することができれば、それはあなたを助けるのがより簡単になるでしょう.*@banesto* - I need more context to be able to answer your questions. What hooks are you using? Are you using the function `add_rewrite_rule()`? If you can post a complete example it will be easier to help you.
- 0
- 2010-10-23
- MikeSchinkel
-
@ MikeSchinkel-関数全体にフィルターを追加しました.書き換えの変数としてpost_typeを取得したいが無視される例は他にもありますが、同じ理由でそれを信じています.@MikeSchinkel - I added whole function with a filter. there are other examples when I would like to get post_type as a variable in rewrites but it gets ignored but i believe its because of the same reason.
- 0
- 2010-10-23
- banesto
-
* @banesto *-どのURL構造を実現しようとしているのかを示して、推測する必要がなく、間違って推測する可能性もありますか?いくつか例を挙げてください.*@banesto* - Can you also show what URLs structures you are trying to achieve so we don't have to guess and potentially guess wrong? Give some examples please.
- 0
- 2010-10-23
- MikeSchinkel
-
@ MikeSchinkel-ライブの例と説明を追加しました@MikeSchinkel - I added live examples and explanation
- 0
- 2010-10-23
- banesto
-
1 回答
- 投票
-
- 2010-10-23
こんにちは @banesto :
簡単な答えは、短いURLの前にページングされたURLを指定する必要があるということかもしれませんが、テストしなかったため、100%確実ではありません.
そうは言っても、私は常に
'generate_rewrite_rules'
フックで多くの問題に遭遇しました.私よりも優れた開発者がそれを機能させることができると確信していますが、私にとっては、add_rewrite_rule()
関数を使用する方がはるかにクリーンであるため、URLをルーティングする必要があることを示しています.これはあなたが要求したことを行うためのプラグインです(
register_post_type()
呼び出しは、このプラグインがWordPressのテストインストールで機能することを可能にするためだけにあります;あなたはそれをあなたの自分):<?php /* Plugin Name: Dienasgramatas Urls Version: 1.0 Author: Mike Schinkel Author URI: http://mikeschinkel.com/ */ if (!class_exists('Dienasgramatas_Urls')) { class Dienasgramatas_Urls { static function init() { $post_type = 'dienasgramatas' ; register_post_type($post_type, array( 'label' => 'Dienasgramatas', 'public' => true, 'show_ui' => true, 'query_var' => 'dienasgramatas', 'rewrite' => array('slug' => 'dienasgramatas'), 'hierarchical' => false, 'supports' => array('title','editor','custom-fields'), ) ); add_rewrite_rule("{$post_type}/([^/]+)/page/?([2-9][0-9]*)", "index.php?post_type={$post_type}&author_name=\$matches[1]&paged=\$matches[2]", 'top'); add_rewrite_rule("{$post_type}/([^/]+)", "index.php?post_type={$post_type}&author_name=\$matches[1]", 'top'); } static function on_load() { add_action('init',array(__CLASS__,'init')); } static function register_activation_hook() { self::init(); flush_rewrite_rules(false); } } Dienasgramatas_Urls::on_load(); }
もちろん、書き換えルールを追加するときはいつでも、書き換えルールをフラッシュする必要があります.そうしないと、単に機能しません.理想的には、ページの読み込みごとにルールをフラッシュしたくないので、それを行う標準的な方法は、プラグインのアクティベーションフックを使用することです.だから私はあなたのためにプラグインを作成しましたが、テーマの
add_rewrite_rule()
ファイルでadd_rewrite_rule()
呼び出しを使用し、をクリックして手動でURLをフラッシュするだけです.」管理コンソールの「設定>パーマリンク」セクションにある「変更を保存」.Hi @banesto:
I think the simple answer may be that you need your paged URL to be specified before your shorter URL, but since I didn't test it I'm not 100% sure.
That said, I've always run into a lot of trouble with the
'generate_rewrite_rules'
hook. I'm sure a better developer than me could make it work but for me it's been a lot cleaner to use theadd_rewrite_rule()
function so that's how I show you have to make your URLs route.Here's a plugin to do what you asked for (the
register_post_type()
call is only there to allow this plugin to work in my test install of WordPress; you can replace it with your own):<?php /* Plugin Name: Dienasgramatas Urls Version: 1.0 Author: Mike Schinkel Author URI: http://mikeschinkel.com/ */ if (!class_exists('Dienasgramatas_Urls')) { class Dienasgramatas_Urls { static function init() { $post_type = 'dienasgramatas' ; register_post_type($post_type, array( 'label' => 'Dienasgramatas', 'public' => true, 'show_ui' => true, 'query_var' => 'dienasgramatas', 'rewrite' => array('slug' => 'dienasgramatas'), 'hierarchical' => false, 'supports' => array('title','editor','custom-fields'), ) ); add_rewrite_rule("{$post_type}/([^/]+)/page/?([2-9][0-9]*)", "index.php?post_type={$post_type}&author_name=\$matches[1]&paged=\$matches[2]", 'top'); add_rewrite_rule("{$post_type}/([^/]+)", "index.php?post_type={$post_type}&author_name=\$matches[1]", 'top'); } static function on_load() { add_action('init',array(__CLASS__,'init')); } static function register_activation_hook() { self::init(); flush_rewrite_rules(false); } } Dienasgramatas_Urls::on_load(); }
Of course whenever you add rewrite rules you need to flush the rewrite rules or they simply won't work. Ideally you don't want to flush rules for every page load so the standard way to do it is in a plugin's activation hook. So I created a plugin for you but feel free to just use the
add_rewrite_rule()
calls in your theme'sfunctions.php
file and manually flushing your URLs by clicking "Save Changes" in the "Settings > Permalinks" section of the admin console.-
大いに感謝する!単数形/複数形のpost_type名で少し面倒で、機能します:http://dev.fiicha.lv/jb/dienasgramatas/juris/page/2/Thank you a lot! A little hassle with singular/plural post_type name and it works: http://dev.fiicha.lv/jb/dienasgramatas/juris/page/2/
- 0
- 2010-10-23
- banesto
-
* @banesto *-すごい!お役に立てて嬉しいです.*@banesto* - Awesome! Glad I could help.
- 0
- 2010-10-23
- MikeSchinkel
WordPress 3.0.1を使用しており、
'dienasgramatas'
というカスタムの投稿タイプを作成しました.私のプラグインは、この投稿タイプのすべての投稿を表示するためのカスタム書き換えルールと、定義された作成者からのこの投稿タイプの投稿をクエリするためのカスタムパーマリンク構造も作成しますが、ページ付けのルールを作成できません:これは機能するものです:
それはこの書き換えルールを与えます:
しかしこれは:
この(誤った)書き換えルールを出力します:
ご覧のとおり、
post_type
は無視され、この書き換えルールは正常に機能しません.誰かがそれが機能しない理由やそれを正しくする方法を教えてもらえますか?
関数のフィルター:
全機能は次のとおりです:
}
基本的な必要性は私が行きたいということです
そして、post_type='dienasgramata'と2番目のページ(例:10post offset)で 'admin'によって投稿を取得します.page/2なしの書き換えルールは正常に機能します.多分それは正規表現の問題かクエリ変数の問題か、書き換えルールの割り当て方法です.
ライブサイトの例:
http://dev.fiicha.lv/jb/dienasgramatas/juris/
-正常に動作しますhttp://dev.fiicha.lv/jb/dienasgramatas/juris/page/2/
-機能しません下部には、すべての書き換えルールとクエリ変数があります