web-dev-qa-db-ja.com

wp_reset_postdataはカテゴリページには機能しません

私は現在のURLを参照するためにthe_permalink()を使用するプラグインテンプレートによって生成されたいくつかの投稿といくつかのコンテンツを表示するカテゴリテンプレートを持っています。カテゴリテンプレートは次のようになります(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

...

そしてteams-header.phpファイルは次のようになります。

...

<?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>

問題は、プラグインテンプレートが最初に表示された投稿URLを現在のURLとして(the_permalink()を使って)表示しているのであり、カテゴリのURLではないことです。 wp_reset_postdata()は現在の投稿データをリセットするはずですが、何かが足りないかもしれません。何か案が?

1
Manolo

投稿がレンダリングされた後に$postnullに設定するだけで解決しました。

<?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

Get_category_link($ Id)を使ってカテゴリIDを取得し、パーマリンクを取得することができます。

0
ma_dev_15