2017-11-04 13 views
1

ユーザがログインしているかどうかを確認し、結果に応じてユーザをカスタムフィールドAまたはBにリダイレクトする必要があります。これは今までのコードです:PHP Wordpress単純なカスタムフィールドのリダイレクト

<?php 

    global $current_user; 
    get_currentuserinfo(); 
    require_once($_SERVER['DOCUMENT_ROOT'] . '/wp-config.php'); 

    add_action('get_header', 'redirect'); 

    function redirect() { 
     global $post; 
     if (is_page() || is_object($post)) { 
      if (get_post_meta($post->ID, 'redirect', true)) { 
       header('Location: ' . get_post_meta($post->ID, 'redirect', true)); 
      } 
     } 
    } 

    function redirect_b() { 
     global $post; 
     if (is_page() || is_object($post)) { 
      if (get_post_meta($post->ID, 'Shortlink', true)) { 
       header('Location: ' . get_post_meta($post->ID, 'Shortlink', true)); 
      } 
     } 
    } 

    if ($current_user->ID == '') { 
     redirect(); 
} 
else { 

    redirect_b(); 
} 

?> 

これは動作しません。これを有効にするたびにエラー500が発生します。誰でも助けてくれますか?どうもありがとう!

+0

'header'の直後に' exit; 'を追加し、リダイレクトを呼び出す前に何も描画しません。 – Rikkles

+0

下の回答は良いですが、参考のためにこのコードは決して真とは評価されません。現在のユーザーがログインしていない場合、現在のユーザーIDは0 if($ current_user-> ID == ') – miknik

答えて

1

です:

あなたはこのような何かを試みることができます。このシナリオでは、ユーザーの入力から来ていないので、それを使用することは必須ではありませんが、私はいつもこの機能を使いたいと思っています。 wp_safe_redirect()は自動的に終了しないので、常に終了呼び出しが続く必要があります。

function redirect_site_user() { 

    global $post; 

    if (is_user_logged_in()) { 

     if (get_post_meta($post->ID, 'Shortlink', true)) { 
      wp_safe_redirect(get_post_meta($post->ID, 'Shortlink', true)); 
     } 


    } else { 
     if (get_post_meta($post->ID, 'redirect', true)) { 
      wp_safe_redirect(get_post_meta($post->ID, 'redirect', true)); 
     } 
    } 

    exit; 
} 

add_action('init', 'redirect_site_user'); 
+0

私を助けてくれてありがとう!これは実際には機能しませんが、カスタムフィールドのURLにリダイレクトされません。 –

+0

get_post_meta関数がデータを返すかどうかを確認してください。 –

+0

それはそうではないように見えます。 –

1

get_currentuserinfo()は非難されているため使用しないでください。代わりにwp_get_current_user()を使用してください。しかし、あなたの例では、is_user_logged_in()は既にその関数を使ってグローバルが設定されているかどうかを確認し、そうでない場合はそれを設定します。

アクションフックget_headerは、フックがデフォルトのヘッダーテンプレートファイルの代わりに特定のヘッダーテンプレートファイルを使用できるようにするため、実際にはフックしません。

次に、リダイレクトしたい場合、Wordpressはその機能を提供しますwp_redirect()。したがって、header(Location:)を使用する必要はありません。

また、ページであるかどうかを確認する条件が本当に必要ですか。これは、オープンリダイレクトを回避するためにwp_safe_redirect()を使用することをお勧めは

add_action('init', 'control_access'); 
function control_access() { 

    global $post; 


    if (! is_user_logged_in()) { 

     if (get_post_meta($post->ID, 'redirect', true)) { 

      wp_redirect(get_post_meta($post->ID, 'redirect', true)); 
      exit; 

     } 


    } else { 

     if (get_post_meta($post->ID, 'Shortlink', true)) { 

      wp_redirect(get_post_meta($post->ID, 'Shortlink', true)); 
      exit; 

     } 
    } 
} 
+0

私を助けてくれてありがとう!これは実際には機能しませんが、カスタムフィールドのURLにリダイレクトされません。 –

関連する問題