重写WordPress URL以显示CPT元字段数据

时间:2015-11-12 作者:dijon

我需要一个重写规则。我为“Books”设置了一个自定义帖子类型,每本书都有一个可重复的章节字段(使用ACF Pro)。

我添加了一个query_var 对于chapter 使用下面的代码。。。

// Add chapter to query vars array
function add_query_vars_filter( $vars ){
  $vars[] = "chapter";
  return $vars;
}
add_filter( \'query_vars\', \'add_query_vars_filter\' );
single-books.php 模板页面,我有一个代码来捕获query_var 并显示图书概述或章节元字段。。。

if (get_query_var(\'chapter\') == \'\') {

    // show book title and content

} elseif (get_query_var(\'chapter\') >= 1) {

    $chapter_no = (get_query_var( \'chapter\', 1 ) - 1); //minus one as first array row has index of 0.

    $rows = get_field(\'chapter\'); // get all the rows
    $chapter = $rows[$chapter_no]; // get the row given from query_var

    // show chapter fields from ACF array.
    // $chapter[\'title\']
    // $chapter[\'content\']
    // $chapter[\'image\']

};
所以的urlChapter 1 看起来像这样。。。

www.example.com/books/book-title/?chapter=1

这很好,但出于SEO目的,我希望url看起来更漂亮,如下面的示例。。。

www.example.com/books/book-title/1/chapter-title/

我看了一下抄本,尝试了以下方法。。。

function custom_rewrite_basic() {
  add_rewrite_rule(\'^books/([^/]*)/([0-9]+)/?\', \'index.php?post_type=books&chapter=$matches[1]\', \'top\');
}
add_action(\'init\', \'custom_rewrite_basic\');
我没有从中得到任何东西,也不确定我需要做什么/如果可能的话。谁能给我指出正确的方向,或者告诉我如何创建重写规则。

谢谢

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

默认情况下,post type查询变量与post type slug相同。未经测试,但这应该有效-

function custom_rewrite_basic() {
    add_rewrite_rule(
        \'^books/([^/]+)/([0-9]+)/([^/]+)/?\',
        \'index.php?books=$matches[1]&chapter=$matches[2]\',
        \'top\'
    );
}
add_action(\'init\', \'custom_rewrite_basic\');
$matches[3] 将包含章节slug,但如果不需要它来检索章节,则不必设置它。

重写规则在添加/更改后需要刷新。访问设置>永久链接页面将刷新它们,而无需调用flush_rewrite_rules 你自己

重写规则只处理传入的请求,由您为每个章节生成正确的URL,但这应该只是获取章节数据并将数字/标题附加到post permalink的问题。类似这样:

$rows = get_field(\'chapter\');
foreach( $rows as $index => $row ){
    echo get_permalink() . \'/\' . ( $index + 1 ) . \'/\' . sanitize_title( $row[\'title\'] ) . \'/\';
}
此外,为了保持模板整洁,您可以filter single_template, 检查chapter 设置了查询变量,并为章节加载与主页不同的模板。

相关推荐