问题描述

我有一个典型的短码在页面上打印一些 html 。短码只能在访问者登录的页面上使用。

作为一个单独的操作,我一直在使用自定义字段来触发执行该测试的操作,然后执行重定向。

但是我想知道是否可以将该动作与短码结合起来,摆脱自定义字段。

IOW:我可以在标头中的某些标签中制作短码打印代码,以测试访问者是否登录,如果不是,请将其重定向到主页。

例如。

function jchForm() {
  add_action( 'no idea where this would go', 'my_redirect_function' );

  $s ='<div class="clearboth">';
  $s .='<form id="my_form" action="" method="post">';
  $s .='<p><label>Your Name</label><input id="user_name" type="text"     name="user_name" class="text" value="" /></p>';
  $s .='<p><label>Your Email Address</label><input id="user_email" type="text" name="user_email" class="text" value="" /></p>';
  $s .='<p><input type="submit" id="my_submit" name="submit"     value="Register" /></p>';
  $s .='</form>';
 $s .='</div>';

return $s;

}

更新:我试过这个,根据 has_shortcode() 函数引用,但尽管它触发,$ post 总是返回 NULL 。如何获得这个打印 – 在任何其他 html 之前,但是 – 后 – 查询抓取 $ post?

function custom_shortcode_script() {
global $post;
if( is_user_logged_in() && has_shortcode( $post->post_content, 'jchForm') ) {
  var_dump($post->post_content); // always prints NULL
    wp_redirect( '/someplace');
  }
}

 add_action( 'init', 'custom_shortcode_script' );

最佳解决方案

短码功能只有在可视化编辑器的内容被处理和显示时才会被调用,所以你的短代码功能什么都不会足够早。

看看 has_shortcode 功能。如果你早点提前发送标题,并足够迟到要设置的查询,您可以检查内容是否包含您的短代码,然后重定向。 template_redirect 钩子很方便,因为它是关于在您的主题将输出发送到浏览器之前调用的最后一个钩子,这会触发 PHP 发送头文件。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。