web-dev-qa-db-de.com

Pre_get_posts Gibt 404 für benutzerdefinierten Beitragstyp

Ich versuche, die Abfrage auf einer Unterseite mit dem Namen "Frage stellen" zu filtern, um alle kürzlich von Benutzern gestellten Fragen aufzulisten. Beim Aufrufen der Seite wird jedoch eine 404 angezeigt. Das Löschen der Permalink-Struktur hat das Problem nicht behoben. Es ist derzeit auf Monat und Name eingestellt.

Das Erstellen einer neuen Frage funktioniert ordnungsgemäß und ich kann auf die neuen Beiträge zugreifen. Die benutzerdefinierten Taxonomien funktionieren ebenfalls ordnungsgemäß, die Archivseiten jedoch nicht.

Dies ist der Code, den ich verwende.

Post-Typ

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

}

Abfrage

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

Meine Seite Schleife

<?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; ?>
3
Matt Av

Das Ändern einer Abfrage für den Post-Typ page über pre_get_posts ist etwas schwierig und möglicherweise die damit verbundenen potenziellen Probleme nicht wert. Wenn Sie das generierte SQL überprüfen, sucht es nach Ihrem angeforderten Seitennamen im Post-Typ question, weshalb Sie den 404 erhalten.

Die Lösung besteht darin, die Seite zu löschen, sodass WordPress standardmäßig ein Beitragstyp-Archiv lädt, oder die Seite beizubehalten und WP_Query in der Vorlage zu verwenden, um die benutzerdefinierten Beiträge zu laden.

2
Milo