web-dev-qa-db-ja.com

Wp_redirectをショートコードに入れるにはどうすればいいですか?

私はページに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' );  
5
jchwebdev

ショートコード関数は、ビジュアルエディタの内容が処理され表示されるときにのみ呼び出されるので、ショートコード関数内の何も十分に早く実行されることはありません。

has_shortcode関数を見てください。ヘッダを送信するのに十分早く、クエリが設定されるのに十分遅く遅れる場合は、コンテンツにショートコードが含まれているかどうかを確認してからリダイレクトできます。 template_redirectフックは、テーマがブラウザに出力を送信する前に呼び出される最後のフックについてのものです。これはPHPがヘッダを送信することを引き起こします。

11

wp_redirect()ではありませんが、JavaScriptリダイレクトを行うことができます。

window.location="http://www.example.com";

ユーザーがJSを無効にしている場合は何もしません。リダイレクトのリンクを必ず提供してください。

1
Caleb