Kategorien für benutzerdefinierte WordPress-Beitragstypen

Lesezeit: 4 Minuten

Benutzer-Avatar
Status4

Hey. Ich verwende einen benutzerdefinierten Beitragstyp in WordPress. Ich registriere diesen benutzerdefinierten Beitragstyp wie folgt:

        register_post_type("lifestream", array(
            'label' => 'Lifestream',
            'public' => true,
            'hierarchical' => true,
            'menu_position' => 5,
            'supports' => array('title','editor','author','thumbnail','comments','custom-fields'),
            'taxonomies' => array('category','post_tag'),
            'query_var' => true,
            'publicly_queryable' => true,
            'exclude_from_search' => false,
            'caller_get_posts' => 1

        ));
        register_taxonomy_for_object_type('category', 'lifestream');
        register_taxonomy_for_object_type('post_tag', 'lifestream');

Im Theme (dem Loop-Template) kombiniere ich gerne Posts und meinen benutzerdefinierten Post-Typ, dafür verwende ich query_posts() mit diesen Parametern:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
    'post_type' => array('post', 'lifestream'),
    'paged' => $paged,
    'cat' => $wp_query->get('cat'),
    'tag' => $wp_query->get('tag'),
    'year' => $wp_query->get('year'),
    'monthnum' => $wp_query->get('monthnum'),
    'post_status' => 'publish',
    'showposts' => 3
);
query_posts($args); 


# the loop     
while ( have_posts() ) : the_post(); 
# markup
endwhile;


if($wp_query->max_num_pages > 1): 
# next_posts_link / previous_posts_link
endif;

wp_reset_query();   

Das funktioniert bisher. Aber ich habe Probleme mit den Kategorie- und Tag-Seiten. Wenn ich die Startseite aufrufe, ist alles in Ordnung und ich kann durch die Seiten blättern und bekomme die richtigen Ergebnisse.

Und wenn ich eine ausgelagerte URL aufrufe, zB /category/mycat/page/2, wird ein 404 geworfen. Aber es sollte auf jeden Fall Beiträge geben. Egal ob es benutzerdefinierte Posts oder normale Posts in der Kategorie gibt. Ich nehme an, dass meine Parameter für query_posts() nicht korrekt sind, aber ich weiß es nicht …

Es scheint, dass $wp_query->max_num_pages den falschen Wert hat. Aber wieso? Registriere ich die Taxonomien (ich verwende gerne Kategorien und Tags für meine benutzerdefinierten Beitragstypen) korrekt?

Hast du eine Idee, was zu tun ist? Danke vielmals!

Ich bin gerade auf das gleiche Problem gestoßen und konnte die Lösung nirgendwo finden! Die Internets sind voll von Ressourcen zu diesem Thema, aber keine liefert die richtige Antwort auf das Problem.

Hier ist die richtige Antwort für alle Suchenden. Geben Sie den folgenden Code ein Funktionen.php im Root-Verzeichnis deines Themes.

function init_category($request) {
    $vars = $request->query_vars;
    if (is_category() && !is_category('Blog') && !array_key_exists('post_type', $vars)) :
        $vars = array_merge(
            $vars,
            array('post_type' => 'any')
        );
        $request->query_vars = $vars;
    endif;
    return $request;
}
add_filter('pre_get_posts', 'init_category');

Alle Credits gehen an Mike wer hat das hier gepostet WordPress.com. Prost!

  • Ich wollte Ihnen gerade diese Art von Code aus meinen Notizen geben. Gut erledigt. pre_get_posts ist jedoch schwer zu streiten!

    – Ben Racicot

    13. August 2013 um 17:10 Uhr

  • Das funktioniert für mich, habe das gleiche Problem mit CPT, danke

    – Herr Roman

    2. November 2014 um 22:01 Uhr

Benutzer-Avatar
David

Stellen Sie sicher, dass Sie Folgendes hinzufügen:

'paged' => get_query_var('paged')

zu Ihren $args und es sollte das Paging akzeptieren.

Mehr hier

  • Hallo David. Danke, aber wie Sie sehen können, übergebe ich das Paged-Argument an query_posts(). Oder stimmt da was nicht?

    – Status4

    10. Februar 2011 um 9:01 Uhr

  • Hoppla, mein Fehler. Ich würde vorschlagen, dass Sie eine machen print_r($args); um genau zu sehen, was gesendet wird – das könnte Ihr erster Hinweis auf das Problem sein. Eine andere Sache: showposts ist veraltet, versuchen Sie es stattdessen mit posts_per_page. Schließlich könnten Sie versuchen, explizit “nopaging” => false zu setzen

    – David

    12. Februar 2011 um 22:03 Uhr


  • Ich bin daran interessiert, dies zu lösen. Ich tat print_r($wp_query); Es scheint, dass $found_posts 0 ist, und Dokumente Sagen wir, es berechnet $max_num_pages daraus. Zeit, sich die Quelle anzusehen, denke ich.

    – Ben Autor

    7. Oktober 2011 um 21:39 Uhr


Benutzer-Avatar
Schuhkarton

Versuchen Sie in der archive.php Folgendes:

query_posts( array(
  'post_type' => 'lifestream',
  'posts_per_page' => 6,
  'orderby' => 'menu_order',
  'orderby' => 'date',
  'order' => 'ASC',
  'paged' => '' . get_query_var('paged')
));

if ( have_posts() ) : while ( have_posts() ) : the_post();

endwhile; else:
endif;

Für die Links zur nächsten und vorherigen Seite verwende ich:

next_posts_link('Older Entries', $wp_query->max_num_pages);
previous_posts_link('Newer Entries', $wp_query->max_num_pages);

1368390cookie-checkKategorien für benutzerdefinierte WordPress-Beitragstypen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy