web-dev-qa-db-fra.com

wp_reset_postdata ne fonctionne pas pour la page de catégorie

J'ai un modèle de catégorie qui affiche certains messages et du contenu généré par un modèle de plug-in, qui utilise the_permalink() pour faire référence à l'URL actuelle. Le modèle de catégorie ressemble à ceci (category.php):

<?php $categoryQuery = get_the_category(); ?>
<?php $parentCategory = get_term_by('id', $categoryQuery[0]->parent, 'category') ?>
<?php if ($parentCategory->slug !== 'teams' && $categoryQuery[0]->slug !== 'teams') {
    get_template_part( 'archive', get_post_format() );
} else {

    get_header(); ?>

    <div class="container main-outer">

        <?php set_query_var( 'categorySlug', $categoryQuery[0]->slug ); ?>
        <?php set_query_var( 'categoryName', $categoryQuery[0]->name ); ?>
        <?php get_template_part( 'teams-header', get_post_format() ); ?>
<?php } ?>

...

// Here goes the plugin template

...

Et le fichier teams-header.php ressemble à ceci:

...

<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$featpost = new WP_Query(array(
    'category_name' => $categorySlug,
    'showposts' => 5,
    'paged' => $paged,
));
$newnum = 1;
$maxNumPages = $featpost->max_num_pages;
while($featpost->have_posts()) : $featpost->the_post();
    ...
    $newnum++;
endwhile; ?>
<?php wp_reset_postdata() ?>
<div class="pagination-links">
    <br />
    <?php next_posts_link('&laquo; Older entries', $maxNumPages) ?>
    &nbsp;&nbsp;&nbsp;
    <?php previous_posts_link('Recent entries &raquo;') ?>
</div>

Le problème est que le modèle de plug-in affiche la première URL de publication affichée sous la forme de l'URL actuelle (avec the_permalink()), et non la catégorie un. wp_reset_postdata() devrait réinitialiser les données de publication actuelles, mais peut-être qu'il me manque quelque chose. Une idée?

1
Manolo

Je l'ai résolu en mettant simplement $post à null après le rendu des publications:

<?php $categoryQuery = get_the_category(); ?>
<?php $parentCategory = get_term_by('id', $categoryQuery[0]->parent, 'category') ?>
<?php if ($parentCategory->slug !== 'teams' && $categoryQuery[0]->slug !== 'teams') {
    get_template_part( 'archive', get_post_format() );
} else {

    get_header(); ?>

    <div class="container main-outer">

        <?php set_query_var( 'categorySlug', $categoryQuery[0]->slug ); ?>
        <?php set_query_var( 'categoryName', $categoryQuery[0]->name ); ?>
        <?php get_template_part( 'teams-header', get_post_format() ); ?>

        <?php $post = null; // This solves the problem and the_permalink() is the category page ?>

<?php } ?>

...

// Here goes the plugin template

...
0
Manolo

Vous pouvez obtenir l'identifiant de la catégorie et le lien permanent en utilisant get_category_link ($ Id);

0
ma_dev_15