آموزش اتصال دیتابیس اطلاعات کاربران دو سایت وردپرس جدا از هم
کد تخفیف در جریان tabestan97 %15 تا آخر تابستان 97

یکی از نیازهای سایت های متعدد روی یک هاست شاید اتصال دیتابیس مربوط به کاربران در این سایت ها باشد. به گونه ای که کاربران با ثبت نام و عضویت در سایت اصلی، بتوانند در سایت های نصب شده به صورت سابدامین ما هم وارد حساب خود شوند و نیازی به ثبت نام مجدد نداشته باشند. چنین قابلیتی در وردپرس شبکه (چند سایته) وجود دارد به گونه ای که کاربران در یک سایت ثبت نام کرده اما اجازه ی ورود به حساب در تمامی سایت های زیرمجموعه و وبلاگ ها را خواهند داشت.

User Login

در وردپرس های مجزا و جدا از هم (به صورتی که دو وردپرس نصب شده اند) نیز می توانیم چنین امکانی داشته باشیم اما این مورد شرایطی نیاز دارد:

  1. اولا دو یا چند وردپرس روی یک دیتابیس نصب شده باشند
  2. دوما نسخه وردپرس ها باید کاملا مشابه هم باشند (برای مثال تمامی آنها از 4.9.1 استفاده کنند). دلیل استفاده مشابه از یک نسخه این است که احتمال متفاوت بودن جداول و دستورات دیتابیس در نسخه های متفاوت وجود دارد.

در این مستند از مارکت دِومی قصد داریم مراحل انجام این کار را برای شما شرح دهیم.

 


1 . نصب وردپرس ها روی یک دیتابیس

انجام اینکار بسیار آسان است . برای اینکار، می توانید چندین ساب دامین ایجاد کنید، وردپرس ها را به صورت جداگانه در هر سابدامین آپلود کنید. اما مهم ترین شروط برای انجام اینکار به این ترتیب است:

  1. در مراحل نصب وردپرس ها، دقیقا اطلاعات یک دیتابیس وارد شود.
  2. پیشوند جدول دیتابیس در مراحل نصب با مابقی وردپرس ها متفاوت باشد.

در حالت عادی، زمانی که وارد مرحله نصب وردپرس می شوید، پیشوند جداول وردپرس به صورت wp_ در نظر گرفته می شود. اگر قصد دارید چند وردپرس را روی یک دیتابیس نصب کنید، این پیشوندها باید متفاوت باشند. برای مثال در نصب وردپرس دوم، پیشوند جدول دیتابیس را wps_ و یا وردپرس سوم wpt_ یا از هر پیشوند دلخواه دیگری مانند xy_ یا devme_  و … می توانید استفاده کنید.

WordPress Installation

تنها هدف اینکار، جدا شدن و جلوگیری از ترکیب شدن جداول دیتابیس وردپرس هاست .

 


2 . معرفی جدول اطلاعات کاربران به وردپرس های دوم به بعد

پس از نصب وردپرس ها، فایل wp-config.php مربوط به وردپرس دوم را باز کنید. پیش از خط /* That's all, stop editing! Happy blogging. */ کد زیر را قرار دهید:

define('CUSTOM_USER_TABLE', 'wp_users');
define('CUSTOM_USERMETA_TABLE', 'wp_usermeta');

نکته ضروری:

در دو خط بالا، عبارات wp_users و wp_usersmeta را مشاهده می کنید. در این کد فرض شده که پیشوند جدول های دیتابیس در وردپرس اول wp_ است. حال اگر پیشوند جداول دیتابیس وردپرس اول شما چیز دیگری است حتما باید آن را در کد بالا وارد نمایید. در واقع با این کدها قصد داریم اطلاعات کاربران را از سایت اصلی دریافت کنیم.

 


3 . جلوگیری از تداخلات کوکی و کش مرورگر

با انجام مرحله قبل، اطلاعات کاربران بین وردپرس اول و وردپرس دوم به اشتراک گذاشته خواهد شد و اگر کاربری در سایت اصلی شما عضو شده باشد، در وردپرس دوم شما که به صورت ساب دامین نصب شده نیز با همان اطلاعات خواهد توانست وارد حساب کاربری خود شود.

اما اتصال یک جدول به دو وردپرس ممکن است مشکلات کش و کوکی مرورگر به همراه داشته باشد، پس فایل wp-config.php وردپرس دوم را مجددا باز کنید و کد پایین را زیر کد مرحله قبل قرار دهید:

define('COOKIE_DOMAIN', '.yoursite.com');
define('COOKIEPATH', '/');

تنظیمات:

  • در خط اول بجای yoursite.com دامنه اصلی سایتتان را وارد کنید. از وارد کردن سابدامین خودداری کنید! تنها آدرس سایت وردپرس اول را وارد نمایید.
  • در خط اول، نقطه ی قبل از آدرس سایت را حذف نکنید!

پس همانطور که مشاهده کردید، تمامی تغییرات ما روی وردپرس دوم بود. هم اکنون کاربران شما خواهند توانست به راحتی بین سابدامین های شما گشت و گذار کنند و نیازی به ثبت نام مجدد برای هر کدام نخواهند داشت.

معراج گفت :بهمن 9, 1396

سلام و خسته نباشید .
آقا دو سه جای این آموزش گنگ هست . من همه مراحل رو انجام دادم اما چند تا مشکل هست .
1: زمانی که وردپرس دوم رو میخوایم نصب کنیم باید تو htdocs و تو پوشه مثلا site01 فولدر ساخته بشه و وردپرس اونجا نصب شه درسته ؟
2: من این کار رو انجام دادم . نصب کردم . دیتا بیس رو هم یکی کردم و تو دیتا بیس جداول ساخته شد و درست بود فقط مشکلی که هست اینه که تو پنل ادمین سایت دوم که میرم دیگه اون بالا سمت راست گزینه سایت های من وجود نداره و در اصل یک سایت مجزا شده .
3: یک کا دیگه هم تست کردم و اون این بود که از تو خود مدیریت شکه ساخت سایت جدید رو زدم و ساخته شد . اما اینجا دیگه من وردپرسی نصب نکردم که بتونم فایل confiq.php داشته باشم .
4: کدوم از این راه ها درست است ؟ من دقیقا تو این مرحله چار باید انجام بدم ؟
5: تو وردپرس شبکه امکان اینکه ار بسته نصبی آسان برای نصب وردپرس ها استفاده شه وجود نداره ؟
چون من اینکار رو هم تست کردم اما وردپرس دوم جداول قبل رو پاک کرد با اینکه پیشوند ها کاملا متفاوت بود .

عذر میخوام انقدر سوالم طولانی شد اما فکر میکنم هر کسی در این زمینه سوال داشته باشه تو اینا گنجانده شده .

ممنون از شما و سایت خوبتون

مسیح دیندار گفت :بهمن 10, 1396

درود.
1. عموما اسکریپت ها رو باید در پوشه public_html نصب کنید. مگر اینکه پوشه سابدامین رو در هنگام ساختنش در یک مسیر دیگه تعیین کرده باشید.
2. زمانی که وردپرس ها رو به صورت مجزا نصب کنید، در هیچ یک از وردپرس ها گزینه ای برای مدیریت سایت های دیگه نخواهید داشت. این امکان تنها در وردپرس شبکه در دسترس است.
3. زمانی که وردپرس رو شبکه کنید، برای سایت های جدید زیرمجموعه که ایجاد می کنید، پوشه ی جدیدی یا فایل wp-config مجزایی ساخته نمیشه. تمامی سایت های زیرمجموعه از همون فایل های وردپرس شبکه استفاده می کنند. در واقع در وردپرس شبکه شما یک اسکریپت وردپرس دارید اما همزمان چندین سایت ساخته شده در شبکه از همون فایل ها استفاده می کنند. اگر وردپرس شبکه نصب کنید، نیازی به اتصال دیتابیس ها جهت دسترسی کاربران به سایت های دیگه نیست. در وردپرس شبکه کاربران در یکی از سایت ها عضو میشن و می تونند در تمامی سایت های شبکه وارد حساب کاربریشون بشن. این آموزش برای اون دسته از سایت هایی هست که قصد دارند یک سایت جدید به صورت سابدامین ایجاد کنند و امکان ورود کاربران سایت اصلی به زیرمجموعه جدید رو فراهم کنند.

اما وقتی وردپرس شبکه نصب بشه، نیازی به انجام این آموزش نیست.

5. خیر، برخی از بسته های نصبی آسان دیتابیس رو بازنویسی می کنند. از اونجا که در وردپرس شبکه یک دیتابیس بیشتر مورد استفاده قرار نمی گیره، استفاده از بسته نصب آسان کمی مشکل ساز میشه. قالب ها و افزونه ها رو باید به طور دستی در پنل مدیریت اصلی شبکه نصب و فعال کنید بعد در سایت های زیرمجموعه از اونها استفاده کنید.

کریمی گفت :اسفند 2, 1396

سلام
خیلی دنبال این مطلب گشتم، از اینکه این آموزش رو گذاشتید سپاسگزارم. فقط یه پرسش دارم سایتی که قبلا نصب شده و مطلب هم توش هست رو چکار باید کرد؟ این آموزش برای راه اندازی سایت جدیده ما که قبلا سایت رو راه اندازی کردیم و این امکان رو نیاز داریم چکار باید بکنیم که اطلاعاتمون هم از بین نره؟

مسیح دیندار گفت :اسفند 2, 1396

درود.
پاسخ به پرسش شما کمی طولانی می شد، بنابراین یک مطلب جداگانه نوشتیم که به طور کامل مراحل رو توضیح دادیم. اینجا کلیک کنید و مراحل رو مطالعه کنید.

موفق باشید.

احسان گفت :اسفند 17, 1396

سلام ممنونم از هر دو مطلب عالی شما واقعا جای تشکر داره .

فقط یه موردی که هست چطور میشه بدون اینکه کاربر نیاز به لاگین دوباره داشته باشه این امکان فراهم بشه تا به محض ورود به سایتی که در سابدامین هست خودبخود لاگین شده باشه . میخوام کاربر نخواد هی لاگین کنه و وقتی از سایت اول وارد سایت دوم شد براحتی به انجام مابقی کارهای خودش بپردازه

توی این انجمن یه چیزی پیدا کردم و همین مورد رو که من منظورمه توضیح داده بود اما نتونستم انجامش بدم ممنون میشم یه راهنمایی کنید یا همین آموزش رو تکمیل کنید تا فرایند مورد نظر کامل تر بشه .
http://forum.wp-parsi.com/topic/36595-%D9%84%D8%A7%DA%AF%DB%8C%D9%86-%D9%87%D9%85%D8%B2%D9%85%D8%A7%D9%86-%D8%A8%DB%8C%D9%86-%D8%AF%D9%88-%DB%8C%D8%A7-%DA%86%D9%86%D8%AF-%D8%B3%D8%A7%DB%8C%D8%AA-%D9%88%D8%B1%D8%AF%D9%BE%D8%B1%D8%B3%DB%8C-%D9%85%D8%AC%D8%B2%D8%A7-%D8%A8%D8%A7-%D8%AC%D8%AF%D9%88%D9%84-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%A7%D9%86-%D8%A7%D8%B4%D8%AA%D8%B1%D8%A7%DA%A9%DB%8C/

تشکر

مسیح دیندار گفت :اسفند 17, 1396

درود بر شما.
طبق لینکی که دادید، باید کوکی های هر دو سایتتون مشابه باشند تا مرورگرها، کاربر رو در هر دو سایت در حالت لاگین شده نگه دارند. داخل تاپیکی که ذکر کردید به خوبی توضیح داده شده.

یعنی کد سوم که قرار دادن، باید در هر دو فایل کانفیگ وردپرس ها مشابه باشند. البته این مورد گاهی اوقات باعث مشکل میشه. این کار نیاز به کمی کدنویسی اختصاصی داره که داخل وردپرس شبکه وجود داره ولی برای وردپرس عادی که صرفا دیتابیس ها ادغام بشن، سخت میشه چنین امکانی پیاده کرد. ولی راه کار اصلی برای چیزی که می خواهید اینه که کوکی ها مشابه باشند.

حسین گفت :اسفند 19, 1396

سلام، اگر یک سایت php بود و یک سایت دیگر وردپرسی باشد، و بنابر این باشد که کاربر سایت php ثبت اطلاعات فرضا سفارش یک کالا در دیتا بیس سایت وردپرسی بنشیند چه باید کرد؟

مسیح دیندار گفت :اسفند 20, 1396

درود . برای اتصال یک اسکریپت متفاوت با وردپرس، باید هر دو روی یک دیتابیس قرار گرفته باشند و کدنویسی اسکریپت رو به گونه ای تغییر بدید که اطلاعات یک فرم رو داخل یک جدول در دیتابیس بنویسد. ولی ایده این کار به اینصورته که باید یک جدول مشترک داشته باشید تا اطلاعات ارسال شده در فرم سفارش، هم در همان اسکریپت و هم در وردپرس نمایش داده بشه. حالا بسته به نوع اسکریپتی که دارید باید از پشتیبانی اون اسکریپت کمک بخواهید تا بهتون راهنمایی کنن چه اقداماتی باید انجام بدین تا یک جدول رو مشترکا بین اون اسکریپت و وردپرس استفاده کنید.

اما اگر منظورتون از فرم سفارش فقط یک فایل PHP ساده هست، می تونید با تصحیح ردیف های مورد ذخیره داخل فایل PHP و شناسایی جدول خاص و دیتابیس وردپرس، اطلاعات رو که از فایل PHP ارسال میشه رو داخل یک جدول ذخیره کنید که به این صورت داخل وردپرس هم اطلاعات قابل مشاهده خواهند بود. آموزش کامل این گفته رو می تونید از این لینک دنبال کنید.

سپهر سیاست گفت :اسفند 22, 1396

سلام عزیز
حدود یکساله که دارم دنبال این آموزش میگردم
واقعا دمتون گرم
حدود 1 ملیون خرج کردم تا حالا برای اینکار
حالا برام شبکه کردن
ولی موضوع اینه که مسئله فقط لاگین نیست
مثلا یکی اومده از ساب دامنه فروشگاه من یه چیزی خریده ولی وقتی پنل کاربری اش رو از ساب دامنه مقالات باز میکنه چون روی سایت مقالات دیگه ووکامرس نصب نیست و اطلاعات سفارش هاشو بهش نشون نمیده
در صورتی که مخاطب یه پنل کلی باید داشته باشد
ولی انگار وردپرس شبکه برای هر سایت که میسازی یه پنل کاربری جدا میسازه

مسیح دیندار گفت :اسفند 22, 1396

درود بر شما.
جدول مربوط به ووکامرس در دیتابیس مجزا هست. این مورد که میگم خدمتتون آزمایش شده نیست ولی ایده اینکار به طور تئوری قابل اجرا هست.

ابتدا شما باید ووکامرس رو در سایت دیگتون هم نصب کنید تا بتونید از توابع اطلاعات سفارشات و فیلدهای کاربران استفاده کنید.
بعد مثل بند 2 آموزش (یعنی معرفی جدول کاربران) باید جدول های مربوط به ووکامرس رو در وردپرس دیگتون به اشتراک بگذارید. بدین ترتیب امکان اینکه اطلاعات ووکامرس بین دو وردپرس به اشتراک گذاشته بشه هست.

یعنی در مرحله دو این آموزش، بجای تعریف wp_users و wp_usersmeta باید جدولهای ووکامرس رو مثل : wp_5_woocommerce_order_items و … رو به فایل wp-config.php وردپرس دیگتون معرفی کنید.

فقط دقت کنید که این روش در صورتی که عملی هم باشه، فقط روی وردپرس های جدا از هم قابل اجراست که اطلاعات کاربران رو متصل کردند. در وردپرس شبکه تکی (وردپرسی که یک سایت واحد داره و سایت های دیگه زیرمجموعه اون هستند و تمامی سایت ها از پنل اصلی قابل مدیریت هستند) امکان پذیر نیست.

Rahpak گفت :فروردین 20, 1397

سلام وقت بخیر. تشکر میکنم بخاطر مطالب عالی آموزشیتون خیلی مفید واقع شد. فقط یک سوال داشتم. وقتی که در سایت اصلی کاربر عضو میشه به عنوان مشترک عضو میشه. اما این درحالیه که نقشی برای این کاربر در زیر دامنه مشخص نشده و به قسمت پنل مدیریت در زیر شاخه دسترسی نداره چون نقشی برای اون در زیر شاخه ثبت نشده و باید برای ثبت نقش مدیر سایت دوم کاربر را ویرایش کرده و به ایشون نقشی تعریف کنه آیا راهی هست که به صورت خودکار در ساب دامین هم مثل سایت اصلی نقش مشترک تعریف بشه؟

مسیح دیندار گفت :فروردین 20, 1397

درود.
اگر در سایت زیرمجموعه هم قابلیت ثبت نام فعال باشه و نقش پیش فرض، مشترک در نظر گرفته بشه، نباید مشکلی باشه! چون با انجام این آموزش یک جدول به صورت مشترک تعریف میشه و تمامی اطلاعات بین تمامی وردپرس ها مشترک خواهد بود. نقش و گروه کاربر هم جزئی از همین اطلاعات هست که بین تمامی وردپرس ها مشترک هست.

جلال گفت :تیر 9, 1397

سلام
با این روش دیتابیس سنگین میشه
راهی هست که دو تا وردپرس که با دو تا دیتابیس جدا از هم هستند رو بهم وصل کرد؟

مسیح دیندار گفت :تیر 11, 1397

درود.
تفاوتی نداره. حجمی که قراره دو تا دیتابیس مجزا پر کنند، داخل یک دیتابیس قرار داده میشه. دیتابیس وردپرس شبکه هم یکی بیشتر نیست. روی سرعت تاثیری نداره.

شمس گفت :مرداد 30, 1397

سلام. با تشکر از مطلب و آموزش خوبتون.
من دقیقا همین مراحل رو انجام دادم و سایت دوم رو توی پوشه ای مجزا نصب کردم. ولی متاسفانه وقتی رشته کد های کاستوم یوزر تیبل و کاستوم یوزر متا تیبل جدول سایت اول رو بر روی کانفیگ سایت دوم تعریف میکنم یه مشکلی پیش میاد. مشکل اینه که وقتی وارد پنل مدیریت سایت دوم میشم مینویسه “متاسفانه شما اجازه‌ی بازدید از این صفحه را ندارید.”
این رو هم بگم که در سایت اول افزونه iTheme security رو نصب کرده بودم و از امکاناتی مثل مخفی کردن مسیر لاگ این و … استفاده کرده بودم ولی همه رو به حالت اول در آوردم و توی افزونه دی اکتیو کردم و بعد هم افزونه امنیت رو کلا از نصب خارج کردم ولی باز هم مشکل حل نشد.
ممنون میشم راهنماییم کنین تا متوجه شم مشکل کار کجا بوده.

دیدگاه شما درباره این صفحه چیست؟