$_GET参数在特定模板中不起作用

时间:2018-04-24 作者:Isan Rodriguez Trimiño

我正在开发一个插件,它使用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错误,但由于某种原因,它会显示最后一篇帖子,我不知道在主题代码中搜索什么。。

2 个回复
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\' ) 现在如果要显示一些自定义内容,您仍然必须以某种方式更改请求。

SO网友:Isan Rodriguez Trimiño

我发现了问题,问题是这个模板有分类定制,我评论道

require_once(\'library/core/twomediax-wp-customizations.php\'); // twomediax core custom types and taxonomies
此行在函数中。php,如果没有这种定制,它就可以工作,现在给我带来了模板小部件的其他问题,但我有一个路径可以遵循。。。现在我不得不与分类法作斗争

福霞再次感谢你帮助我

结束