Bir Kısa Kod içindeki yönlendirme işlevi


14

WordPress'te kullanıcıların kimliğini doğrulayabilmek için harici bir destek sistemini WordPress'e bağlamak için ücretsiz bir eklenti geliştiriyorum .

Bunun için şu anda harici sistemden, kullanıcı sonunda WordPress'in giriş sayfasına gönderilir

?action=freshdesk-remote-login

Eklentim daha sonra kullanıcının WP'de oturum açıp açmadığını kontrol eder, eğer giriş formunu göstermezse ve başarılı bir girişten sonra onları 3. taraf sitesine yönlendirir.

Yönlendirme şu şekilde yapılır: wp_redirect( $sso_url );

Şimdi bu iyi çalışıyor, ancak kullanıcının seçtiği bir sayfaya eklenebilecek bir kısa kod sunmayı planlıyorum. Şimdi bir kullanıcı bu sayfaya gittiğinde, giriş yapmışsa, 3. taraf sitesine, eğer değilse, giriş sayfasına yönlendirilmelidir.

Wp_redirect'in bir kısa kod içinde çalışmasını önerebileceğiniz bir yol var mı?

Yanıtlar:


21

@Rarst'ın açıkladığı gibi, kısa kodlar normalde bir içinden içinden yönlendirmeniz için çok geç çalışır. Genellikle the_content, tarayıcıya içerik gönderildikten hemen sonra olan kanca üzerinde çalışırlar . Bir kısa kodun varlığına göre yeniden yönlendirmeniz gerekiyorsa, herhangi bir içerik sunucudan ayrılmadan önce bu kısa kodu kontrol etmeniz gerekir.

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);

Bu "kavramın kanıtı" dır. İhtiyacınız olan özel koşullar muhtemelen farklı olacaktır. Bunun oldukça "ağır" bir işlem olduğunu unutmayın. Ben sadece kesinlikle gerekli yerlerde çalışır emin olun.


Bir ton teşekkürler. Bu sadece mükemmel ve tam olarak aradığım şey.
Harish Chouhan

Merhaba, bu kod sadece belirli bir sayfada çalıştığından emin olmak için bazı kontroller ekledim, ancak wp_redirect'i bir kısa kodun içine yerleştirmenin de iyi çalıştığını fark ettim. Javascript ile de denedim wp_redirect( $sso_url );ve sadece çalıştı.
Harish Chouhan

1
wp_redirectnormal koşullar altında bir kısa kodda çalışmaz. Az önce kontrol ettim. Eğer sizin için çalışıyorsa, temanız veya bir eklentiniz çalışmasını önerdiğim gibi bir şey yapıyor.
s_ha_dum

Evet haklısın. Zamanını harcadığım için üzgünüm. Kodunuzun birden çok örneği vardı. Ben yukarıdaki kodu kullanmaya geri döndüm :)
Harish Chouhan

5

wp_redirect()HTTP üstbilgileri üzerinden yönlendirme gerçekleştirir, böylece teknik olarak sayfa çıktısı başladıktan sonra çalışmayacaktır (veya en azından olmamalıdır). Böylece bu işlevi kısa kodda kullanamazsınız.

Bu, kontrol etmek için kısa kod kullanamayacağınız anlamına gelmez. Çıktı başlamadan önce (çağanozun etrafında bir yerde) montaj koşullarını (sayfa ve sayfa kısa kod içeriyorsa template_redirect) kontrol edebilir ve ardından yeniden yönlendirme yapabilirsiniz.

Başka bir seçenek, sayfa yüklendikten sonra yeniden yönlendirme yapacak koşullu JavaScript çıkışı olacaktır.


Merhaba ben buldum: `fonksiyon pippin_login_form_shortcode ($ atts, $ content = null) {özü (shortcode_atts (dizi ('redirect' => ''), $ atts)); if (! is_user_oked_in ()) {if ($ redirect) {$ redirect_url = $ yönlendirme; } else {$ redirect_url = get_permalink (); } $ form = wp_login_form (dizi ('echo' => false, 'redirect' => $ redirect_url)); } $ formunu döndür; } add_shortcode ('loginform', 'pippin_login_form_shortcode'); `` Görünüşe göre wp_redirect bir kısa kodun içine yerleştirilmiş.
Harish Chouhan


@HarishChouhan wp_redirect()bu kodda nerede görüyorsunuz ?
Rarst

Merhaba, haklısın özür dilerim. Örnek kodda sadece URL'yi kaydeder, gerçekte yönlendirme yapmaz. Size göre JavaScript tabanlı yönlendirme benim tek seçeneğim gibi mi görünüyor?
Harish Chouhan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.