Pre_get_posts Da 404 en Tipo de publicación personalizada

3

Estoy tratando de filtrar la consulta en una subpágina llamada "Preguntar" para enumerar todas las preguntas recientes enviadas por los usuarios, pero obtengo un 404 cuando voy a la página. El lavado de la estructura del enlace permanente no solucionó el problema. Actualmente está configurado como Mes y Nombre.

La creación de una nueva pregunta funciona correctamente y puedo acceder a las nuevas publicaciones. Las taxonomías personalizadas también funcionan correctamente, sin embargo, las páginas de archivo no.

Este es el código que estoy usando.

Tipo de publicación

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

Taxonomy

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

}

Query

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

El bucle de mi página

<?php if (have_posts()) :
    while (have_posts() ) : the_post(); ?>

    <div class="entry">
        <div class="post-content">

          <?php the_content(__('Read More &raquo;', 'gp_lang')); ?>

          <?php the_terms( $post->ID, 'question-type', '<div class="category"><span>Category: </span>', '', '</div>' ); ?>
        </div>
    </div>

    <?php endwhile; ?>
<?php endif; ?>
    
pregunta Matt Av 18.02.2013 - 20:43

1 respuesta

2

Cambiar una consulta para el tipo de publicación page a través de pre_get_posts es un poco complicado, y tal vez no valga la pena los posibles problemas involucrados. Si inspeccionas el SQL generado, está buscando tu nombre de página solicitado en el tipo de publicación question , por lo que obtienes el 404.

La solución es eliminar la página, por lo que WordPress cargará un archivo de tipo de publicación de manera predeterminada, o mantendrá la página y usará WP_Query dentro de la plantilla para cargar las publicaciones personalizadas.

    
respondido por el Milo 18.02.2013 - 21:10

Lea otras preguntas en las etiquetas