همه ما وردپرس را دوست داریم ، چیزی که ما را بیشتر عاشق آن می کند ، امکان سفارشی کردن آسانش است.یعنی با مقداری کد می توانید کارهای بزرگی بوسیله وردپرس انجام دهید،مخصوصا اگر از filterها،action ها و hook ها استفاده کنیم.
گرچه وردپرس ۳ + با امکاناتش همه اذهان را متوجه خودش کرد ولی گاهی چیزی که ما نیاز داریم به کل متفاوت از پیش فرض های سیستم است.این همان چیزی است که امروز می خواهیم در موردش صحبت کنیم.
حالا بعضی از هک ها و توابع را خواهیم دید که می توانند در سفارشی کردن وردپرس کمک شایانی به ما بکنند.لطفا با ما همراه باشید.
دریافت خلاصه پست خارج از حلقه
با این ،دیگر نیازی ندارید تا حتما داخل حلقه باشید تا بتوانید خلاصه ای از آن را بیرون بکشید.این امکان مخصوصا زمانی مفید است که می خواهید تعدادی از پست ها را در بخش کناری (sidebar) نمایش دهید ،پس نیازی به داده های اضافی پست ندارید(مثلا فقط عنوان ،لینک و خلاصه )
<?php function get_excerpt_outside_loop($post_id) { global $wpdb; $query = 'SELECT post_excerpt FROM '. $wpdb->posts .' WHERE ID = '. $post_id .' LIMIT 1'; $result = $wpdb->get_results($query, ARRAY_A); $post_excerpt=$result[0]['post_excerpt']; return $post_excerpt; } ?>
عدم نمایش نوار مدیریت وردپرس
وردپرس ۳ که آمد همراه خود یک نوار مدیریت سیاه رنگ نیز آورد که برای بعضی ها (مثل بنده) خوش آیند بود ولی برای بعضی های دیگر آزار دهنده یود.حالا اگر از گروه دوم هستید ،با استفاده از این کد می توانید آن را حذف کنید (در همین رابطه : چگونه نوار مدیریت جدید وردپرس را بردارم!) .
<?php global $current_user; get_currentuserinfo(); if ($current_user->ID != 1) { add_filter( 'show_admin_bar', '__return_false' ); } ?>
تنظیم نام ارسال کننده و ایمیل برای wp_mail()
وردپرس به صورت پیش فرض از ایمیل مدیر برای ارسال ایمیل استفاده می کند.ولی این امکان همیشه خوب نیست .شاید شما بخواهید ایمیل تان را به عنوان مدیر در وبلاگ قرار دهید ولی کس دیگری به پیام های تماس ،نظرات و … پاسخ دهد.بنابراین اگر مایل هستید این تنظیمات را تغییر دهید ،می توانید از اسنیپت زیر استفاده کنید:
<?php function mail_from() { $emailaddress = '[email protected]'; return $emailaddress; } function mail_from_name() { $sendername = "Fotolia.ir - Ali"; return $sendername; } add_filter('wp_mail_from','mail_from'); add_filter('wp_mail_from_name','mail_from_name'); ?>
ایمیل های HTML با تابع wp_mail()
به صورت پیش فرض اگر بخواهبد با تابع wp_mail() ،ایمیلی را در فرمت HTML ارسال کنید ،چیزی که دریافت خواهید کرد یک ایمیل متنی است.البته با قرار دادن تعدادی header این مشکل حل می شود ولی می خواهیم کمی جلوتر رفته و یک قالب (template) برای ایمیل هایمان ایجاد کنیم(مثلا contact.html) که شامل تعدادی متغیر php است و از این پس کافیست آن را در تابع ایمیل فراخوانی کنیم.فایل template من این گونه بود:
<?php function mail_from() { $emailaddress = '[email protected]'; return $emailaddress; } function mail_from_name() { $sendername = "1stWebDesigner.com - Dainis"; return $sendername; } add_filter('wp_mail_from','mail_from'); add_filter('wp_mail_from_name','mail_from_name'); ?> <html></span></h2> <pre><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> <table style="font-family: Verdana,sans-serif; font-size: 11px; color: #374953; width: 600px;"> <tr> <td align="left"><a href="<?php bloginfo('url'); ?>" title="MyBlog"><img src="<?php bloginfo('url'); ?>/logo.png" alt="MyBlog" style="border: none;" ></a></td> </tr> <tr> <td> </td> </tr> <tr> <td align="left">Yo, <?php echo $name; ?>.<br />How are you?</td> </tr> <tr> <td> </td> </tr> <tr> <td>I've recieved your message and we'll answer it soon!</td> </tr> <tr> <td> </td> </tr> <tr> <td align="left" style="background-color: #aeaeae; color:#FFF; font-size: 12px; font-weight: bold; padding: 0.5em 1em;">Original Message</td> </tr> <tr> <td><?php echo $message; ?></td> </tr> <tr> <td> </td> </tr> <tr> <td align="center" style="font-size: 10px; border-top: 1px solid #c10000;"> <p><i>Thank you!</i><br /><b>MyBlog</b> - <br /><?php bloginfo('url'); ?></p> </td> </tr> </table> </body> </html>
و حالا این تابع را با فرم تماس خودمان فراخوانی می کنیم:
<?php function contactMail($post) { $attachments = ""; $subject = "[MyBlog] Contact"; $name = $post["name"]; $email = $post["email"]; $message = $post["message"]; ob_start(); include(TEMPLATEPATH . '/_mails/contact.html'); $message = ob_get_contents(); ob_end_clean(); $headers = "From: [email protected] \r\n"; $headers .= "Return-Path: [email protected] \r\n"; $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: text/html; charset=UTF-8\r\n"; $headers .= "BCC: [email protected]\r\n"; //$headers .= "BCC: [email protected]\r\n"; wp_mail( $email, $subject, $message, $headers, $attachments ); } ?>
محدود کردن دسترسی به wp-admin
شاید بخواهید دسترسی کاربران عضو را به بخش wp-admin قطع کنید،چون واقعا نیازی به ورود به این بخش ندارند ،درسته ؟ خوب انجام این کار خیلی آسان است .کافیست از اسنیپت زیر استفاده کنید.
<?php function restrict_access_admin_panel(){ global $current_user; get_currentuserinfo(); if ($current_user->user_level < 4) { //if not admin, die with message wp_redirect( get_bloginfo('url') ); exit; } } add_action('admin_init', 'restrict_access_admin_panel', 1); ?>
مخفی کردن پیام بروز کردن وردپرس بری همه غیر از ادمین عزیز
این پیام هشدار که وردپرس برای بروز کردن نسخه قدیمی به ما می دهید ،خیلی ضروری است و اگر نباشد ممکن است تا چند سال نفهمیم که نسخه جدیدی هم آمده است.ولی کاملا غیر حرفه ای است که کاربران عادی و یا همه غیر از مدیر این پیام را ببینند.درسته ؟پس چکاری انجام دهیم تا فقط برای مدیر نمایش داده شود؟ هیچی ،از کد زیر استفاده کنید 🙂
<?php function wp_hide_update() { global $current_user; get_currentuserinfo(); if ($current_user->ID != 1) { // only admin will see it remove_action( 'admin_notices', 'update_nag', 3 ); } } add_action('admin_menu','wp_hide_update'); ?>
مخفی کردن منوهای مدیریت وردپرس
هنگامی که سایت های تکمیل شده را به مشتری ها می فروشیم ،ممکن است از امکانات زیاد آن کاملا سرگیجه بگیرند و عصبی شوند(البته در مقایسه با بعضی ها ،مدیریت وردپرس دلبازتر و راحت تره 😉 ).بنابراین چه خوب است که ما گزینه های اضافی را که ممکن است هیچ گاه مورد استفاده قرار نگیرند را حذف کنیم.اینطوری فضای بازتری ایجاد می شود و زحمات ما هم بیشتر نمایان می شود 😉 با استفاده از تابع زیر شما می توانید ،بسیاری از گزینه های مدیریت را حذف کنید.می توانید ترکیب اعداد را نیز تغییر دهید تا ببینید دقیقا کدام ها مخفی می شوند !
<?php function remove_dashboard_widgets() { global $menu,$submenu; global $current_user; get_currentuserinfo(); if ($current_user->ID != 1) { // only admin sees the whole thing // $menu and $submenu will return fo all menu and submenu list in admin panel . $menu[2] = ""; //Dashboard $menu[5] = ""; // Posts $menu[15] = ""; //Links $menu[25] = ""; //Comments $menu[65] = ""; //Plugins unset($submenu['themes.php'][5]); //themes unset($submenu['themes.php'][12]); //editor } } add_action('admin_head', 'remove_dashboard_widgets'); ?>
بروزشده : برای راحتی کار می توانید از پلاگین Role Manager هم استفاده کنید.از حامد عزیز برای معرفی این افزونه ممنونیم.
انتقال به یک صفحه متفاوت به جای داشبورد
اگر شما داشبورد را مخفی کنید ،هنگام مراجعه کاربران ،بهتر است به جای خطای عدم وجود صفحه ،آن را به یک صفحه دیگر راهنمایی کنیم.بنابراین وقتی به wp-admin مراجعه می کنند، ما با کد زیر آنها را به یک صفحه دیگر می بریم :
<?php if ( is_admin() ) { $url = $_SERVER['SCRIPT_NAME']; $url = explode('/', $url); $tam = count($url); if ( $url [ ( $tam - 1 ) ] == "index.php" ) { $url = 'Location: ' . get_bloginfo('url') . "/wp-admin/edit.php?post_type=page"; header( $url ); } } ?>
امیدوارم این کدها به دردتون بخوره ،موفق باشید 🙂
ممنون خیلی کاربرذی و مفید بود
سلام قالب من بالاش نوار ابزار نداره میشه کد فعاد سازیش رو هم بزارید.؟
آخه وقتی با یه گذینه میشه نوار ابزار رو برداشت چه کاریه که به زور کد انجام بدیم؟؟؟؟
ممنون
عالی بود
سلام
ممنون از مطالب خوبتون. یه سوال داشتم:
تو این بخش “انتقال به یک صفحه متفاوت به جای داشبورد” شما یه کد دادید. این کد باید تو Functions.php قرار بگیره؟
سلام
متشکرم ، معمولا در اون فایل قرار می دیم کدها رو
ممنون , گذاشتم تو Functions کار کرد خیلی خوب بود , فقط خود ادمین هم دیگه نمی تونه تو پیشخوان بره؟!
دمت گرم
سلام دوست عزیز
میخواستم بدونم تنظمیماتی که در رابطه با ایمیل و تغییر در آدرس های ایمیل گذاشتید رو در کدوم فایل باید انجام بدیم.
ممنون از مطالب مفیدتون
سلام
در فایل functions.php در پوشه قالب . اگر نبود می توانید یکی با همین نام ایجاد کنید
کار ساز نیست علی جان.
همین که تو فکری ممنون. ولی فکر نمیکنم با پلاگین درست بشه. باشد توی فایلهای خود وردپرس دستکاری بشه 🙁
بازم اگر نظری داری خوشحال میشم بگی
سلام
کد پایین رو بزار توی فایل functions.php داخل پوشه قالب سایت.اگه نبود ،ایجاد کنید:
<code>function remove_menus () {
global $menu;
global $current_user;
get_currentuserinfo();
if ($current_user->ID = 16) {
$restricted = array(__('Dashboard'), __('Posts'), __('Media'), __('Links'), __('Pages'), __('Appearance'), __('Tools'), __('Users'), __('Settings'), __('Plugins'));
end ($menu);
while (prev($menu)){
$value = explode(' ',$menu[key($menu)][0]);
if(in_array($value[0] != NULL?$value[0]:"" , $restricted)){unset($menu[key($menu)]);}
}
}}
add_action('admin_menu', 'remove_menus');</code>
امیدوارم کار کنه.این منوها رو برای کاربر شماره ۱۶ مخفی می کنه.
سلام علی جان
واقعا" ممنون از اینکه پیگیری میکنی
این کده هم خوب بود این مشکلات رو داشت:
وقتی از admin خارج میشی و میری به یورز شماره ۱۶ دوباره که به ادمین وارد میشی همه گزینه ها غیرفعال هست و مثل یوزر شماره ۱۶ میشه
یعنی هیچ جوری نمیشه؟ خیلی بده که 🙁 نمی دونید باید چیکار کنم؟
ببینید اگر مثلا" روی ویرایشگر باشه طرف میتونه پستها رو هم ویرایش کنه و یا حذف کنه. پس یک جوری باشه اگر چیزی هم برای نمایش داده میشه نتونه پستها رو ویرایش و یا حذف کنه فقط حق مدیریت نظرات رو داشته باشه.
ممنون
سلام
ما خودمون از این پلاگین استفاده می کنیم و مشکلی نداریم .نمی دونم شما هم تست کردید یا نه؟
http://www.shinephp.com/user-role-editor-wordpres…
ممنون علی جان
بازم درست نشد با افزونه مورد نظر.
ببینید چیزی ازلینک زیر متوجه میشن:
http://www.shinephp.com/how-to-change-wordpress-u…
ممنون
ممنون علی جان
من همه ی این افزونه ها رو تست کردم ولی متاسفانه توی همشون مدیریت پست ها هم برای طرف فعال میشه و اگر مدیرت پست ها رو غیر فعال کنی مدیریت نظرات هم غیرفعال میشه.
من می خوام یکاری کنم که فقط مدیریت نظرات برای کاربر مورد نظر فعال باشه و قابل دیدن باشه
سلام
لطفا اینجا رو هم نگاه کن.فکر کنم همون چیزیست که می خواین
<code> ;http://plusme.ir/ag4D</code>
با عرض پوزش من زیاد از اینا چیزی متوجه نمیشم 🙁
میشه بیشتر کمک کنید دقیقا" باید چیکار کنم؟
شرمنده واقعا"
سلام
راحت ترین راه حلی که پیدا کردم css است.به آدرس wp-admin/css/wp-admin.css رفته و کدهای زیر رو در انتهای فایل اضافه کنید:
<code>
#adminmenu li{display:none}
#adminmenu li#menu-comments{display:block}
</code>
امیدوارم اون چیزی باشه که می خواستید.شرمنده ،قرصت نداشتم راه حل بهتری پیدا کنم.
موفقیت
سلام
واقعا" ممنون علی جان که پیگیری میکنی.
جواب داد ولی چندتا مشکل هست.
۱- با این ادمین سایت هم فقط براش نظرات نمایش داده میشه.
۲- کاربر "ویرایشگر" که دسترسی به مدیریت نظرات رو داره فقط نظرات رو میبینه و امکان تایید و ویرایش و جواب دادن به نظرات رو نداره.
واقعا" ممنون میشم اگر یک راه حل خوبی پیدا کنی چون واقعا" همه جا زدم جواب درستی براش پیدا نکردم.
ببین میخوام اینجوری باشه که مثلا" هر کس رو که با سطح کاربری "ویرایشگر" تعییم میکنیم فقط قسمت نظرات براش نمایش داده بشه و مدیریت نظرات. همین فایل مربوط به ویرایشگر کجاست 🙂
ما منتظر جواب هستیم علی آقا 🙂
سلام
شرمنده ، فراموش کرده بودم که شما یادم انداختید.اجازه بدید جستجو کنم پیدا کردم ، تماس می گیرم.
موفقیت
سلام دوست عزیز
شرمندم ، انقدر سرم شلوغه که نمی تونم زود جواب بدم ،می بخشید.لطفا علی الحساب پلاگین زیر رو هم تست کنید:
http://www.im-web-gefunden.de/wordpress-plugins/i…
ممنون علی جان
گفتم . کلا" این افزونه رو خیلی وقت پیش تست کردم و چندتا دیگه مثل اینو. .ولی به چیزی که می خوان نرسیدم و توی همشون مشکل داره
من فقط می خوام قسمت مدیریت نظرات برای ان کاربر فایل نمایش باشه
در ضمن از پلاگین مورد نظر هم استفاده کردن ولی چیزی رو که من میخام رو نمی تونه اجرا کنه. یعنی از چندین پلاگین برای این موضوع استفاده کردم ولی جواب نداده
علی جان نمیدونم چرا این پلاگین رو تو خود سایت وردپرس برای دانلود نگذاشته.
آخرین ورژنش رو میتونید از sourceforage دانلود کنید:
http://sourceforge.net/projects/role-manager/
من برای یکی از مشتریام استفاده کردم.چیز خوبیه.
موفق باشی
سلام
ممنون حامد جان بابت معرفی به جات ، به مطلب اضافه شد 🙂
موفقیت
سلام علی جان
من برای حذف قسمتهای مختلف مدیریت افزونه rollmanager رو پیشنهاد میکنم.
خیلی راحت میتونی دسترسی را بصورت جزیی و یا کلی محدود کنی.
مطلب خیلی مفیدی بود..ممنون
سلام حامد جان
ممنون بابت معرفی این پلاگین.اگه لطف کنی و لینکش رو بدی به مطلب اضافه اش می کنم
موفقیت 🙂
ممنون از شما بسیار عالی بود
استفاده کردیم
سلام دوست من
متشکرم ، خوشحالم که مفید بوده 🙂
موفقیت
سلام
ممنون از مطلب مفیدتون
یک سوال در مورد "مخفی کردن منوهای مدیریت وردپرس"
آیا میشه این موضوع رو برای سطح دسترسی ها تعریف کرد؟ مثلا" برای نویسنده فقط . برای ادمین همه چیز قابل نمایش باشد ولی برای نویسنده برخی رو غیرفعال کرد؟
سلام دوست من
خوب الان هم همینطوریه دیگه ، گفته اگر شماره کاربر ۱ بود(یعنی ادمین اصلی) تمام منوها وگرنه گزینشی نمایش بده.ولی برای سطح دسترسی ها می تونید از هک پنجم که کد
<code>$current_user->user_level</code>
اومده ،کمک بگیرید.
موفقیت 🙂
سلام
ممنون از شما.
ببینید من الان یک کاربر دارم با آی دی ۱۶ و سطح دسترسی "ویرایشگر"
حالا فقط می خوام ایشون داشبورد براشون فعال باشه و فقط قسمت نظرات.
الان دقیقا" چه کدی رو باید تو فانکشن برای این موضوع بزارم؟
سلام
یکی از دوستان افزونه ای رو برای همین کار معرفی کردن در این آدرس : http://sourceforge.net/projects/role-manager
لطفا این رو تست کنید اگه جواب نگرفتید ،راه حل دیگه ای عرض می کنم
موفقیت 🙂