向‘parse_request’添加一个挂钩,以便站点url/页面名/xyz忽略“xyz”

时间:2018-01-05 作者:Ameer Bacchus

我有一个独特的项目,我正在尝试原型化,其中页面的一些资产来自wordpress,而其他资产来自对远程API的请求。

目前,我使用一个名为“series”的页面,该页面使用此结构进行wp\\u get\\u远程调用,以将数据传递到该页面:

site\\u url/系列/?pname=xyz

并希望将其更改为漂亮的:site\\uURL/series/xyz

因此,其效果将是调用序列页,然后运行请求以从端点调用所需的数据。我需要尽快运行它,因为端点有我想设置为元描述的数据,加上大部分页面内容依赖于我检索的数据。

我一直在尝试使用挂钩“parse\\u request”,但我收到一条警告:无法修改已发送的标头信息标头。。可插拔。php

add_action( \'parse_request\', \'test_changes\' );

function test_changes( $query ) {

$request_uri_string = $_SERVER[\'REQUEST_URI\'];

echo $request_uri_string;
echo "<br>";

if( strpos($request_uri_string, \'series\') !== false ){   
    echo "theres a series here";
    unset($query->query_vars);
    $query->query_vars[ \'pagename\' ] = "series";
    $query->query_vars[ \'page\' ] = "";
    $query->request = "series";
    $query->matched_query = "pagename=series&page=";
} 
//See what is returned.
echo "<br><br><p>Parse Request</p>";
var_dump($query);

return $query;
}
试图深入了解为什么这不起作用,创建我想要的结果的解决方案,以及可能使用“parse\\u request”的其他一些方法。

1 个回复
SO网友:Milo

我只想添加一个重写规则,而不是尝试修改查询解析。

function wpd_series_query_var( $vars ){
    $vars[] = \'wpd_series\';
    return $vars;
}
add_filter( \'query_vars\', \'wpd_series_query_var\' );

function wpd_series_rewrite_rule() {
    add_rewrite_rule(
        \'^series/([^/]+)/?$\',
        \'index.php?pagename=series&wpd_series=$matches[1]\',
        \'top\'
    );
}
add_action( \'init\', \'wpd_series_rewrite_rule\' );
别忘了flush_rewrite_rules() 添加新的后。

然后你就可以wpd_series 之后的任何地方parse_query 与的操作get_query_var(\'wpd_series\').

结束

相关推荐

Random Alphanumeric Key URLs

我需要随机(和唯一)字母数字永久对齐。我查看了几个插件,但它们似乎都会以某种形式重定向到更长的URL。这不是我想要的,我想要改变永久链接。基本上,我想要像bit这样的URL。ly或9gag。com。我已经看过了,但在我的搜索中发现是空的-是否存在这样的插件?如果没有,是否有人能为我指明正确的方向,告诉我如何完成这一目标?我在PHP方面相当自给自足,但我还不太熟悉WordPress。我能想到的最简单的方法是add_filter(\"post_slug\", md5(rand())) (如果这是实际有效的代码