我正在开发一个插件,它使用GET参数来决定向用户呈现什么(例如:登录、注销、更改密码等等),问题是,这在标准的wordpress主题中有效,但当我每次使用参数调用url时,都更改为我的客户端主题(Sereno),它会呈现一个帖子页面。。。实例
如果有电话http://localhost/myclient/?page_id=822&action=passresset在标准的wp主题中,它将显示我想要的内容,但如果对sereno的更改显示了一个帖子页面,对我来说这很奇怪,因为它没有显示404错误,就像这样识别URL一样有效
我正在尝试修复这个问题,但我不知道从哪里开始,我想问题应该是模板决定它将使用何种循环的方式,但我不知道****的脚本在哪里。。
请帮忙!!
--------------更新---------------
首先,福霞非常感谢你花时间帮助我。。。
我使用一个widget来处理一类用户(与WP的用户不同),这些用户将有权登录、注销、更改密码、重新设置密码并通过表单发送请求,因此我的widget类如下所示
class SucursalWidget extends baseWidget {
public function __construct() {
$widgetOptions = [
\'classname\' => \'SucursalWidget\',
\'description\' => \'Panel de búsqueda para las sucursales\',
];
parent::__construct(\'sucursalwidget\', "Widget para las sucursales", $widgetOptions);
}
public function login() {
//process user login
}
public function logout() {
session_destroy();
echo "<h2>Su sesion ha sido terminada</h2>";
$model = new LoginForm();
$this->renderPartial(\'loginform\', [\'model\' => $model]);
}
public function solicitud() {
//Gets a form an save it on db
}
/**
* Cambiar contraseña para usuario ya logeado
*/
public function passChange() {
}
/**
* Recuperar contraseña perdida vía email
*/
public function passResset() {
//PROCEESS pass resset
}
public function widget($args, $instance) {
$action = isset($_GET[\'action\']) ? $_GET[\'action\'] : \'login\';
switch ($action) {
case \'login\': {
$this->login();
}
break;
case \'logout\': {
$this->logout();
}
break;
case \'solicite\': {
$this->solicitud();
}
break;
case \'passchange\': {
$this->passChange();
}
break;
case \'passresset\': {
$this->passResset();
}
break;
default: {
echo "Página no encontrada";
}
break;
}
}
}
正如您在function小部件中所看到的,switch使用$\\u GET[\'action\']根据用户的操作来知道该做什么,当我使用常规的WP主题(如二十一五)时,这种方法工作得很好。我猜主题(名为Sereno)正在改变URL模式,因为当我放置任何额外的get参数时,它会显示一个帖子页面,如果出现问题,我预计会出现404错误,但由于某种原因,它会显示最后一篇帖子,我不知道在主题代码中搜索什么。。
SO网友:fuxia
WordPress正在删除所有未知(未注册)$_GET
处理请求时的参数(对于$_POST
).
您可以注册自定义变量,也可以使用filter_input()
. 这将访问原始的,不变的GET
参数。
如果您正在使用filter_input()
, 你必须加入pre_get_posts
更改获取的资源。
您还可以筛选query_vars
并在此处注册自定义变量。这将确保它得到保存。
add_filter( \'query_vars\', function ( $vars ) {
$vars[] = \'sereno\';
return $vars;
});
然后您可以通过访问它
get_query_var( \'sereno\' )
现在如果要显示一些自定义内容,您仍然必须以某种方式更改请求。