在页面模板中循环自定义查询时,在页眉中添加<link rel=“Next”>和<link rel=“prev”>

时间:2018-06-27 作者:yofisim

我有一个自定义页面模板定义和工作正常。在这个特定的页面上,我想列出许多链接,并对它们分页,以便每页显示100个链接。

这是我的模板文件中的代码,工作方式完全符合我的要求

<div class="container">
<ul class="row listing-items">
    <?php
        $paged = ( get_query_var(\'paged\') ) ? get_query_var(\'paged\') : 1;
        $custom_args = array(
            \'post_type\' => \'page\',
            \'posts_per_page\' => 90,
            \'paged\' => $paged,
            \'order\' => \'ASC\',
            \'orderby\' => \'title\',
            \'post__not_in\' => array(\'6\',\'6371\',\'9522\',\'5038\',\'6380\',\'9521\',\'6385\',\'9276\',\'4159\',\'4087\',\'4085\',\'4082\'),
            \'post_parent__in\' => array(\'13\', \'154\', \'127\', \'162\', \'123\', \'167\', \'159\', \'121\',\'18675\',\'18676\',\'18677\',\'18678\',\'18679\',\'18680\',\'18681\',\'18682\',\'18683\',\'18684\',\'18685\',\'18687\',\'18688\',\'18689\',\'18690\',\'18691\',\'18692\',\'18693\',\'18695\',\'18696\',\'18697\',\'18699\',\'18700\',\'18701\',\'18702\',\'18703\',\'18704\',\'18694\',\'18709\',\'18705\',\'18710\',\'18706\',\'18707\',\'18718\',\'18719\',\'18720\',\'18721\',\'18722\',\'18723\',\'18724\',\'18725\',\'18726\',\'18711\',\'18727\',\'18728\',\'18729\',\'18730\',\'18731\',\'18732\',\'18716\',\'18733\',\'18734\',\'18712\',\'18735\',\'18736\',\'18737\',\'18738\',\'18739\',\'18740\',\'18741\',\'18742\',\'18743\',\'18744\',\'18745\',\'18746\',\'18717\',\'18747\',\'18686\',\'18708\',\'18748\',\'18713\',\'18749\',\'18750\',\'18751\',\'18714\',\'18752\',\'18698\',\'18753\',\'18754\',\'18755\',\'18757\',\'18758\',\'18759\',\'18760\',\'18715\',\'18761\',\'18762\',\'18756\'),
        );
        $wp_query = new WP_Query( $custom_args );
        if ( $wp_query->have_posts() ) {
            while ( $wp_query->have_posts() ) : $wp_query->the_post();
                echo \'<li class="listing-item col-12 col-sm-12 col-md-12 col-lg-6 col-xl-6">\';
                echo \'<a href="\'.get_the_permalink().\'">Voiture \'.get_the_title().\'</a></li>\';
            endwhile;
            wp_reset_postdata();
        }
    ?>
</ul>

现在,为了SEO的目的,我想添加我的标题rel Next和Prev,这样Google就可以理解分页,并且可以理解哪个页面是当前页面,哪个页面是Next和Prev。

这是我在函数中的代码。php

function rel_next_prev() {
global $paged;

if ( get_previous_posts_link() ) {
    echo \'<link rel="prev" href="\'.get_pagenum_link( $paged - 1 ).\'" />\';
}
if ( get_next_posts_link() ) {
    echo \'<link rel="next" href="\'.get_pagenum_link( $paged + 1 ).\'" />\';
}
}
add_action( \'wp_head\', \'rel_next_prev\' );
不幸的是,这是部分工作。我总是在标题中获得Rel-Prev链接,但当前不是基于我所做的查询。让我解释一下:

设置查询时,我有19页,格式如下:

http://localhost:3000/villes/page/2/
因此,如果我将URL更改为(404)

    http://localhost:3000/villes/page/222/
我仍然在头球221分得到相对优势。

因此,要继续:

How do I properly set rel next/prev in the header based on the current query I\'m doing?

谢谢

1 个回复
最合适的回答,由SO网友:yofisim 整理而成

经过一个晚上的反复思考,多亏了Joost de Valk(Yoast SEO插件作者),我找到了解决方案。

按照此线程:https://github.com/Yoast/wordpress-seo/issues/437 , 我想以我的方式实现的目标,is undoable, or at least, a very bad practice.

如果希望自定义查询具有默认分页并在标头中具有rel next prev,则需要在之前调用它get_header();

理论解决方案要使自定义查询与默认WP和Yoast函数一起工作,您需要:

将您的查询BEFORE get_header();$wp_query

    针对我之前使用的代码实践解决方案get_template_part();.

    创建一个自定义页面模板,参考页面ID或页面段塞。更多信息请点击此处:https://developer.wordpress.org/themes/template-files-section/page-template-files/

    get_header(); 作用

    务必重新调整代码,使其以您想要的方式显示

这是我的代码,它按预期工作。Be sure to keep the rel_next_prev(); function I placed in my functions.php

最终结果:

<?php
$paged = ( get_query_var(\'paged\') ) ? get_query_var(\'paged\') : 1;
$custom_args = array(
    \'post_type\' => \'page\',
    \'posts_per_page\' => 90,
    \'paged\' => $paged,
    \'order\' => \'ASC\',
    \'orderby\' => \'title\',
    \'post__not_in\' => array(\'6\',\'6371\',\'9522\',\'5038\',\'6380\',\'9521\',\'6385\',\'9276\',\'4159\',\'4087\',\'4085\',\'4082\'),
    \'post_parent__in\' => array(\'13\', \'154\', \'127\', \'162\', \'123\', \'167\', \'159\', \'121\',\'18675\',\'18676\',\'18677\',\'18678\',\'18679\',\'18680\',\'18681\',\'18682\',\'18683\',\'18684\',\'18685\',\'18687\',\'18688\',\'18689\',\'18690\',\'18691\',\'18692\',\'18693\',\'18695\',\'18696\',\'18697\',\'18699\',\'18700\',\'18701\',\'18702\',\'18703\',\'18704\',\'18694\',\'18709\',\'18705\',\'18710\',\'18706\',\'18707\',\'18718\',\'18719\',\'18720\',\'18721\',\'18722\',\'18723\',\'18724\',\'18725\',\'18726\',\'18711\',\'18727\',\'18728\',\'18729\',\'18730\',\'18731\',\'18732\',\'18716\',\'18733\',\'18734\',\'18712\',\'18735\',\'18736\',\'18737\',\'18738\',\'18739\',\'18740\',\'18741\',\'18742\',\'18743\',\'18744\',\'18745\',\'18746\',\'18717\',\'18747\',\'18686\',\'18708\',\'18748\',\'18713\',\'18749\',\'18750\',\'18751\',\'18714\',\'18752\',\'18698\',\'18753\',\'18754\',\'18755\',\'18757\',\'18758\',\'18759\',\'18760\',\'18715\',\'18761\',\'18762\',\'18756\'),
);
$wp_query = new WP_Query( $custom_args );
get_header();
get_template_part(\'template-parts/headers/header\', \'listing\');
?>

<div class="container">
    <ul class="row listing-items">
        <?php
        if ( $wp_query->have_posts() ) {
            while ( $wp_query->have_posts() ) :
                $wp_query->the_post();
                ?>
                <li class="listing-item col-12 col-sm-12 col-md-12 col-lg-6 col-xl-6">
                    <a href="<?php get_the_permalink(); ?>">Serrurier <?php the_title();?></a></li>
            <?php
            endwhile;
            wp_reset_postdata(); // reset the query
        }
        ?>
    </ul>

    <div class="row pagination">
        <?php $paginationArgs = array(
            \'base\'            => get_pagenum_link(1) . \'%_%\',
            \'format\'          => \'page/%#%/\',
            \'total\'           => $wp_query->max_num_pages,
            \'current\'         => $paged,
            \'show_all\'        => true,
            \'end_size\'        => 1,
            \'mid_size\'        => 1,
            \'prev_next\'       => True,
            \'prev_text\'       => __(\'&laquo;\'),
            \'next_text\'       => __(\'&raquo;\'),
            \'type\'            => \'plain\',
            \'add_args\'        => false,
            \'add_fragment\'    => \'\'
        );
        ?>
        <div class="col-12 heading">
            <span>Page <?php echo $paged; ?> sur <?php echo $wp_query->max_num_pages; ?></span>
        </div>

        <div class="col-12 items">
            <?php echo paginate_links($paginationArgs); ?>
        </div>
    </div>


</div>

<?php
get_footer();
?>

结束