使用 "fake pages" 创建子页面的子页面
Create sub page of sub pages using "fake pages"
我发现这个 tutorial 可以制作所谓的假页面,因此我可以动态创建带有自定义字段的页面。它工作得很好,但我需要调整它以满足我的需要。
例如,如果一本书有来自不同来源的评论:
mysite.com/books/to-kill-mockingbird/reviews/id-for-review
这意味着 to-kill-mockingbird
是 post 类型书和 id-for-review
的 slug是 post 类型评论的鼻涕虫。我可以很容易地通过删除 books/to-kill-mockingbird
来实现它,只需要 mysite.com/reviews/id-for-review
,但我更喜欢完整 url.
有什么建议吗?
我正在尝试创建一个新的重写规则,将 id-for-review
放入查询变量中。为此,我添加了 $review-id
。
这是我试图制定的规则
if ($slug == 'reviews') {
$newrules['books/([^/]+)/' . $slug . '/([^/]+)/?'] = 'index.php?book=$matches[1]&fpage=' . $slug . '&review-id=$matches[2]';
$newrules['books/([^/]+)/' . $slug . '/?$'] = 'index.php?book=$matches[1]&fpage=' . $slug;
}
else
{
$newrules['books/([^/]+)/' . $slug . '/?$'] = 'index.php?book=$matches[1]&fpage=' . $slug;
}
我有一个名为 single-book.php 的模板,其中使用了正确的模板:
$current_fp = get_query_var('fpage');
$review-id = get_query_var('review-id');
if (!$current_fp) {
get_template_part( 'single', 'book-index' );
} else if ($current_fp == 'books') {
if (!$review-id) {
get_template_part( 'single', 'book-reviews' );
}
else
{
get_template_part( 'single', 'book-review' );
}
};
如果我现在转到 /books/to-kill-mockingbird/reviews/,它会使用列出所有评论的模板。但是我去review的时候好像用的是标准的WordPress模板。
这是我的 .htaccess:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
在对我的问题进行一些调整和编辑之后,我似乎比我想象的更接近答案。我的大部分代码现在都是正确的。
这里是教程示例中需要替换的规则。这被放在 foreach 循环中,并为 'reviews'.
创建两个规则
if ($slug == 'reviews') {
$newrules['books/([^/]+)/' . $slug . '/([^/]+)/?'] = 'index.php?book=$matches[1]&fpage=' . $slug . '&review-id=$matches[2]';
$newrules['books/([^/]+)/' . $slug . '/?$'] = 'index.php?book=$matches[1]&fpage=' . $slug;
}
else
{
$newrules['books/([^/]+)/' . $slug . '/?$'] = 'index.php?book=$matches[1]&fpage=' . $slug;
}
现在在单个 books.php 模板中,使用它来获得正确的模板:
$current_fp = get_query_var('fpage');
$review-id = get_query_var('review-id');
if (!$current_fp) {
get_template_part( 'single', 'book-index' );
} else if ($current_fp == 'books') {
if (!$review-id) {
get_template_part( 'single', 'book-reviews' );
}
else
{
get_template_part( 'single', 'book-review' );
}
};
现在在 single-book-review.php 模板中,您可以使用它根据查询 var:
中的 slug 获取 post 数据
$review_id = get_query_var('review-id');
$post = get_page_by_path( $review_id, OBJECT, 'review' )
还请记得转到设置 -> 永久链接 并在更改规则时单击保存以刷新规则。
我发现这个 tutorial 可以制作所谓的假页面,因此我可以动态创建带有自定义字段的页面。它工作得很好,但我需要调整它以满足我的需要。
例如,如果一本书有来自不同来源的评论:
mysite.com/books/to-kill-mockingbird/reviews/id-for-review
这意味着 to-kill-mockingbird
是 post 类型书和 id-for-review
的 slug是 post 类型评论的鼻涕虫。我可以很容易地通过删除 books/to-kill-mockingbird
来实现它,只需要 mysite.com/reviews/id-for-review
,但我更喜欢完整 url.
有什么建议吗?
我正在尝试创建一个新的重写规则,将 id-for-review
放入查询变量中。为此,我添加了 $review-id
。
这是我试图制定的规则
if ($slug == 'reviews') {
$newrules['books/([^/]+)/' . $slug . '/([^/]+)/?'] = 'index.php?book=$matches[1]&fpage=' . $slug . '&review-id=$matches[2]';
$newrules['books/([^/]+)/' . $slug . '/?$'] = 'index.php?book=$matches[1]&fpage=' . $slug;
}
else
{
$newrules['books/([^/]+)/' . $slug . '/?$'] = 'index.php?book=$matches[1]&fpage=' . $slug;
}
我有一个名为 single-book.php 的模板,其中使用了正确的模板:
$current_fp = get_query_var('fpage');
$review-id = get_query_var('review-id');
if (!$current_fp) {
get_template_part( 'single', 'book-index' );
} else if ($current_fp == 'books') {
if (!$review-id) {
get_template_part( 'single', 'book-reviews' );
}
else
{
get_template_part( 'single', 'book-review' );
}
};
如果我现在转到 /books/to-kill-mockingbird/reviews/,它会使用列出所有评论的模板。但是我去review的时候好像用的是标准的WordPress模板。
这是我的 .htaccess:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
在对我的问题进行一些调整和编辑之后,我似乎比我想象的更接近答案。我的大部分代码现在都是正确的。
这里是教程示例中需要替换的规则。这被放在 foreach 循环中,并为 'reviews'.
创建两个规则if ($slug == 'reviews') {
$newrules['books/([^/]+)/' . $slug . '/([^/]+)/?'] = 'index.php?book=$matches[1]&fpage=' . $slug . '&review-id=$matches[2]';
$newrules['books/([^/]+)/' . $slug . '/?$'] = 'index.php?book=$matches[1]&fpage=' . $slug;
}
else
{
$newrules['books/([^/]+)/' . $slug . '/?$'] = 'index.php?book=$matches[1]&fpage=' . $slug;
}
现在在单个 books.php 模板中,使用它来获得正确的模板:
$current_fp = get_query_var('fpage');
$review-id = get_query_var('review-id');
if (!$current_fp) {
get_template_part( 'single', 'book-index' );
} else if ($current_fp == 'books') {
if (!$review-id) {
get_template_part( 'single', 'book-reviews' );
}
else
{
get_template_part( 'single', 'book-review' );
}
};
现在在 single-book-review.php 模板中,您可以使用它根据查询 var:
中的 slug 获取 post 数据$review_id = get_query_var('review-id');
$post = get_page_by_path( $review_id, OBJECT, 'review' )
还请记得转到设置 -> 永久链接 并在更改规则时单击保存以刷新规则。