使用“假页面”创建子页面的子页面

时间:2016-03-23 15:38:53

标签: php wordpress

我发现这个tutorial来制作所谓的虚假页面,因此我可以使用自定义字段动态创建页面。它工作得很好,但我需要调整它以满足我的需求。

例如,如果一本书有来自不同来源的评论:

  

mysite.com/books/to-kill-mockingbird/reviews/id-for-review

这意味着 to-kill-mockingbird 是帖子类型书籍的slug, id-for-review 是帖子类型评论的slug。我可以通过删除 books/to-kill-mockingbird 轻松实现此功能,只需 mysite.com/reviews/id-for-review ,但我更喜欢拥有完整的网址。

有什么建议吗?

我正在尝试创建一个新的重写规则,将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 /,它会使用该模板列出所有评论。但是当我进行审核时,它似乎使用标准的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

1 个答案:

答案 0 :(得分:0)

似乎在经过一些调整和编辑我的问题之后,我接近了答案而不是我的想法。我的大多数代码现在都是正确的。

以下是教程中示例中需要替换的规则。这被放在foreach循环中,并为&#39; review&#39;创建了两个规则。

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-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获取帖子数据:

$review_id = get_query_var('review-id');

$post = get_page_by_path( $review_id, OBJECT, 'review' )

还要记得转到设置 - &gt;永久链接并在更改规则时单击“保存”以刷新规则。