web-dev-qa-db-ja.com

CPTの「書き換え」ルールとページのスラッグが同じ場合のカスタム投稿タイプのページ付け

私のサイトでは以下のリンク構造を実現したいと思います。

  1. / properties/ - > properties CPTの1ページ目のpropertiesページ。
  2. / properties/page/2 - > properties CPTのpropertiesページ、2ページ。
  3. / properties /プロパティ名 - >プロパティの詳細を含む単一のpropertiesページ。

propertyというカスタム投稿タイプ(CPT)があります。次のように登録され、'rewrite' => array('slug' => 'properties', 'with_front' => false)として指定されたrewriteルールに従います。

function property_post_type_init() {
  $labels = array(
    'name' => _x('Properties', 'post type general name'),
    'singular_name' => _x('Property', 'post type singular name'),
    'add_new' => _x('Add New', 'property')
  );
  $args = array(
    'labels' => $labels,
    'public' => true,
    'publicly_queryable' => true,
    'show_ui' => true,
    'rewrite' => array('slug' => 'properties', 'with_front' => false),
    'query_var' => true,
    'capability_type' => 'post',
    'hierarchical' => false,
    'show_in_nav_menus' => false,
    'menu_position' => 5,
    'supports' => array(
      'title',
      'editor',
      'revisions'
    )
  );
  register_post_type('property',$args);

スラッグpropertiesを含むページもあり、パーマリンク構造は/%category%/%postname%/に設定されています。

Propertiesページで、以下の引数を使用して新しいWP_Queryオブジェクトを作成します。

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
    'post_type' => 'property',
    'orderby' => 'date',
    'order' => 'DESC',
    'paged' => $paged
);
return $args;

正しいURLでページ付けを正しく生成するカスタムのページ付けコード(functions.php内)を使用します。

<my-site>/properties/
<my-site>/properties/page/2/
<my-site>/properties/page/3/

しかし、ページネーション内の任意のページをクリックすると、404ページにリダイレクトされます。私はクエリパラメータを期待しており、それらは以下の通りです。

[page] => 2
[property] => page
[post_type] => property
[name] => page

これは正しくありません。これらのパラメータがどこから来ているのか理解できません。

[page] => 2
[property] => page
[name] => page

CPTを登録するときのrewriteルールと関係があることは間違いありません。

次の設定を正しく機能させるにはどうすればよいですか。

  1. すべてのpropertiesカスタム投稿タイプをページ区切りで表示するpropertiesページ。
  2. 'rewrite' => array('slug' => 'properties', 'with_front' => false)ルールを持つpropertiesカスタム投稿タイプ。
  3. /%category%/%postname%/構造のパーマリンク

だから私は次のリンク構造を持っている:

  1. / properties/ - > properties CPTの1ページ目のpropertiesページ。
  2. / properties/page/2 - > properties CPTのpropertiesページ、2ページ。
  3. / properties /プロパティ名 - >プロパティの詳細を含む単一のpropertiesページ。

それが理にかなっていることを願っています。

ありがとう、ダーシャ

2
dashaluna

ページのスラッグを別のものに変更し、投稿タイプの登録をこれに変更してください。

  $args = array(
    'labels' => $labels,
    'public' => true,
    'publicly_queryable' => true,
    'has_archive' => true,
    'show_ui' => true,
    'rewrite' => array('slug' => 'properties', 'with_front' => false),
    'query_var' => true,
    'capability_type' => 'post',
    'hierarchical' => false,
    'show_in_nav_menus' => false,
    'menu_position' => 5,
    'supports' => array(
      'title',
      'editor',
      'revisions'
    )
  );

有効な新しい引数は'has_archive'です。これは3.1の新機能で、デフォルトで/properties//properties/page/2などの構造体になります。それからあなたの書き換え規則を洗い流し、それがそれを修正するかどうか確かめなさい。また、あなたが書いたコードをコメントアウトしたり、ルールを書き換えたりする必要があるかもしれません。

3
John P Bloch