একটি শর্টকোডের মধ্যে ফাংশন পুনঃনির্দেশ করুন


14

আমি ওয়ার্ডপ্রেসে ব্যবহারকারীদের প্রমাণীকরণ করতে সক্ষম হওয়ার জন্য ওয়ার্ডপ্রেসে একটি বাহ্যিক সমর্থন সিস্টেম সংযোগের জন্য একটি ফ্রি প্লাগইন বিকাশ করছি

এটির জন্য, বর্তমানে বাহ্যিক সিস্টেম থেকে, ব্যবহারকারীকে এই শেষে ওয়ার্ডপ্রেসের লগইন পৃষ্ঠায় প্রেরণ করা হয়

?action=freshdesk-remote-login

আমার প্লাগইনটি ব্যবহারকারী যদি ডব্লিউপিতে লগইন করে থাকে কিনা তা পরীক্ষা করে, যদি এটি লগইন ফর্মটি প্রদর্শন করে না এবং সফল লগইন হওয়ার পরে তাদের তৃতীয় পক্ষের সাইটটিতে পুনঃনির্দেশ করে।

পুনঃনির্দেশ এই জাতীয় কিছু ব্যবহার করে করা হয়: wp_redirect( $sso_url );

এখন এটি ভালভাবে কাজ করে তবে আমি একটি শর্টকোড অফার করার পরিকল্পনা করছি যা ব্যবহারকারীর চয়ন করা কোনও পৃষ্ঠায় যুক্ত হতে পারে। এখন একবার কোনও ব্যবহারকারী এই পৃষ্ঠায় যান, যদি তারা লগ ইন করে থাকে তবে তাদের তৃতীয় পক্ষের সাইটটিতে না পাঠানো উচিত, যদি না হয় তবে লগইন পৃষ্ঠায়।

শর্টকোডের অভ্যন্তরে কাজ করার জন্য কীভাবে আপনি 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);

এটি "ধারণার প্রমাণ"। আপনার প্রয়োজনীয় বিশেষ শর্তগুলি সম্ভবত আলাদা হবে। নোট করুন যে এটি একটি "ভারী" বিট প্রক্রিয়াজাতকরণ। আমি নিশ্চিত করব যে এটি কেবল যেখানে প্রয়োজন সেখানে চলে।


ধন্যবাদ এক টন এটি ঠিক নিখুঁত এবং ঠিক আমি যা খুঁজছিলাম is
হরিশ চৌহান

হ্যালো, আমি এই কোডটি কেবলমাত্র একটি নির্দিষ্ট পৃষ্ঠায় চলে কিনা তা নিশ্চিত করার জন্য আমি কিছু চেক যুক্ত করেছি, তবে আমি লক্ষ্য করেছি যে, একটি শর্টকোডের মধ্যে wp_redirect স্থাপন করাও ঠিক কাজ করে। আমি জাভাস্ক্রিপ্ট দিয়ে চেষ্টা করেছি এবং এটিও wp_redirect( $sso_url );কাজ করেছে।
হরিশ চৌহান

1
wp_redirectসাধারণ পরিস্থিতিতে একটি শর্টকোডে কাজ করে না। আমি সবেমাত্র চেক করেছি। যদি এটি আপনার পক্ষে কাজ করে তবে আপনার থিম বা একটি প্লাগইন এটি কার্যকর করার পরামর্শ দিয়েছিল এমন অনেক কিছু করছে।
s_ha_dum

হ্যাঁ তুমিই ঠিক. দুঃখিত আপনার সময় নষ্ট করতে। আমি আপনার কোড একাধিক উদাহরণ ছিল। আমি আপনার উপরের কোডটি ব্যবহার করে ফিরে এসেছি :)
হরিশ চৌহান

5

wp_redirect()HTTP শিরোনামের মাধ্যমে পুনঃনির্দেশ সম্পাদন করে যাতে প্রযুক্তিগতভাবে পৃষ্ঠা আউটপুট শুরুর পরে এটি (বা কমপক্ষে হওয়া উচিত নয়) কাজ করে না। সুতরাং আপনি কেবল শর্টকোডে এই ফাংশনটি ব্যবহার করতে পারবেন না।

যার অর্থ এই নয় যে আপনি এটি নিয়ন্ত্রণ করতে শর্টকড ব্যবহার করতে পারবেন না। আউটপুট শুরুর আগে আপনি ফিটিং শর্তগুলির জন্য (যদি পৃষ্ঠা এবং পৃষ্ঠাতে শর্টকোড থাকে) পরীক্ষা করে দেখতে পারেন template_redirectএবং এরপরে পুনঃনির্দেশ সম্পাদন করতে পারেন।

আরেকটি বিকল্প হ'ল শর্তাধীন জাভাস্ক্রিপ্ট আউটপুট দেওয়া হবে যা পৃষ্ঠাটি লোড হওয়ার পরে পুনর্নির্দেশ সম্পাদন করবে।


হ্যালো আমি এটি খুঁজে পেয়েছি: `ফাংশন পিপিন_লগিন_ফর্ম_শোর্টকোড ($ অ্যাটস, $ সামগ্রী = নাল) ract এক্সট্রাক্ট (শর্টকোড_্যাটস (অ্যারে ('পুনর্নির্দেশ' => '')), $ অ্যাটস)); if (! is_user_logged_in ()) {if ($ redirect) {$ redirect_url = $ redirect; } অন্য {$ redirect_url = get_permalink (); ; $ ফর্ম = wp_login_form (অ্যারে ('প্রতিধ্বনি' => মিথ্যা, 'পুনর্নির্দেশ' => $ redirect_url)); } ফেরত $ ফর্ম; } add_shortcode ('লগইনফর্ম', 'পিপ্পিন_লগিন_ফর্ম_শোর্টকোড'); `এখানে মনে হচ্ছে wp_redirect একটি শর্টকোডের ভিতরে রাখা হয়েছে।
হরিশ চৌহান


@ হারিশচৌহান আপনি এই কোডটি কোথায় দেখছেন wp_redirect()?
বিরল

হ্যালো, আমি দুঃখিত আপনি ঠিক বলেছেন। উদাহরণ কোডে এটি কেবল ইউআরএল সংরক্ষণ করে এবং প্রকৃতপক্ষে পুনঃনির্দেশ নয়। সুতরাং আপনার অনুসারে, জাভাস্ক্রিপ্ট ভিত্তিক পুনঃনির্দেশ আমার একমাত্র বিকল্প বলে মনে হচ্ছে?
হরিশ চৌহান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.