J'essaie de filtrer la requête sur une sous-page appelée "Poser une question" pour répertorier toutes les questions récentes soumises par les utilisateurs, mais je reçois un 404 en allant sur la page. Flushing la structure permalien n'a pas résolu le problème. Il est actuellement réglé sur Mois et Nom.
Créer une nouvelle question fonctionne correctement et je peux accéder aux nouveaux messages. Les taxonomies personnalisées fonctionnent également correctement, mais pas les pages d'archives.
C'est le code que j'utilise.
Type de poste
function question_post_type() {
$labels = array(
'name' => _x( 'Questions', 'Post Type General Name', 'text_domain' ),
'singular_name' => _x( 'Question', 'Post Type Singular Name', 'text_domain' ),
'menu_name' => __( 'Questions', 'text_domain' ),
'parent_item_colon' => __( 'Parent Question:', 'text_domain' ),
'all_items' => __( 'All Questions', 'text_domain' ),
'view_item' => __( 'View Question', 'text_domain' ),
'add_new_item' => __( 'Add New Question', 'text_domain' ),
'add_new' => __( 'New Question', 'text_domain' ),
'edit_item' => __( 'Edit Question', 'text_domain' ),
'update_item' => __( 'Update Question', 'text_domain' ),
'search_items' => __( 'Search questions', 'text_domain' ),
'not_found' => __( 'No questions found', 'text_domain' ),
'not_found_in_trash' => __( 'No questions found in Trash', 'text_domain' ),
);
$rewrite = array(
'slug' => '/ask/question',
'with_front' => true,
'pages' => true,
'feeds' => true,
);
$args = array(
'label' => __( 'question', 'text_domain' ),
'description' => __( 'Question', 'text_domain' ),
'labels' => $labels,
'supports' => array( 'title', 'editor', 'author', 'comments', 'revisions', 'custom-fields', 'page-attributes', ),
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => true,
'show_in_admin_bar' => true,
'menu_position' => 20,
'can_export' => true,
'has_archive' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'rewrite' => $rewrite,
'capability_type' => 'post',
);
register_post_type( 'question', $args );
}
add_action( 'init', 'question_post_type', 0 );
Taxonomie
if ( ! function_exists('custom_question_taxonomy') ) {
// Register Custom Taxonomy
function custom_question_taxonomy() {
$labels = array(
'name'
=> _x( 'Question Types', 'Taxonomy General Name', 'text_domain' ),
'singular_name' => _x( 'Question Type', 'Taxonomy Singular Name', 'text_domain' ),
'menu_name' => __( 'Question Type', 'text_domain' ),
'all_items' => __( 'All Question Types', 'text_domain' ),
'parent_item' => __( 'Parent Question Type', 'text_domain' ),
'parent_item_colon' => __( 'Parent Question Type:', 'text_domain' ),
'new_item_name' => __( 'New Question Type', 'text_domain' ),
'add_new_item' => __( 'Add Question Type', 'text_domain' ),
'edit_item' => __( 'Edit Question Type', 'text_domain' ),
'update_item' => __( 'Update Question Type', 'text_domain' ),
'separate_items_with_commas' => __( 'Separate Question Types with commas', 'text_domain' ),
'search_items' => __( 'Search Question Type', 'text_domain' ),
'add_or_remove_items' => __( 'Add or remove Question Types', 'text_domain' ),
'choose_from_most_used' => __( 'Choose from the most used Question Types', 'text_domain' ),
);
$rewrite = array(
'slug' => 'question-type',
'with_front' => false,
'hierarchical' => true,
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
'public' => true,
'show_ui' => true,
'show_admin_column' => true,
'show_in_nav_menus' => true,
'show_tagcloud' => true,
'rewrite' => $rewrite,
);
register_taxonomy( 'question-type', 'question', $args );
}
add_action( 'init', 'custom_question_taxonomy', 0 );
}
Requête
function question_posts_query( $query ) {
if ( $query->is_post_type_archive( 'question' ) || $query->is_page(3001) && $query->is_main_query() ) {
$query->set( 'post_type', 'question' );
}
return $query;
}
add_filter( 'pre_get_posts', 'question_posts_query' );
Ma boucle de page
<?php if (have_posts()) :
while (have_posts() ) : the_post(); ?>
<div class="entry">
<div class="post-content">
<?php the_content(__('Read More »', 'gp_lang')); ?>
<?php the_terms( $post->ID, 'question-type', '<div class="category"><span>Category: </span>', '', '</div>' ); ?>
</div>
</div>
<?php endwhile; ?>
<?php endif; ?>
Changer une requête pour le type de message page
via pre_get_posts
est un peu délicat, et ne vaut peut-être pas les problèmes potentiels impliqués. Si vous inspectez le code SQL généré, il recherche votre nom de page demandé dans le type de message question
, raison pour laquelle vous obtenez le code 404.
La solution consiste à supprimer la page. Par conséquent, WordPress charge par défaut une archive de type publication ou conserve la page et utilise WP_Query
dans le modèle pour charger les publications personnalisées.