如何在同一个URL中拥有多个重写端点?

时间:2018-03-17 作者:Firsh - justifiedgrid.com

我想向任何URL添加多个query\\u var/value对。例如,页面的基本URL为:

example.com/nice-page/
我已经可以实现一个端点,如(例如,页面子库):

example.com/nice-page/my-gallery/animals/cats
在哪里my-gallery 是query\\u var和animals/cats 是它的价值。使用此选项:

add_rewrite_endpoint(\'my-gallery\', EP_PAGES);
add_rewrite_endpoint(\'my-lightbox\', EP_PAGES);
我还需要这个来工作:

example.com/nice-page/my-gallery/animals/cats/my-lightbox/1234
我想在哪里注册my-lightbox 作为附加端点或query\\u var,因为它可以独立于my-gallery, 例如:

example.com/another-page/my-lightbox/2345
目前我得到了整个animals/cats/my-lightbox/1234 作为值。I can\'t make WP aware that a new query_var starts at my-lightbox when my-gallery is alrady present. 似乎重写标记作用于整个输入URL,端点作用于输入URL的末尾,但regex$end锚点始终存在。甚至可以使用重写api将多个query\\u vars修饰成一个复杂的URL吗?

1 个回复
SO网友:Sally CJ

我还需要这个来工作:

example.com/nice-page/my-gallery/animals/cats/my-lightbox/1234
我想在哪里注册my-lightbox 作为附加端点或query\\u var,因为它可以独立于my-gallery, 例如:

example.com/another-page/my-lightbox/2345
下面是一个使用add_rewrite_rule():

add_action( \'init\', function() {
    // This will let you use get_query_var( \'my-gallery\' ).
    add_rewrite_endpoint( \'my-gallery\', EP_PAGES );

    // This will let you use get_query_var( \'my-lightbox\' ).
    add_rewrite_endpoint( \'my-lightbox\', EP_PAGES );

    add_rewrite_rule(
        \'(.?.+?)/(?:my-gallery/(.+?)/my-lightbox/(\\d+)|my-gallery/(.+?)|/?my-lightbox/(\\d+))/?$\',
        \'index.php?pagename=$matches[1]&my-gallery=$matches[2]&my-lightbox=$matches[3]\',
        \'top\'
    );

    // This is just for testing purposes. You should instead go to the Permalink
    // Settings page and click on the Save Changes button to flush the rules. =)
    //flush_rewrite_rules();
} );
[编辑]备用版本,不使用add_rewrite_endpoint():

add_filter( \'query_vars\', function( $qv ) {
    // This will let you use get_query_var( \'my-gallery\' ).
    $qv[] = \'my-gallery\';

    // This will let you use get_query_var( \'my-lightbox\' ).
    $qv[] = \'my-lightbox\';

    return $qv;
} );

add_action( \'init\', function() {
    add_rewrite_rule(
        \'(.?.+?)/(?:my-gallery/(.+?)/my-lightbox/(\\d+)|my-gallery/(.+?)|/?my-lightbox/(\\d+))/?$\',
        \'index.php?pagename=$matches[1]&my-gallery=$matches[2]&my-lightbox=$matches[3]\',
        \'top\'
    );
} );
我在这些URL上进行了测试:

示例。com/nice page/my gallery/anives/cat/my lightbox/1234示例。com/nice-page/my-gallery/anives/cats示例。com/nice page/my lightbox/1234。。哪里get_query_var( \'my-gallery\' ) 退货animals/cats (对于第一个和第二个URL)和get_query_var( \'my-lightbox\' ) 退货1234 (对于第一个和第三个URL)。

结束

相关推荐

Dynamic Endpoints

我在WordPress外部有一个数据库表,需要为其创建端点。我已经创建了一个页面/cars/ 我计划使用页面模板生成链接。我希望url看起来像/cars/camaro/ ()/cars/%model%/ ). 起初,我认为我可以使用端点,但不知道如何根据从模型表中提取的段塞使它们动态。我也不确定使用Permalink结构标签是更容易还是更好。我甚至不完全确定从哪里开始,我以前创建过“静态”端点,所以我有一个基础可以跳出,但当我到达request 我不知道该怎么办。/** * Add endpoi