एक शोर्ट के अंदर पुनर्निर्देशित कार्य


14

मैं वर्डप्रेस पर उपयोगकर्ताओं को प्रमाणित करने में सक्षम होने के लिए वर्डप्रेस के लिए एक बाहरी समर्थन प्रणाली को कनेक्शन के लिए एक मुफ्त प्लगइन विकसित कर रहा हूं

इसके लिए, वर्तमान में बाहरी सिस्टम से, उपयोगकर्ता को अंत में इसके साथ वर्डप्रेस के लॉगिन पृष्ठ पर भेजा जाता है

?action=freshdesk-remote-login

मेरा प्लगइन तब जांचता है कि क्या उपयोगकर्ता WP में लॉग इन किया गया है, यदि यह लॉगिन फ़ॉर्म नहीं दिखाता है और सफल लॉगिन के बाद, उन्हें फिर से तीसरे पक्ष की साइट पर पुनर्निर्देशित करता है।

रीडायरेक्ट कुछ इस तरह से किया जाता है: wp_redirect( $sso_url );

अब यह अच्छी तरह से काम करता है, लेकिन मैं एक शोर्ट की पेशकश करने की योजना बना रहा हूं जिसे उपयोगकर्ता द्वारा चुने गए पृष्ठ पर जोड़ा जा सकता है। अब एक बार जब कोई उपयोगकर्ता इस पृष्ठ पर जाता है, यदि वे लॉग इन हैं, तो उन्हें 3 पार्टी साइट पर भेज दिया जाना चाहिए, यदि नहीं, तो लॉगिन पृष्ठ पर।

क्या कोई तरीका है जिससे आप शोर्ट के अंदर काम करने के लिए wp_redirect सुझाव दे सकते हैं?

जवाबों:


21

जैसा कि @ रस्ट बताते हैं, शॉर्टकोड आमतौर पर आपके अंदर एक से पुनर्निर्देशित करने के लिए बहुत देर से चलते हैं। वे आमतौर पर 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);

वह "अवधारणा का प्रमाण" है। आपको जिन विशेष परिस्थितियों की आवश्यकता होगी, वे अलग-अलग होंगे। ध्यान दें कि प्रसंस्करण का एक बहुत "भारी" बिट है। मैं यह सुनिश्चित करूंगा कि यह केवल वहीं चले जहां पूरी तरह से आवश्यक हो।


एक टन धन्यवाद। यह एकदम सही है और ठीक वही है जिसकी मुझे तलाश थी।
हरीश चौहान

नमस्कार, मैंने यह सुनिश्चित करने के लिए कुछ चेक जोड़े कि यह कोड केवल एक विशिष्ट पृष्ठ पर चलता है, हालांकि मैंने देखा, कि शोर्ट के अंदर wp_redirect रखने से भी ठीक काम होता है। मैंने जावास्क्रिप्ट के साथ wp_redirect( $sso_url );और साथ भी कोशिश की और यह बस काम कर गया।
हरीश चौहान

1
wp_redirectसामान्य परिस्थितियों में शोर्ट में काम नहीं करता है। मैंने अभी जाँच की। यदि यह आपके लिए काम कर रहा है, तो आपका विषय या एक प्लगइन कुछ ऐसा कर रहा है जैसे मैंने उसे काम करने का सुझाव दिया है।
s_ha_dum

हाँ आप सही है। अपना समय बर्बाद करने के लिए क्षमा करें। मेरे पास आपके कोड के कई उदाहरण हैं। मैं आपके उपरोक्त कोड का उपयोग करने के लिए वापस आ गया हूं :)
हरीश चौहान

5

wp_redirect()HTTP हेडर के माध्यम से रीडायरेक्ट करता है इसलिए तकनीकी रूप से यह पृष्ठ आउटपुट शुरू होने के बाद (या कम से कम नहीं होना चाहिए) काम नहीं करेगा। तो आप शोर्ट में इस फ़ंक्शन का उपयोग नहीं कर सकते।

हालांकि इसका मतलब यह नहीं है कि आप इसे नियंत्रित करने के लिए शोर्ट का उपयोग नहीं कर सकते। उत्पादन शुरू होने से पहले (कहीं template_redirectहुक के आसपास ) और फिर रीडायरेक्ट करें।

एक अन्य विकल्प सशर्त रूप से जावास्क्रिप्ट का उत्पादन करना होगा जो पृष्ठ लोड होने के बाद पुनर्निर्देशित करेगा।


नमस्कार मुझे यह मिला: `फ़ंक्शन pippin_login_form_shortcode ($ atts, $ content = null) {extract (शोर्टकोड_टेट्स (सरणी ('पुनर्निर्देशन =>' '), $ atts); if (। is_user_logged_in ()) {if ($ पुनर्निर्देशन) {$ redirect_url = अतिरिक्त पुनर्निर्देशन; } और {$ redirect_url = get_permalink (); } $ फॉर्म = wp_login_form (एरे ('इको' => गलत, 'रीडायरेक्ट' => $ रीडायरेक्ट_लुर); } $ फॉर्म लौटाएं; } add_shortcode ('loginform', 'pippin_login_form_shortcode'); '' ऐसा लगता है कि wp_redirect को शोर्ट के अंदर रखा गया है।
हरीश चौहान


@ हरीशचौहान आप wp_redirect()उस कोड में कहां देखते हैं ?
रारस्ट

हैलो, मुझे क्षमा करें आप सही हैं। उदाहरण कोड में यह केवल URL को बचाता है और वास्तव में पुनर्निर्देशित नहीं करता है। तो आपके अनुसार जावास्क्रिप्ट आधारित रीडायरेक्ट मेरा एकमात्र विकल्प लगता है?
हरीश चौहान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.