web-dev-qa-db-fra.com

Pagination sur le type de message personnalisé: Erreur 404

Je reçois une erreur 404 sur une page d'archive CPT et je ne sais pas pourquoi. Je peux accéder à l'ensemble de pages de l'archive de type publication personnalisée, mais la page suivante /mycustomposttype/page/2 génère une erreur 404.

Je ne pense pas qu'il y ait quelque chose qui cloche dans mon code et j'ai vidé mes règles de permalien et je pense que le CPT est enregistré correctement. Mais mon code est ci-dessous. Toute idée serait grandement appréciée, car je ne vois pas pourquoi les pages ne sont pas trouvées. J'ai fait quelques recherches ici, et j'ai vu des problèmes similaires et j'ai essayé de suivre pour permettre les solutions présentées. Mais pas de chance.

<!-- Row for main content area -->
<div class="full-width" role="main" >

 <section id="sketchbook-wall">


   <ul id="sketchbook-container" class="large-block-grid-4">
        <?php 

        $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
        $args = array(
          'post_type' => 'tn_cstm_sketchbook',
          'orderby' => 'menu_order',
          'order' =>  'ASC',
          'posts_per_page' => 2,
          'paged'=> $paged 
          );

          $loop = new WP_Query($args);
          while($loop->have_posts()) : $loop->the_post(); ?>
          <li>
            <figure class="sketch-thumb">

            <?php 
               if(get_field('sketch')) {
                $sketch = get_field('sketch');
                $large_image = wp_get_attachment_image_src( $sketch, 'full' );
                $thumbnail = wp_get_attachment_image_src( $sketch, 'large' );
                $attachment = get_post( get_field('sketch') );
                $alt = get_post_meta($attachment->ID, '_wp_attachment_image_alt', true);
              }
            ?>    

            <a href="<?php echo $large_image[0]; ?>" data-id="<?php the_ID(); ?>"  class="reveal" >

              <img src="<?php echo $thumbnail[0]; ?>" alt="<?php echo $alt; ?>" />

            </a> 
            <figcaption>

            </figcaption>

            </figure>

          </li>

        <?php endwhile; ?>

      </ul>


  <nav>
    <?php
    // Bring $wp_query into the scope of the function
    global $wp_query;

    // Backup the original property value
    $backup_page_total = $wp_query->max_num_pages;

    // Copy the custom query property to the $wp_query object
    $wp_query->max_num_pages = $loop->max_num_pages;
    ?>

    <!-- now show the paging links -->
    <div class="alignleft"><?php next_posts_link('Next Entries'); ?></div>
    <div class="alignright"><?php previous_posts_link('Previous Entries'); ?></div>

    <?php
    // Finally restore the $wp_query property to it's original value
    $wp_query->max_num_pages = $backup_page_total;
    ?>
  </nav>


 </section>

 </div>  <!-- End Content -->


<?php

    // Register Custom Post Taxonomy
     public  function create_work_taxonomies() {
            register_taxonomy(
                'tn_cstm_sketchbook_plugin',
                'tn_cstm_sketchbook',
                array(
                    'labels' => array(
                        'name' => 'Sketchbook Categories',
                        'add_new_item' => 'Add New Sketchbook Category',
                        'new_item_name' => "New Sketchbook Category"
                    ),
                    'show_ui' => true,
                    'show_in_nav_menus' => true,
                    'show_admin_column' => true, //Show custom taxonomy in admin columns
                    'show_tagcloud' => false,
                    'hierarchical' => true,
                    'args' => array( 'orderby' => 'term_order' ),
                    'rewrite' => array('slug' => 'sketchbook-categories', 'with_front' => false )
                )
            );
        }


    // Register Custom Post Type
       public function create_sketchbook_work() {
            register_post_type( 'tn_cstm_sketchbook',
                array(
                    'labels' => array(
                        'name' => 'Sketchbook',
                        'singular_name' => 'Sketchbook Page',
                        'add_new' => 'Add New Sketchbook Page',
                        'add_new_item' => 'Add New Sketchbook Page',
                        'edit' => 'Edit Sketchbook Page',
                        'edit_item' => 'Edit Sketchbook Page',
                        'new_item' => 'New Sketchbook Page',
                        'view' => 'View Sketchbook Page',
                        'view_item' => 'View Sketchbook Pages',
                        'search_items' => 'Search Sketchbook Pages',
                        'not_found' => 'No Sketchbook Pages found',
                        'not_found_in_trash' => 'No Sketchbook Pages Found in Trash',
                        'parent' => 'Parent Sketchbook Page'
                    ),

                    'public' => true,
                    'show_in_menu' => true,
                    'menu_position' => 29,
                    'taxonomies' => array( '' ),
                    'menu_icon' => plugins_url( 'images/sketchbook-icon.png', __FILE__ ),
                    'publicly_queryable' => true,
                    'query_var' => true,
                    'rewrite' => array( 'slug' => 'sketchbook', 'with_front' => false ),  
                    'has_archive' => true,
                    'hierarchical' => false,
                    'supports' => array( 'title', 'page-attributes' )
                )
            );
        }

?>
2
tnog

Bien que pre_get_posts soit une bien meilleure solution pour modifier les paramètres de la requête principale d'archivage pour des conditions spécifiques telles que Types de messages personnalisés, comme le mentionnent Milo et helgatheviking, essayer de remplacer une requête personnalisée par une requête d'archive complique le problème.

Étant donné que je construis un modèle de galerie type, comme celui de Tumblr, qui intègre l'image de publication sélectionnée, reliée par des vignettes sur la page par le biais de AJAX et par une fenêtre contextuelle modale, j'ai fini par utiliser ma requête personnalisée. ci-dessus dans un modèle personnalisé que j'ai attribué à une page que j'ai créée. En allant à la page, j'obtiens le comportement de pagination que je voulais.

1
tnog

WordPress génère une page d'archive lorsque vous enregistrez le CPT. Comme indiqué, vous pouvez modifier les publications par page à partir de votre fichier de fonctions et enregistrer le support CPT et Taxonomy à l'aide de ce code:

add_action( 'pre_get_posts', 'set_items' );
function set_items( $query ) {

    if( $query->is_main_query() && !is_admin() && is_post_type_archive( 'tn_cstm_sketchbook' ) ) {
        $query->set( 'posts_per_page', '12' );
    }



    // Register Custom Post Taxonomy
add_action( 'init', 'create_work_taxonomies' );               
function create_work_taxonomies() {
                register_taxonomy(
                    'tn_cstm_sketchbook_plugin',
                    'tn_cstm_sketchbook',
                    array(
                        'labels' => array(
                            'name' => 'Sketchbook Categories',
                            'add_new_item' => 'Add New Sketchbook Category',
                            'new_item_name' => "New Sketchbook Category"
                        ),
                        'show_ui' => true,
                        'show_in_nav_menus' => true,
                        'show_admin_column' => true, //Show custom taxonomy in admin columns
                        'show_tagcloud' => false,
                        'hierarchical' => true,
                        'args' => array( 'orderby' => 'term_order' ),
                        'rewrite' => array('slug' => 'sketchbook-categories', 'with_front' => false )
                    )
                );
            }


        // Register Custom Post Type
add_action( 'init', 'create_sketchbook_work' );        
function create_sketchbook_work() {
                register_post_type( 'tn_cstm_sketchbook',
                    array(
                        'labels' => array(
                            'name' => 'Sketchbook',
                            'singular_name' => 'Sketchbook Page',
                            'add_new' => 'Add New Sketchbook Page',
                            'add_new_item' => 'Add New Sketchbook Page',
                            'edit' => 'Edit Sketchbook Page',
                            'edit_item' => 'Edit Sketchbook Page',
                            'new_item' => 'New Sketchbook Page',
                            'view' => 'View Sketchbook Page',
                            'view_item' => 'View Sketchbook Pages',
                            'search_items' => 'Search Sketchbook Pages',
                            'not_found' => 'No Sketchbook Pages found',
                            'not_found_in_trash' => 'No Sketchbook Pages Found in Trash',
                            'parent' => 'Parent Sketchbook Page'
                        ),

                        'public' => true,
                        'show_in_menu' => true,
                        'menu_position' => 29,
                        'taxonomies' => array( '' ),
                        'menu_icon' => plugins_url( 'images/sketchbook-icon.png', __FILE__ ),
                        'publicly_queryable' => true,
                        'query_var' => true,
                        'rewrite' => array( 'slug' => 'sketchbook', 'with_front' => false ),  
                        'has_archive' => true,
                        'hierarchical' => false,
                        'supports' => array( 'title', 'page-attributes' )
                    )
                );
            }

Aucune requête personnalisée ni archive CPT n'est nécessaire et vous n'utiliseriez pas de modèle pour cette archive, car WordPress utilise le Template Hierarchy

Vous pouvez ensuite utiliser CSS pour afficher vos images en vedette dans un style de grille en ligne.

0
Brad Dalton