短码内的重定向函数

时间:2013-06-01 作者:Harish Chouhan

I am developing a free plugin 将外部支持系统连接到WordPress,以便能够验证WordPress上的用户。

为此,当前从外部系统将用户发送到WordPress的登录页面,并在最后显示此信息

?action=freshdesk-remote-login
然后,我的插件会检查用户是否登录了WP,如果没有,它会显示登录表单,并在成功登录后将其重定向回第三方站点。

重定向是通过以下方式完成的:wp_redirect( $sso_url );

现在这很好,但我计划提供一个短代码,可以添加到用户选择的页面中。现在,一旦用户访问此页面,如果他们已登录,则应将其转发到第三方网站,如果没有,则应转发到登录页面。

有没有一种方法可以建议wp\\u重定向到短代码内工作?

3 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

正如@Rarst所解释的,短代码通常运行得太晚,您无法从内部重定向。他们通常在the_content 将内容发送到浏览器后很长时间内的挂钩。如果需要根据存在的短代码进行重定向,则需要在任何内容离开服务器之前检查该短代码。

function pre_process_shortcode() {
  if (!is_singular()) return;
  global $post;
  if (!empty($post->post_content)) {
    $regex = get_shortcode_regex();
    preg_match_all(\'/\'.$regex.\'/\',$post->post_content,$matches);
    if (!empty($matches[2]) && in_array(\'yourshortcodeslug\',$matches[2]) && is_user_logged_in()) {
      // redirect to third party site
    } else {
      // login form or redirect to login page
    }
  }
}
add_action(\'template_redirect\',\'pre_process_shortcode\',1);
这就是“概念证明”。您需要的特定条件可能会有所不同。请注意,这是一个相当“繁重”的处理过程。我会确保它只在绝对必要的地方运行。

SO网友:Rarst

wp_redirect() 通过HTTP头执行重定向,以便在页面输出开始后从技术上讲它不会(或至少不应该)工作。所以你不能只在短代码中使用这个函数。

但这并不意味着你不能使用短代码来控制它。您可以在输出开始之前(在附近的某个地方)检查拟合条件(如果是页面并且页面包含短代码)template_redirect 然后执行重定向。

另一个选项是有条件地输出JavaScript,该JavaScript将在页面加载后执行重定向。

SO网友:Felix Geenen

简单JavaScript解决方案:

短代码:

[js_logout]
功能。php:

add_shortcode(\'js_logout\', \'js_logout\');
function js_logout() {
    // redirect to home
    $logout_url = html_entity_decode(wp_logout_url(home_url()));

    return \'<p>\' . __(\'If you are not redirected automatically, click here:\') . \' <a href="\' . $logout_url . \'">Logout</a></p><script>window.location.href = "\' . $logout_url . \'";</script>\';
}

结束

相关推荐

多部分表单和wp_reDirect()

对于初学者来说,它是一个插件(带有一个短代码),或者至少我更喜欢它。我有两个问题都与wp\\U direct有关。如果表1验证,我想重定向到表2,并继续该过程。如果访问者在没有填写表格1的情况下尝试从表格2开始,那么我想将他们重定向回表格1。我已经尝试了许多不同的方法,我仍然得到“无法修改标题”。即使当\\uu construct()使用add\\u操作“send\\u headers”时,我仍然会收到标头错误。如何验证表单、重定向并显示第二个表单。这似乎并不是一种预先的需要。然而,我花了一天的大部分时间