web-dev-qa-db-fra.com

Pagination personnalisée de type de message lorsque la règle de réécriture du CPT et une page ont le même contenu

J'aimerais créer la structure de lien suivante sur mon site:

  1. / properties/-> une page properties avec properties CPT, page 1.
  2. / properties/page/2 -> une page properties avec properties CPT, page 2.
  3. / properties/property-name -> une seule page properties avec les détails de la propriété.

J'ai un type de message personnalisé (CPT) appelé property. Il est enregistré comme suit avec la règle rewrite spécifiée en tant que 'rewrite' => array('slug' => 'properties', 'with_front' => false):

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

J'ai aussi une page avec le slug properties et la structure de permalien est définie comme /%category%/%postname%/

Sur la page Properties, je construis un nouvel objet WP_Query avec les arguments suivants:

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

J'utilise un code de pagination personnalisé (dans functions.php) qui génère correctement la pagination avec les URL correctes:

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

Cependant, lorsque je clique sur une page de la pagination, je suis redirigé vers la page 404. J'ai attendu les paramètres de requête et ils sont les suivants:

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

Ce qui n'est pas correct! Je ne comprends pas d'où viennent ces paramètres:

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

Je suis sûr que cela a quelque chose à voir avec la règle rewrite lors de l'enregistrement d'un CPT.

Comment puis-je obtenir la configuration suivante pour fonctionner correctement:

  1. Une page properties qui affiche toutes les publications properties avec des publications personnalisées avec pagination.
  2. Un type de message personnalisé properties avec la règle 'rewrite' => array('slug' => 'properties', 'with_front' => false).
  3. Lien permanent de la structure /%category%/%postname%/

Donc, j'ai la structure de lien suivante:

  1. / properties/-> une page properties avec properties CPT, page 1.
  2. / properties/page/2 -> une page properties avec properties CPT, page 2.
  3. / properties/property-name -> une seule page properties avec les détails de la propriété.

J'espère que cela a du sens.

Merci, Dasha

2
dashaluna

Essayez de changer le slug de la page en quelque chose d'autre et de changer votre enregistrement de type de message en ceci:

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

Le nouvel argument en vigueur est 'has_archive'. Ceci est nouveau dans la version 3.1 et vous donne une structure /properties/, /properties/page/2, etc. par défaut. Puis effacez vos règles de réécriture et voyez si cela résout le problème. Vous pouvez également avoir besoin de commenter le code que vous avez écrit en jouant avec les règles de requête ou de réécriture.

3
John P Bloch