我有一个自定义页面模板定义和工作正常。在这个特定的页面上,我想列出许多链接,并对它们分页,以便每页显示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?
谢谢
最合适的回答,由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提供的默认名称,即$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\' => __(\'«\'),
\'next_text\' => __(\'»\'),
\'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();
?>