لینک های یکبار مصرف می توانند در شرایط مختلف مورد استفاده قرار گیرند: به منظور دسترسی موقت به فایل یا صفحه یا تأیید ثبت نام. در این درس، ما نشان خواهیم داد که چگونه یک آدرس URL یکبار مصرف را تولید و پیاده سازی کنیم.
ایجاد URL
فرض کنید سایت ما دارای سیستم تأیید هویت کاربر است. پس از ثبت نام، از کاربر می خواهیم که روش تأیید ایمیل را منتقل کند. برای ایجاد چنین پیوندهایی می توانیم از پارامتر خاص TOKEN استفاده کنیم. یک مثال از چنین لینک:
http: //example.com/activate؟ token \u003d ee97780 ...
بدون یک پایگاه داده، ما نمی توانیم در اینجا انجام دهیم، بنابراین اجازه دهید به میز نگاه کنیم که ما کار خواهیم کرد.
ایجاد جدول pending_users (token char (40) null، نام کاربری varchar (45) null، tstamp integer unsigned null، کلید اولیه (نشانه)؛
در جدول ما 3 فیلد را ذخیره خواهیم کرد: نشانه، نام کاربری و زمان. برای تولید یک نشانه، ما از تابع sha1 () استفاده خواهیم کرد، که یک رشته از 40 کاراکتر را می دهد. فیلد TSTAMP زمان تولید نشانه را ذخیره می کند تا بتوانیم لینک ها را با یک خروجی پیگیری کنیم.
راه های زیادی برای تولید نشانه وجود دارد، اما در این درس ما از توابع UNIQID () و SHA1 () استفاده خواهیم کرد. صرف نظر از روش تولید یک نشانه، اطمینان حاصل کنید که ارزش های تولید شده متفاوت خواهد بود و احتمال تکراری حداقل است.
$ token \u003d sha1 (UNIQID ($ username، true))؛
به عنوان یک پارامتر، تابع Uniqid () رشته را می گیرد، و خروجی یک شناسه منحصر به فرد بر اساس استدلال منتقل شده و زمان کنونی ارائه می دهد. همچنین، به عنوان یک استدلال دوم، این ویژگی یک مقدار بولی را قبول می کند که Uniqid چند کاراکتر اضافی را برای افزایش احتمال منحصر به فرد بودن ارزش اضافه می کند. ویژگی SHA1 یک شناسه منحصر به فرد را می گیرد و یک هش را ایجاد می کند.
پس از کار بر روی دو توابع، ما یک نشانه منحصر به فرد داریم که می تواند برای تولید آدرس های URL استفاده کند. حالا ما باید آن را در پایگاه داده قرار دهیم:
$ \u003d $ db- پرس و جو\u003e آماده ( "INSERT INTO PENDING_USERS (نام کاربری، رمز، Tstamp) ارزش (،)؟؟")؛ $ query-\u003e اجرای (Array ($ username، $ token، $ _server ["request_time"]))؛
به منظور اینکه ما بدانیم که کدام کاربر باید فعال شود، ما به جدول ضبط و وارد سیستم خواهیم شد. در یک مثال، بیشتر برای یک وب سایت واقعی سازگار است، می توانید از شناسه کاربری استفاده کنید.
حالا که همه ما داریم اطلاعات لازم، ما می توانیم یک آدرس ایمیل موقت ایجاد کنیم:
$ url \u003d "http://example.com/activate.php؟token\u003d$Token؛
$ message \u003d.<< در حال حاضر ما به یک اسکریپت نیاز داریم، به لطف که ما بررسی خواهیم کرد. همه ما باید انجام دهیم این است که علامت را از آدرس URL و نشانه از پایه مقایسه کنید. اگر چنین چیزی وجود داشته باشد، زمان زندگی او منقضی نشده است، پس همه چیز خوب است. // دریافت اگر token (isset ($ _ get ["token"]) && preg_match ("/ ^ (40) $ / i"، $ _GET [token])) ($ token \u003d $ _GET ["token" ]؛) دیگری (پرتاب استثناء جدید ( "Tocken شده معتبر نیست.")؛) // چک کردن $ \u003d $ db- پرس و جو\u003e آماده علامت ( "انتخاب نام کاربری، TStamp از Pending_users کجا رمز \u003d؟")؛ $ query-\u003e اجرای (آرایه ($ token))؛ $ row \u003d $ query-\u003e fetch (PDO :: fetch_assoc)؛ $ query-\u003e closecursor ()؛ اگر ($ ردیف) (Extract ($ ردیف)؛) else (پرتاب استثناء جدید ("Tocken معتبر نیست.")؛) // فعال کردن حساب کاربری // ... // حذف نشانه از پایه $ query \u003d $ DB\u003e آماده ( "DELETE FROM PENDING_USERS کجا نام کاربری \u003d و Token \u003d و TSTAMP \u003d؟"،)؛ $ query-\u003e اجرای (Array ($ username، $ token، $ tstamp))؛ ما همچنین نیاز به ارائه تست نشانه ها، طول عمر آن منقضی شده است: // 1 روز در ثانیه \u003d 60 ثانیه * 60 دقیقه * 24 ساعت $ delta \u003d 86400؛ // بررسی اگر ($ _server ["request_time"] - $ tstamp\u003e $ delta) (پرتاب استثنا جدید ("Tocken Lifetime منقضی شده است.)؛) // فعال کردن حساب سفارشی // ... بنابراین، ما دو چک داریم: یکی در اعتبار نشانه، دیگری در زمان وجود آن. این روش را می توان نه تنها برای فعال سازی اعمال کرد حساب ها کاربران، اما همچنین در نیازهای دیگر: به عنوان مثال، برای ارائه دسترسی تک یا موقت به یک منبع یا خدمات. علاوه بر این، شما می توانید یک اسکریپت ایجاد کنید که نشانه هایی را که هرگز استفاده نکرده اند حذف کنید. این اسکریپت را می توان از زمان به زمان راه اندازی کرد یا برای این CRON درخواست کرد. موضوعات معمولا کارکردی نیستند، اما گاهی اوقات ما، توسعه دهندگان، شما باید برخی از امکانات را در موضوع خود معرفی کنید تا آن را کمی بهتر و راحت تر کنید. در این راهنما، ما اصطلاح "قلمرو پلاگین" را در نظر خواهیم گرفت، و همچنین یاد می گیریم که چگونه از یک ابزار فوق العاده نوشته شده توسط Thomas Griffin استفاده کنید: کتابخانه فعال سازی پلاگین TGM. تم ها برای تغییر طراحی وب سایت وردپرس طراحی شده اند. در حالت ایده آل، موضوع باید تنها بر جنبه بصری تاثیر بگذارد. با این حال، در "عصر طلایی" ما وردپرس، توسعه دهندگان پلاگین اغلب شامل ویژگی های عملکردی در موضوعات خود هستند که به شما اجازه می دهد تا رقابت در بازار را حفظ کنید. این حمله به قلمرو پلاگین ها است. ما می توانیم "قلمرو پلاگین ها" را به عنوان برخی از بخش های کاربردی کد ارائه دهیم. هر قطعه کد تغییر عملکرد سایت شما باید به عنوان یک افزونه به عنوان یک افزونه نمایش داده شود، اگر کد مشخص شده در هسته وردپرس قرار نگیرد. من قبلا قبلا در یکی از مقالات من یک قانون تجربی "پلاگین های قلمرو" را تشکیل دادم اگر خاصیت مربوط به نمایندگی بصری سایت باشد، در این مورد باید در این موضوع قرار گیرد؛ اگر آن را با قابلیت ارتباط داشته باشد، باید به عنوان یک پلاگین جداگانه نمایش داده شود. قانون بسیار ساده مردم هنوز سعی می کنند در سطح قطعات عملکردی کد در موضوعات خود ثبت نام کنند، اما کاتالوگ تم ها (مانند WordPress.org یا Themeforest) تم ها را نمی گیرند که به قلمرو پلاگین ها حمله می کنند. بنابراین، پیشنهاد عملکرد در تم ها به یک مشکل خاص تبدیل شده است. خوشبختانه یک راه حل ساده وجود دارد که علیه حاکمیت "قلمرو پلاگین ها" نیست. توجه به عملکرد TGMPA () با دو پارامتر در انتهای کد. پارامتر دوم متغیر $ config است که همچنین یک آرایه مانند $ plugins است. به شرح زیر از نام آن، شما می توانید کتابخانه فعال سازی پلاگین TGM را با استفاده از آن پیکربندی کنید از این توده. متغیر مجموعه ای از گزینه های خود را می پذیرد: همانطور که می بینید، عملکرد را نشان می دهد تم وردپرس شاید شما فقط باید اول از همه چیز در مورد کاربران که می توانید از یک موضوع به دیگری تغییر دهید فکر کنید. کتابخانه فعال سازی پلاگین TGM ارائه می دهد راه واقعا هوشمندانه برای این. شما در مورد این ابزار چه فکر میکنید؟ آیا تا به حال از آن استفاده کرده اید، آیا قصد دارید از آن در آینده استفاده کنید؟ افکار خود را به اشتراک بگذارید! صفحه ثبت نام خود را برای Multisite به جای استاندارد WP-Signup.php ایجاد کنید. در نصب معمول صفحه وردپرس ثبت نام (مجوز، تنظیم مجدد رمز عبور) فایل WP-login.php را نمایش می دهد. برای Multisite در WP-login.php شرایط جداگانه ای وجود دارد. بنابراین، زمانی که شما در /wp-login.php؟Action\u003dRegister لینک در multisaite کلیک کنید، وردپرس یک تغییر مسیر به صفحه /wp-signup.php است. در بسیاری از موضوعات، صفحه به نظر بسیار جذاب نیست، بنابراین ما خودمان را خواهیم ساخت. به طور پیش فرض، وردپرس صفحه ثبت نام (WP-Signup.php) را در شبکه اصلی (وب سایت) باز می کند. با این حال، شما می توانید یک صفحه ثبت نام جداگانه برای هر سایت شبکه ایجاد کنید، حتی اگر موضوعات مختلفی داشته باشند. ما این مورد را در نظر می گیریم که در تمام سایت های شبکه دارای صفحه ثبت نام خود هستند، اما همان موضوع مورد استفاده قرار می گیرد و سایت ها فقط در زبان متفاوت هستند. اگر موضوعات مختلف استفاده شوند، باید کد بیشتری بنویسید. نه نام این فایل به نظر می رسد در هر مقاله در مورد وردپرس ذکر شده است. در مورد ما، با توجه به این واقعیت که قابلیت ثبت نام برای چندین سایت طراحی شده است، منطقی است که آن را به پلاگین های MU برساند که هنگام باز کردن هر سایت بارگذاری می شوند. شایان ذکر است که MU-plugins زودتر از پلاگین های معمولی بارگیری می شود و تا زمانی که هسته وردپرس به طور کامل بارگذاری شود، بنابراین تماس برای برخی از توابع می تواند منجر به اشکالات کشنده در پی اچ پی دانلود مشابه "Early" دارای مزایای آن است. بیایید بگویم در داخل هر موضوع نمی تواند به برخی از اقدامات متصل شود که قبل از دانلود فایل functions.php از موضوع به وجود می آید. یک مثال از این می تواند به عنوان پلاگین jetpack_module_loaded_related-پست ها (پست های مرتبط - نام ماژول) خدمت کند که ممکن است فعالیت ماژول ها را در jetpack ردیابی کند. این به "کلاچ" غیر ممکن است از فایل موضوع به این عمل، زیرا اقدام قبلا قبل از بارگذاری موضوع کار کرده است - پلاگین ها قبلا بارگذاری شده اند. شما می توانید نگاهی به تصویر معمولی سفارشات بوت وردپرس در صفحه مرجع عمل در کد انجام دهید. MU-Plugins ممکن است شامل هر تعداد فایل ها و هر نمودار باشد، که به نظر شما منطقی است. من در مورد چنین سلسله مراتب پایبند هستم: | -Mu-plugins | - | load.php | - | - | سلنا-شبکه | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | -... | - | - | - |-جتپاک | - | - | - | - | - -Plugin.php در فایل load.php، تمام پلاگین های لازم به شبکه ما متصل می شوند: بارگیری های بارگذاری شده برای تمام افزونه ها load_muplugin_textdomain ("selena_network"، "/ selena-network / زبان /")؛ // ثبت نام شبکه نیاز به wpmu_plugin_dir. "/selena-network/signup/plugin.php"؛ // پلاگین های دیگر // نیاز به wpmu_plugin_dir ... در داخل پوشه Selena-network، پوشه های پلاگین ذخیره می شوند، هر کدام دارای plugin.php خود است، که ما در load.php متصل می شویم. این انعطاف پذیری و توانایی به سرعت غیر فعال کردن و شامل برخی از چیزها است. برای مشخص کردن آدرس صفحه ثبت نام، از فیلتر WP_signup_Location استفاده کنید. می توان آن را در داخل فایل فایل wp-login.php در بر داشت و آن کسی است که مسئول تغییر مسیر در WP-Signup.php است. مورد "ثبت نام": if (is_multisite ()) (wp_redirect (apply_filters ("wp_signup_location"، network_site_url ("wp-signup.php"))؛ خروج؛ ویژگی خود را در MU-Plugins / Selena-Network / Signup / Plugin.php اضافه کنید، که آدرس صفحه ثبت نام را در وب سایت فعلی ارائه می دهد: تابع selena_network_signup_page ($ url) (بازگشت home_url (). "/ ثبت نام /"؛) add_filter ("wp_signup_location"، "selena_network_signup_page"، 99)؛ selena_network - پیشوند، که من در نام تمام توابع درون mu-plugins در سایت من برای جلوگیری از درگیری ها استفاده می شود، باید با پیشوند منحصر به فرد خود جایگزین شود. اولویت اضافه کردن فیلتر 99، به دلیل برخی از پلاگین ها، مانند BBPress و BuddyPress، می توانید این آدرس را به خودتان بازنویسی کنید (MU-plugins زودتر از پلاگین های معمولی بارگیری می شود). لطفا توجه داشته باشید که صفحه اصلی_url () به جای network_site_url () استفاده می شود، برای ترک بازدید کننده در همان دامنه. شما می توانید هر URL را به عنوان یک آدرس استفاده کنید. حالا اجازه دهید یک صفحه با site.com/signup/ را از طریق یک رابط کاربری منظم ایجاد کنیم، و در قالب پوشه های دختر موضوع برای صفحه جدید ما - صفحه-Signup.php. به جای کلمه "ثبت نام" شما می توانید از یک شناسه منحصر به فرد استفاده کنید. در داخل قالب جدید، شما باید از تابع selena_network_signup_main () تماس بگیرید، که فرم ثبت نام را نمایش می دهد. شایان ذکر است که کل فرآیند با قالب ها مورد نیاز نیست و در عوض شما می توانید کوتاه خود را ایجاد کنید، که همچنین از تابع selena_network_signup_main () تماس می گیرد. در حال حاضر ما یک تابع ایجاد می کنیم که فرم ثبت نام را نمایش می دهد. برای این کار، یک کپی از فایل WP-Signup.php و WP-Activate.php از وردپرس ریشه در MU-plugings مورد / سلنا-شبکه / ثبت نام / (و فراموش نکنید که به آنها متصل داخل MU-پلاگین / سلنا-شبکه / ثبت نام / plugin.php). دستکاری های بیشتری با فایل ها بسیار دشوار و طولانی برای توصیف هستند، بنابراین آنها را به خودتان بسازید. من فقط توضیح خواهم داد که دقیقا باید انجام شود و فایل های منبع پروژه شما را منتشر کند: در داخل WP-Activate.php شما باید در مورد همین کار انجام دهید: فایل WP-Activate.php مسئول صفحه فعال سازی حساب است. همانطور که با صفحه ثبت نام، شما باید یک قالب جداگانه ای را ایجاد کنید که در آن یک تابع از فایل WP-Activate.php تماس بگیرید. صفحه ثبت نام نامه ای را به بازدید کننده ارسال می کند با اشاره به فعال شدن حساب. به طور پیش فرض، این تابع wpmu_signup_user_notification () از فایل MS-Functions.php است. قابلیت آن را می توان برای عملکرد آن قرض گرفت. دلیل اینکه شما می خواهید از استفاده از این تابع اجتناب کنید - یک مرجع فعال سازی حساب را با WP-algember.php ارسال می کند. شما می توانید این ویژگی را با استفاده از فیلتر WPMU_SIGNUP_USER_Notification با حرکت نادرست در آن را غیر فعال (در صورتی که این را به انجام نمی، نامه فعال سازی خواهد شد دو بار فرستاده می شود، خوب، در واقع دو حرف متفاوت). تابع Armyofselenagomez_wpmu_signup_user_notification ($ کاربر، $ User_Mail، $ کلیدی، $ متا \u003d آرایه ()) (// ... // کد از WPMU_SIGNUP_USER_Notification تابع () WP_Mail ($ USER_EMAIL، WP_SPECIALCHARS_DECODE ($ تم)، $ پیام، $ Message_Headers )؛ بازگشت کاذب؛) Add_Filter ( "wpmu_signup_user_notification"، "armyofselegenagomez_wpmu_signup_user_notification"، 10، 4)؛ به عنوان یک نتیجه، صفحه ثبت نام در موضوع سلنا شروع به نگاه بسیار تمیز و مراقب باشید. در اینترنت، بسیاری از دیگران خیلی زیاد نیستند راه های درست نحوه ایجاد یکسان - Apache Redirects، AJAX فرم هایی که بدون اسکریپت جاوا کار نمی کنند، و غیره من واقعا آن را خیلی دوست نداشتم، بنابراین سعی کردم آن را به درستی در سایت خودم انجام دهم. من متوجه می شوم که فایل های ویرایش باید بتوانند با دقت و سعی نکنند از منبع به RANSNESH حرکت نکنند، اگر وردپرس فایل های WP-Signup.php و WP-Activate.php را تغییر دهد، آنها را آسان تر برای پیدا کردن تغییرات پیدا کرد . فراموش نکنید که نگاه کنید منبع تمام توابع شرح داده شده در بالا به منظور به طور کامل با آنچه و چه اتفاقی در داخل کد اتفاق می افتد. حتی جوانترین سایت های وردپرس اغلب به ثبت نام اسپم می پردازند. شما می توانید شرایط بی پایان را برای فیلتر کردن ربات ها بنویسید، اغلب بیشتر شبیه به تلاش برای ایجاد هوش مصنوعی 🙂 در مورد MultiSite، یک تغییر مسیر منظم در آپاچی به من کمک کرد، که در هنگام باز کردن /wp-signup.php و /wp-acitvate.php، من درخواست 404 (من یک متخصص پیکربندی آپاچی نیستم، بنابراین من نیستم قوانین ممکن است بسیار صحیح نباشد). RewRiteEngine در Rewritebase / Rewiterule ^ WP-Signup \\ .php - Rewiterule ^ WP-Activate \\ .php - # شروع وردپرس # قوانین از وردپرس به طور پیش فرض لمس نمی کنند :) # ... # پایان وردپرس P. S. من سعی می کنم برخی از چیزهای شخص ثالث را به همان اندازه که ممکن است توضیح دهم، زیرا زمانی که من شروع کردم، گاهی اوقات به نحوی به نحوی گفتم و توضیح بسیاری از چیزها. من همچنین معتقدم که نکات کوچک کوچک در مورد مواد دیگر کسی به مطالعه چیزی جدید و گسترش میدان دانش خود را تحت فشار قرار خواهد گرفت. عبارات منظم در سوابق Reriterule استفاده می شود، به عنوان مثال، نماد به طور کامل پیچیده نیست، به معنای آغاز خط است. یک تابع را ثبت می کند که در طول فعال شدن پلاگین باعث می شود. این ویژگی تابع فراخوانی مشخص شده را به قلاب Activate_ (Plugin) متصل می کند و برای این قلاب بسته بندی شده است. (پلاگین) در Hook Activate_ (Plugin) به نام نام نسبی به فایل اصلی پلاگین جایگزین می شود. به عنوان مثال، اگر پلاگین واقع شده باشد: WP-Content / Plugins / SamplePLugin / Sample.php، سپس نام قلاب خواهد بود: Activate_SamplePlugin / Sample.php. از نسخه 3.1. قلاب فقط در طول فعال شدن پلاگین کار می کند و در طول کار کار نمی کند به روز رسانی خودکار پلاگین پلاگین توسط تابع Activate_PLugin () فعال می شود که در آن Activate_ Hook (Plugin) فعال می شود. تابع Activate_Plugin () در هسته در حال حاضر پس از بارگذاری VP متوسط، مورد استفاده قرار می گیرد. این تابع فایل پلاگین اصلی را متصل می کند (و همه آنچه که در آن مشخص شده است) متصل می شود، و سپس از طریق قلاب، تابع فراخوانی مشخص شده را فعال می کند. با توجه به این، تمام توابع و کلاس های پلاگین در عملکرد فراخوانی ما موجود است. اما، از آنجا که تمام قلاب های اصلی WP در حال حاضر در طول بوت متوسط \u200b\u200bکار کرده اند، پس از آن هیچ رویدادی پلاگین در قلاب ها آویزان نیست، به عنوان مثال plugins_loaded، دیگر در هنگام اتصال فایل اصلی پلاگین کار نمی کند. بنابراین، پلاگین ما متصل خواهد شد، اما نه به طور کامل: نه به عنوان آن را که باید اتصال زمانی که در حال حاضر فعال شده است. به عنوان مثال، اگر پلاگین هر چیزی را در طول رویداد Plugins_loaded انجام دهد، تمام این اقدامات به سادگی زمانی اتفاق نمی افتد که فعال شدن پلاگین. به عنوان مثال، اگر این فایل ترجمه را متصل کند، فایل ترجمه در لحظه ای از راه اندازی تابع callback مشخص شده برای replication_hook () متصل نخواهد شد. به عنوان یک قاعده، پس از عملکردهای فراخوانی، 2 رویداد برای قطع توابع وجود دارد: Activated_Plugin و خاموش شدن. برای انجام کاری فوق العاده زمانی که پلاگین فعال می شود، به عنوان مثال 5 را ببینید. تابع کار نمی کند اگر شما آن را در زمان قلاب، به عنوان مثال، plugins_loaded، init. تابع باید به طور مستقیم از فایل اصلی پلاگین نامیده شود. قوانین فعال سازی: register_Activation_Hook () باید از فایل Master Plugin نامیده شود، از جایی که دستورالعمل نام پلاگین واقع شده است: ... و نباید از هر قلاب، مانند plugins_loaded یا init نامگذاری شود. تابع قلاب باید در همان فایل به عنوان قلاب یا اتصال قبل از یک فایل دیگر باشد. عملکرد قلاب بر روی صفحه نمایش (echo) کار نمی کند. از آنجا که تغییر مسیر و اکو اتفاق می افتد. اما شما می توانید از Die () استفاده کنید. هنگام فعال کردن افزونه، فایل پلاگین اصلی در منطقه جهانی متصل نیست، اما در داخل تابع itcent_plugin (). بنابراین متغیرهایی که به طور معمول حالت کار پلاگین جهانی در نظر گرفته می شود، جهانی نخواهد بود. بنابراین، کارکردی که در region_hook_hook () استفاده می شود، ممکن است متغیرهای جهانی را ببینند، حتی اگر آنها را به عنوان جهانی درون این تابع اعلام کردید. مثال: $ myvar \u003d "چیزی"؛ register_Activation_Hook (__ file__، "myplugin_Activate")؛ تابع myplugin_active () (Global $ myvar؛ echo $ myvar؛ // متغیر برابر با "چیزی" نیست) به دلیل این ویژگی، متغیرهای جهانی باید همیشه مشخص شوند. تمام متغیرهای جهانی باید به عنوان جهانی تعریف شوند، حتی اگر متغیر در بدن پلاگین نشان داده شود. فقط در این مورد به هر کجا دسترسی خواهد داشت. مثال: جهانی $ myvar؛ // به وضوح نشان می دهد که این یک متغیر جهانی $ myvar \u003d "چیزی" است؛ register_Activation_Hook (__ file__، "myplugin_Activate")؛ تابع myplugin_active () (جهانی $ myvar؛ echo $ myvar؛ //\u003e چیزی) بدون قلاب خالی. هیچ چیز باز نمی گردد نام تابع فراخوانی. برای کلاس ها، از آرایه استفاده کنید: آرایه ($ این، نام تابع ")؛ . این تابع یک متغیر منطقی $ network_wide را دریافت می کند - آیا پلاگین برای کل شبکه سایت ها، با Multisaite فعال می شود. ما فرض کنید ما یک تابع My_Plugin_Activate () در فایل پلاگین اصلی: WP-محتوا / پلاگین / myplugin / myplugin.php، و سپس به شروع در طول فعال سازی پلاگین از این تابع، استفاده از چنین یک کد: ثبت نام_ actation_hook (__ file__، "my_plugin_active")؛ تابع my_plugin_Activate () (/ / / / / کد فعال سازی ...) اگر پلاگین از کلاس PHP استفاده کند، کد فعال سازی اضافه می شود: register_Activation_Hook (__ file__، آرایه (my_plugin "،" install "))؛ کلاس My_Plugin Class (تابع استاتیک نصب () (/ / هیچ خروجی ایجاد نمی کنید ...)) اگر کلاس که شامل عملکرد فعال سازی است، در فایل جداگانه، سپس تابع فعال سازی را به صورت زیر ثبت کنید: شامل_ONCE __DIR__. "/class-my_plugin.php"؛ Register_Activation_Hook (__ file__، آرایه ("my_plugin"، "on_activate_function"))؛ اگر شما در داخل __construct () هستید. مهم، __File__ باید "نگاه" به فایل پلاگین اصلی: Register_Activation_Hook (__ File__، Array ($ این، "your_method_name"))؛ پس از فعال کردن پلاگین، تنها دو قلاب فعال می شوند: Activated_Plugin و خاموش شدن. هنگامی که شما نیاز به انجام هر کاری بلافاصله پس از فعال کردن پلاگین، شما می توانید تابع را به آنها متصل کنید. هنگامی که این راه حل مناسب نیست، می توانید از گزینه های WP استفاده کنید: داده ها را به گزینه ذخیره کنید و سپس در دسترس بودن گزینه را بررسی کنید و اگر گزینه ای باشد، انجام دهید // فایل اصلی پلاگین ... My_plugin_activate تابع () (// اضافه کردن یک گزینه به پس از آن اگر آن را به انجام هر کاری Add_Option ( "Activated_Plugin"، "پلاگین-مثل حلزون حرکت کردن.")؛ // در اینجا کد فعال سازی ...) Register_activation_Hook (__ File__، " my_plugin_Activate ")؛ تابع load_plugin () (iS_ADMIN () && get_option ("activated_plugin") \u003d\u003d "Plugin-slug") \u003d\u003d حذف گزینه اضافه شده به طوری که آن را دیگر کار نمی کند / / انجام آنچه شما نیاز دارید ... delete_option ( "Activated_Plugin")؛ // به هر چیزی یک بار، پس از فعال شدن // پلاگین در به عنوان مثال: ADD_ACTION ( "init انجام"، "my_init_function")؛)) ADD_ACTION ( "admin_init"، "load_plugin")؛ یکی دیگر از گزینه ای برای انجام کاری در طول فعال شدن افزونه این است که رویداد خود را مانند این ایجاد کنید: تابع my_plugin_Activate () (/ / قلاب خود را نصب کنید تا بتوانید از پلاگین Do_Action خود به آن بروید (my_plugin_active)؛) ثبت نام_ activation_hook (__ file__، my_plugin_active ")؛ یک پلاگین کوچک نشان دادن نحوه استفاده از عملکرد: / * نام پلاگین: شرح آزمون: آزمون * / نیاز به DIRNAME (__ file__). "/ my_other_file.php"؛ / * این کد کار نخواهد کرد. قلاب فعال باید از فایل اصلی نامیده شود. Register_Activation_Hook (Dirname (__ file__). "/ my_other_file.php"، "my_other_function")؛ * / // این یک کد کاری است. Register_Activation_Hook (__ File__، "test_Activated")؛ / * این گزینه تأیید صحیح و دسترسی به متغیرهای جهانی است. متغیرهای جهانی باید به وضوح اعلام شود. بدون این شما به آنها دسترسی ندارید. * / global $ some_var؛ $ some_var \u003d "سلام"؛ // تابع test_Ardivated () (/////-$ some_var نخواهد بود hey global $ some_var؛ // $ some_var سلام به همان اندازه // این تابع در فایل "my_other_file.php" تعریف شده است "my_other_function ()؛ * گزینه کار نخواهد کرد. اگر شما نیاز به ضبط سیاهههای مربوط به یک فایل موقت دارید، از Fopen / Fwrite استفاده کنید. اگر می خواهید بررسی کنید که آیا قلاب فعال سازی کار می کند، از خروج () در داخل تابع قلاب استفاده کنید. * / echo "test_activated به نام ! "؛) به شما امکان می دهد از یک تنظیم وردپرس برای چندین سایت در همان زمان استفاده کنید. در همان زمان، هر سایت جداول خود را در پایگاه داده با یک پیشوند منحصر به فرد دریافت می کند. جداول با داده های کاربران ثبت شده مشترک برای همه سایت های شبکه. این یک روز خاص و ثبت نام یک روز شما می توانید به چندین سایت دسترسی داشته باشید. علاوه بر این، در هر سایت، همان حساب ممکن است حقوق متفاوت داشته باشد. به عنوان مثال، در یک سایت، کاربر می تواند سردبیر، و در یک مدیر دیگر باشد. در عادی وردپرس نصب ثبت نام، مجوز و بازنشانی رمز عبور فایل WP-login.php را نمایش می دهد. در حالت Multisite، هسته وردپرس شروع به رفتار تا حدودی متفاوت و هنگام تغییر به لینک WP-login.php می کند؟ action \u003d ثبت نام یک تغییر مسیر را در wp-signup.php دریافت خواهید کرد. این صفحه ثبت نام از شبکه شما است که به طور پیش فرض در وردپرس است. علاوه بر ثبت نام حساب های کاربر عادی، می توانید یک سایت جدید را بر روی آن ایجاد کنید اگر SuperMinistrator این فرصت را در تنظیمات شبکه (تنظیمات شبکه) فعال کرده است. در اکثر موضوعات، صفحه ثبت نام خیلی خوب نیست. بسیاری از تم ها توسط چارچوب CSS مانند بوت استرپ و کلاس های خاص خود را برای سبک سازی عناصر مختلف در صفحات استفاده می شود، بنابراین سخت است که یک HTML را بنویسید که برای همه مناسب باشد. اما اگر صفحه به نظر بی نظیر نباشد، نباید ناامید شود. فایل WP-Signup.php در ابتدا یک چیز عالی است، زمانی که هیچ وقت برای کار کردن هر بخش از سایت وجود ندارد - شما می توانید بر روی صفحات و محتوای مهم دیگر تمرکز کنید. هنگامی که شما آماده هستید که صفحه ثبت نام خود را بسازید، WP-Signup.php یک نمونه خوب و یک مثال خواهد بود، که آسان است برای درک طیف توابع که وردپرس برای پردازش و چک کردن داده های وارد شده توسط کاربران فراهم می کند و ایجاد حساب های جدید را فراهم می کند. به طور پیش فرض، وردپرس صفحه ثبت نام (WP-Signup.php) را در شبکه اصلی (وب سایت) باز می کند. با این وجود، شما می توانید صفحات ثبت نام برای هر سایت شبکه ایجاد کنید، حتی اگر آنها موضوعات داشته باشند. ما این مورد را در نظر می گیریم که یک موضوع در تمام سایت های شبکه استفاده می شود، اما یک صفحه ثبت نام در هر یک از آنها وجود دارد. سایت ها در زبان متفاوت هستند (انگلیسی و روسی)، بنابراین صفحه ثبت نام بر روی سایت زبان بومی نمایش داده خواهد شد. اگر سایت ها از موضوعات مختلف استفاده می کنند، همه چیز بستگی دارد به کدام موضوعات که به آنها یک طرح مشابه (یک وضعیت عالی که می تواند شما را به یکپارچه تمام موضوعات خود) بستگی دارد، بستگی دارد. MU-plugins ممکن است شامل هر تعداد فایل ها و یک ساختار که به نظر منطقی به نظر می رسد. من در مورد چنین سلسله مراتب پایبند هستم: | mu-plugins | | load.php | | سلنا-شبکه | | | ثبت نام | | | | plugin.php | | | ... | | | jetpack | | | | plugin.php در فایل load.php، ترجمه ها و تمام پلاگین های لازم "پلاگین ها متصل هستند: // انتقال انتقال برای mu-plugins load_muplugin_textdomain (selena_network "،" / سلنا-شبکه / زبان / ")؛ // عملکرد صفحه ثبت نام نیاز به wpmu_plugin_dir. "/selena-network/signup/plugin.php"؛ // پلاگین دیگری // نیاز به wpmu_plugin_dir ... در داخل دایرکتوری Selena-Network، پوشه های پلاگین ذخیره می شوند. هر کدام دارای plugin.php خود است، که ما در load.php متصل هستیم. این باعث انعطاف پذیری و توانایی فورا غیر فعال کردن و استفاده از اجزای فردی در پروژه کاری در موارد اضطراری می شود. با درک کجا و چگونگی نوشتن کد، می توانید به ایجاد صفحه ثبت نام بروید. یک صفحه را با example.org/signup/ از طریق رابط کاربری معمولی ایجاد کنید. به عنوان یک آدرس، شما می توانید از هر URL استفاده کنید که برای پروژه شما مناسب است. به وردپرس در مورد ما شناخته شده است صفحه جدید ثبت نام و ایجاد یک تغییر مسیر بر روی آن، هنگام کلیک بر روی پیوند "ثبت نام"، از فیلتر WP_SIGNUP_LOCATION استفاده کنید. این را می توان در داخل wp-login.php یافت و این است که مسئول تغییر مسیر به طور پیش فرض WP-signup.php است. مورد "ثبت نام": اگر (IS_Multisite ()) (WP_REDIRECT (APTION_FILTERS ("WP_SIGNUP_LOCATION"، NETWORK_SITE_URL ("WP-signup.php"))؛ خروج؛ // ... به طور پیش فرض به یاد داشته باشید، صفحه ثبت نام بر روی دامنه اصلی شبکه باز می شود. به همین دلیل است که network_site_url () در اینجا استفاده می شود. فیلتر فیلتر خود را به MU-Plugins / Selena-Network / Signup / Plugin.php اضافه کنید، که به آدرس صفحه ثبت نام در سایت فعلی داده می شود: تابع selena_network_signup_page ($ url)؛) add_filter ("wp_signup_location"، "selena_network_signup_page"، 99)؛ selena_network - پیشوند، که من در نام تمام توابع درون mu-plugins در سایت من برای جلوگیری از درگیری ها استفاده می شود، باید با پیشوند منحصر به فرد خود جایگزین شود. اولویت اضافه کردن فیلتر 99، به دلیل برخی از پلاگین ها، مانند BBPress و BuddyPress، می توانید این آدرس را به خودتان بازنویسی کنید (MU-plugins زودتر از پلاگین های معمولی بارگیری می شود). لطفا توجه داشته باشید که home_url () استفاده می شود، که، بر خلاف network_site_url ()، آدرس سایت فعلی را می دهد، و نه سایت اصلی شبکه. فایل WP-Signup.php شامل تعداد زیادی از توابع و کد است. برای دیدن تصویر به طور کلی، می توانید از کد تاشو استفاده کنید. به عنوان یک قانون، به زبان انگلیسی آن را "کد تاشو" نامیده می شود. در ابتدای فایل از 1 تا 80، خط (در نسخه 4.1.1)، چک های مختلف ساخته شده و خروجی صفحه "شروع" با استفاده از get_header (). بعد، بسیاری از روش ها اعلام می شود و قبل از شروع کار با آنها، ارزش درک هر چه عملکرد را می سازد. در داخل، بسیاری از این ها اغلب از توابع دیگر با پیشوند WPMU_ استفاده می شود، همه آنها در فایل WP / MS-Functions.php اعلام شده اند. این بخش بدون دیدن کد خود سخت است. زیر شرح کوچک توابع اساسی در صورت مشکل شما. در پایین فایل WP-Signup.php (از 646 دوخت در نسخه 4.1.1)، منطق اصلی صفحه ثبت نام، که از روش های فوق استفاده می کند. این قسمت از کد به تابع ارسال نمی شود. در پایان، get_footer () نامیده می شود. بعد، روش کپی کردن wp-signup.php در MU-plug-ins شرح داده خواهد شد و تغییرات را به چنگال توصیف می کند. ممکن است به نظر درست نیست. در عوض، شما می توانید توابع خود را از ابتدا برای چک کردن و خروجی فرم ها با استفاده از کلاس ها، نه توابع متعارف بنویسید. به نظر من، WP-signup.php در حال حاضر دارای تمام منطق لازم برای صفحه ما، تنها برای تغییرات جزئی باقی می ماند. هنگام به روز رسانی وردپرس، WP-Signup.php تغییرات را از زمان به زمان تغییر می دهد، اما این بدان معنا نیست که با هر نسخه باید "Forc" آن را همگام سازی کند. توابع در داخل WP-Signup.php اساسا تنها توسط خروجی HTML مشغول به کار هستند، بررسی داده ها، ایجاد حساب ها و سایت ها در پیشوند WPMU_ مشغول به کار هستند، که در MS-Functions.php اعلام شده است. ما یک تابع ایجاد می کنیم که فرم ثبت نام را در صفحه نمایش می دهد. برای انجام این کار، wp-signup.php را از ریشه وردپرس در mu-bubs / selena-network / ثبت نام / کپی کنید. آن را در داخل Mu-Pugins / Selena-Network / Signup / Plugin.php وصل کنید). نیاز به wpmu_plugin_dir. "/selena-network/signup/wp-signup.php"؛ حذف تمام چک های مورد نیاز و غیر ضروری از همان ابتدای فایل کپی شده. در نسخه 4.1.1، این کل کد از 1 تا 80 خط است. حالا ما آماده هستیم تابع اصلی برای نمایش فرم ثبت نام برای انجام این کار، تمام منطق از خط 646 و تا انتهای فایل ما به تابع selena_network_signup_main منتقل می شود. در پایان، شما دو بسته غیر ضروری را حذف می کنیدبررسی
نتیجه
عملکرد موضوع: تهاجم به قلمرو پلاگین ها
مقدمه ای بر کتابخانه فعال سازی پلاگین TGM
تنظیم فعال سازی پلاگین TGM
"افسانه-TGMPA"، // شما منحصر به فرد TGMPA ID "Default_path" \u003d\u003e get_stylesheet_directory (). "/ lib / plugins /"، // پیش فرض مطلق مسیر "منو" \u003d\u003e "mytheme-install-install-plugins"، // menu slug "has_notices" \u003d\u003e true، // نمایش اطلاعیه های مدیریت "dismissable" \u003d\u003e false // این اعلان ها "dismiss_msg" \u003d\u003e "من واقعا واقعا نیاز به شما برای نصب این پلاگین ها، خوب؟"، // این پیام خروجی در بالای nag "IS_Automatic" \u003d\u003e درست است، // به طور خودکار فعال کردن پلاگین ها پس از نصب "پیام" \u003d\u003e ""، // پیام به خروجی درست قبل از پلاگین جدول" رشته "\u003d\u003e آرایه ()؛ // آرایه ای از پیام که با استفاده از رشته TGM پلاگین فعال سازی)؛؟\u003e نتیجه
شبکه اصلی وب سایت
functions.php؟
چرت زدن
سفارش در فایل ها
آدرس صفحه ثبت نام
ایجاد یک صفحه
wP-Signup.php و WP-algent.php
ما نامه های فعال سازی را ارسال می کنیم
نتیجه
جایزه. حفاظت در برابر اسپم ها
چگونه کار می کند
شرایط استفاده
یادداشت های مربوط به منطقه متغیرها
بازگشت
استفاده كردن
Register_Activation_Hook ($ فایل، $ تابع)؛ $ فایل (رشته) (مورد نیاز) راه به چیز اصلی فایل پی اچ پی پلاگین شامل نام پلاگین خود. به طور معمول از PHP ثابت جادویی __File__ استفاده می شود. $ تابع (خط / آرایه / لامبدا) (مورد نیاز)
مثال ها
#one اجرای یک تابع هنگام فعال کردن پلاگین
# 2 شروع یک روش کلاس
# 3 یک روش کلاس را از یک فایل جداگانه اجرا کنید
#four یک کلاس کلاس از کلاس را اجرا کنید
# 5 بلافاصله پس از فعال شدن پلاگین هر چیزی را بسازید
# 6 یکی دیگر از تظاهرات استفاده از عملکرد
شبکه اصلی وب سایت
جایگزین برای functions.php.
سفارش در فایل ها
صفحه ثبت نام
تغییر مسیر به صفحه ثبت نام مورد نظر
WP-Signup.php قابلیت
کپی WP-Signup.php را کپی کنید