وردپرس آموزش وردپرس

متمایز کردن نظرات مدیران در وردپرس به روشی جدید

https://www.yekweb.com/wp-content/uploads/2011/10/different-style-for-admin-comments.jpg

ما همیشه به دنبال راه‌های بهتر و جدیدتر برای رفع مشکل‌هامون هستیم. مطلاب امروز، نوشته‌ای درباره "منحصر به‌فرد کردن نظرات مدیر در وردپرس" به روشی جدیدتر هست. یک آموزش جدید و در واقع تکمیل یافته آموزش "برجسته کردن دیدگاه های مدیر سایت". این روش در واقع عیب آموزش قبلی رو از بین برده. به این دلیل که در روش قبلی یه اشکال بزرگ وجود داشته و اون این بود که پس از پایان مراحل کار، هنگامی‌که سایت یا بلاگ وردپرسی‌تون چند مدیر داشته باشه، فقط نظرات مدیرکل (منظور از مدیر کل اینجا مؤسس بلاگ هست) هایلات خواهد شد و نظرات سایر مدیران و یا حتی در مواقع لزوم ویرایشگران به حالت عادی خواهد ماند. در واقع آپدیت این روش بر پایع تابع پی‌اچ‌پی "if … else" بنا شده که در روش قبلی نیز به‌کار رفته بود. البته ناگفته نمونه که برای انجام این‌کار پلاگین‌های متعددی هم وجود داره که به دلایل زیادی استفاده از این پلاگین‌ها توصیه نمیشه چون اکثراً هوشمند نیستن و همچنین به خاطر صرفه‌جویی در منابع هاست، بهتره از روش‌های دستی استفاده کنین. در زیر ما دو روش برای انجام اینکار خدمت شما عرض خواهیم کرد تا بتونین برای بلاگتون از این روش‌ها استفاده کنین.

 

روش دستی اضافه کردن لیست

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

 

ساخت لیست ایمیل

برای مرحله بعد، ما به تعیین کردن لیست ایمیل‌هایی که مخصوص هستند نیاز داریم. من از چند ایمیل برای نمونه در اینجا استفاده کردم تا بتونین به‌خوبی مسئله رو درک کنین.

<?php
	//List of emails to highlight
	$admin_emails = array(
		"saeid@yekweb.com",
		"vahid@yekweb.com ",
		"ali@yahoo.com",
		"mohamad@gmail.com"
	);
?>

 

شما گزینه‌هایی خواهید داشت

شما می‌تونید هر تعداد ایمیلی که نیاز دارین به لیست اضافه کنین. لیست می‌تونه همه‌ی ایمیل‌ها رو چک کنه.

در این روش شما باستی بصورت دستی همه‌ی ایمیل‌هایی که هدف شماست به لیست اضافه کنین. این روش قاعدتاً آسون‌تر و سریع‌تر از روش شناسایی اکانت ادمین‌ها بصورت اتوماتیک، روشی که در ادامه عرض خواهد شد، هست.

 

روش گرفتن خودکار ایمیل‌ها از دیتابیس

اگه مایل به استفاده از این روش هستید، می‌تونیم این کد رو بنویسیم. بنابراین در صورت استفاده از این کد ما هرگز مجبور به وارد کردن دستی ایمیل‌ها در comments.php نخواهیم بود. این روش هم در اکثر سایت‌ها استفاده می‌شه، ولی خب روش قبلی روش سریع‌تر و سرعت عمل اون روش بیشتر هست. اما اگه این روش رو ضروری دونستین می‌تونین از این روش استفاده کنین.

 

جستجوی ایمیل‌ها در دیتابیس

ما برای مرحله اول نیاز داریم که تمامی ایمیل‌های مدیران رو از دیتابیس دریافت کنیم و اون‌ها رو در صف جایگزینی کنیم. این‌کار برای گرفتن لیست خاصی از ایمیل‌های کاربران وردپرس از دیتابیس کار آسونی هست.

 

<?php 

	//Automatically pull admin accounts

	$user_level = 8; //Default user level (1-10)
	$admin_emails = array(); //Hold Admin Emails

	//Search for the ID numbers of all accounts at specified user level and up
	$admin_accounts = $wpdb->get_results("SELECT * FROM $wpdb->usermeta WHERE meta_key = 'wp_user_level' AND meta_value >= $user_level ");

	//Get the email address for each administrator via ID number
	foreach ($admin_accounts as $admin_account){

		//Get database row for current user id
		$admin_info = $wpdb->get_row("SELECT * FROM $wpdb->users WHERE ID = $admin_account->user_id");

		//Add current user's email to array
		$admin_emails[$admin_account->user_id] = $admin_info->user_email;
	}

?>

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

  1. متغیر $user_level شامل یک عدد بین 1-10 است. طبق قانون‌های کاربران وردپرس (برای مثال مدیران، ویرایشگران، و …) همگی بر اساس یک مقدار نمایش داده می‌شوند. برای انتخاب کردن فقط شناسه مدیران، این عدد باید روی 8 قرار بگیره.
  2. صف $admin_emails ایمیل‌هایی که از کوئری برگشت داده می‌شن رو نگه می‌داره.
  3. اولین کوئری دیتابیس، جدمل usermeta رو برای تمامی کاربرها به همراه کاربر با درجه بالاتر یا مساوی که در $user_level به نمایش گذاشته شده بود رو جستجو می‌کنه. نتیسجه این کارها و مراحل، در صف $admin_level به نمایش خواهد اومد.
  4. هر گزینه در صف $admin_accounts مراحلی رو طی می‌کنه و جدول کاربران شماره آیدی یوزر از مرحله سوم رو جستجو می‌کنه. آدرس ایمیل دوباره بدست آورده می‌شه و در صف $admin_emails به نمایش گذاشته می‌شه که به عنوان شناسایی کننده در صف به‌کار می‌ره.

در آخر این کد، ما باید لیست آدرس ایمیل‌هایی که سطح اون‌ها رو $admin_emails مشخص کرده بود، مرتب کنیم.

 

انتخاب کردن نظرات مدیر

همونطور که در پایین مرحله قبل گفته شد ما بایستی لیست ایمیل‌های مدیران رو مرتب کنیم.

 

فیلتر کردن نظرات

اکنون ما یه لیست در اختیار داریم، ما بایستی هر ایمیلی که مختص نظرات مدیر هست رو چک کنیم. اگه نظری طبق این شرط پیدا شد، اون استایل خاص خودش یعنی "admincomment" رو دریافت کنه و استایل رو به نمایش بگذاره.

در فایل comments.php پوسته بلاگ شما، چرخه نظر foreach رو قرار می‌دیم.

 

<!--Check if comment is by the author-->
<?php
	//Default to
	$admin_comment = false;
	foreach ($admin_emails as $admin_email){
		//If comment was made from an admin email
		if($comment->comment_author_email == $admin_email){
			$admin_comment = true;
                        break;
		}
	};
?>

 

کد بالا، آدرس ایمیل نویسنده نظر رو می‌گیره و اون رو در لیست ایمیل مدیر چک می‌کنه. اگه نتیجه مثبت بود، $admin_comment درست تنظیم می‌شه.

 

تعیین کردن کلاس خاص برای نظرات

نظرات مخصوص، بصورت عادی توسط کلاس "admincomment" تعیین شده‌اند. من در اینجا کد مورد نظر رو نوشتم. شما حتماً به کد PHP که در کلاس ul تعریف شده، توجه خاصی کنید.

<ul class="comments <?php if($admin_comment) echo 'admincomment'; ?>">
	<!--سایر کدهای کامنت اینجا-->
</ul>

به‌خاط داشته باشید ساختار کامنت حتماً می‌بایستی بعد از چرخه $isByAdmin در مرحله قبل قرار داده بشه تا به درستی کار کنه.

 

 

استایل دادن به نظرات

وقتی که تابع PHP دریافت می‌کنه که نظر مخصوص مدیر هست در خروجی کلاس مورد نظر ما رو به نمایش می‌ذاره، یعنی در واقع همون هدف اصلی‌مون. پس باید ما در فایل استایل پوسته این class رو تعریف کنیم تا تابع، کلاس استایل رو دریافت کنه.

من در اینجا یه نمونه ساده css رو برای راهنمایی شما قرار می‌دم. امّا امیدوارم شما یه ایده‌ی خلاقانه‌تری برای کار نهایی انجام بدین.

.admincomment{background:#191919; color:#FFF; border:1px solid #333;}

 

دانلود ریز کدها

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

 

به‌زودی قابل دسترس در یک افزونه

هم‌اکنون شما تونستین این‌کار رو انجام بدین، خوش به حالتون. ما قصد داریم این روش رو برای استفاده آسون کلاس برای پوسته‌های وردپرس تهیه کنیم.

نسخه پلاگین شامل متدهای بالا برای نمایش می‌شه. ما برنامه‌ای برای دانلود این پلاگین تو روزهای آینده در ذهن داریم.

 

ایده‌ها و درخواست‌های دیگه‌ای دارین؟ اگه جواب بله هست می‌تونین پایین در بخش نظرات مطرح کنین و ما مطمئناً اون‌ها رو قبل اینکه انتشار نهایی انجام بشه در افزونه ملاحظه می‌کنیم.

 

موفق و شاد باشید https://www.yekweb.com/wp-includes/images/smilies/yw/happy.png

 

منبع: پایگاه اینترنتی یک وب

درباره نویسنده

یک وب

یک‌وب ، تنها یک وب نیست

24 دیدگاه

پاسخ دادن به Omid Sh X