在重写标记固定链接中未找到Enpoint

时间:2015-11-17 作者:Howdy_McGee

我试图让XML提要显示漂亮的永久链接,而不是显示查询字符串。问题是我拿不到/products/ 尝试处理自定义重写模板标记时显示的端点。以下是我所拥有的:

/** Register Query Vars **/
function theme_custom_query_vars( $vars ){
    $vars[] = \'custom_category\';
    $vars[] = \'products\';
    return $vars;
}
add_filter( \'query_vars\', \'theme_custom_query_vars\' );

/** Register Endpoint **/
function theme_register_endpoints() {
    add_rewrite_rule( \'^products/?\', \'index.php?products=products\', \'top\' );
    add_rewrite_rule( \'^products/([^/])/?\', \'index.php?products=products&custom_category=$matches[2]\', \'top\' );

    add_rewrite_tag( \'%custom_category%\', \'([0-9])\' );
}
add_action( \'init\', \'theme_register_endpoints\' );
那很好-我的products 端点存在,我可以将其重定向到特定模板。现在的问题是wp_query 知道这一点custom_category 存在,并为其分配了一个值,传递$permalink 仅显示我的基本URL(http://domain.com/)所以我cannot 替换模板标记,因为它在我的$permalink 变量

/** Process our Rewrite Tag **/
function theme_rewrite_tags_filter( $permalink ) {
    global $wp_query;
    printf( \'<pre>%s</pre>\', print_r( $wp_query, 1 ) );
    die( $permalink );

    if( false !== strpos( $permalink, \'%custom_category%\' ) ) {
        die( \'made it!\' );
    }

    return $permalink;
}
add_filter( \'page_link\', \'theme_rewrite_tags_filter\' );
我必须在模板标记方面遗漏一些东西,或者我可能对端点的结构有误解,但是$permalink 只是没有显示products 端点或%custom_category% 模板标记:


The Situation

我正在使用一个外部API,它为我提供了一个项目和类别的XML提要。API使用类别ID并返回该类别中的项目。我想做的是:

创建端点products 显示所有可用类别:domain.com/products/?custom_category=2 然后把它改写成一个非常永久的domain.com/products/categoryname/ - 我不知道类别名称,所以我需要通过给定的ID向API询问类别名称。最后,以与上面类似的方式,我需要通过查询字符串获取给定的项目IDitem_id=17 并将其改写成一个我并不挑剔的永久链接:domain.com/products/productname/domain.com/products/categoryname/productname/ - 我不知道项目名称,所以我需要通过给定的ID向API询问项目名称。我必须在链接中使用ID,因为API很旧,不理解slug(因此我无法向API传递slug,也无法期望我需要传递某种ID的结果),但我希望从查询字符串中获取ID,点击API以获取名称,使其对URL友好并将其放入URL。

1 个回复
SO网友:Milo

重写标记不用于add_rewrite_rule. 如果要在设置>永久链接下的post permalink设置中使用标记,则标记将出现在传递给post_link 滤器我认为您需要将一个包含标记的新永久链接结构直接添加到重写对象中,以便在其中有一个自定义标记。目前,它是多余的,因为您已经添加了查询变量(其中add_rewrite_tag 也有)。还要注意的是,在第二条规则中custom_category 在中$matches[1]. 为您的page_link 过滤器,您可以使用传递给过滤器的第二个参数,即页面对象,来检查该页面是否具有custom_category 并在这种情况下构建所需的永久链接。

相关推荐

Dynamic Endpoints

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