چگونه وردپرس را از خرابکاری سهولی میزبان خود حفظ نماییم
wordpress-bg

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

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

غیر فعال کردن پلاگین ها و ویرایشگر تم لینک

هیچ دلیلی وجود ندارد که چرا هر کسی باید زندگی می کنند ویرایش تم های سفارشی خود را و یا فایل های پلاگین از طریق داشبورد وردپرس وجود دارد. حرفه ای که راه کار نمی کند، و مشنگ معمولا متوجه نمی چقدر آسان است برای شکستن یک سایت با پرش از نقطه ویرگول است. این نیز یک امنیتی هکرها آسیب پذیری می تواند بهره برداری. خوشبختانه، دوستان ما در WordPress.org ساخته شده آن را واقعا آسان برای غیر فعال کردن این ویژگی. نگران نباشید، کد زیر را اضافه کنید به فایل wp-config.php فایل.

define( 'DISALLOW_FILE_EDIT', true );

علاوه بر ویرایشگر تم، این نیز خواهد شد ویرایشگر افزونه را غیر فعال کنید. من این یکی از ویژگی های یک اشکال نیست در نظر بگیرند.

ویرایشگر افزونه های وردپرس
ویرایشگر افزونه های وردپرس. ( مشاهده نسخه بزرگ )

محدود کردن ویژوال و ویرایشگر متن لینک

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

صفحه تایپوگرافی زشت
صفحه تایپوگرافی زشت است. ( مشاهده نسخه بزرگ )

غیر فعال کردن ویرایشگر بصری LINK

اضافه کردن کد زیر به تم خود را در فایل functions.php فایل و زبانه به ضامن ویرایشگر WYSIWYG ناپدید خواهد شد.

function emersonthis_disable_visual_editor(){
    # add logic here if you want to permit it selectively
    return false;
}
add_filter('user_can_richedit' , 'emersonthis_disable_visual_editor', 50);

این یک شروع خوب است، اما شما متوجه خواهید شد که دکمه ضخیم و مورب هنوز هم در حال حاضر در ویرایشگر متنی ساده می باشد. در تجربه من، مشتریان سوء استفاده از این دکمه ها بسیار کمتر اغلب زمانی که ارضاء فوری از ویرایشگر WYSIWYG رفته است. اما من هنوز هم ترجیح می دهند به آنها را حذف کنید اگر آنها لازم نیست.

تب ویرایشگر بصری
تب ویرایشگر بصری. ( مشاهده نسخه بزرگ )

از بین بردن ضخیم و مورب QUICKTAGS از متن EDITOR LINK

ویرایشگر متن است quicktag دکمه که قرار دادن متن با انتخاب <strong>و <em>برچسب ها. کد زیر را اضافه در موضوع خود را در فایل functions.php فایل و نویسندگان دیگر نمی خواهد که دکمه های برجسته و یا کج (ایتالیک).

# Removes bold and italic quicktags from text editor
function emersothis_quicktags_settings( $qtInit  ) {
    //To disable ALL butons it must be set to "," (not "")
    $qtInit['buttons'] = 'more,';
    return $qtInit;
}
add_filter('quicktags_settings', 'emersonthis_quicktags_settings');

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

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

غیر فعال کردن دکمه در ویرایشگر بصری LINK

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

از API وردپرس برای اصلاح TinyMCE به ویرایشگر کمی مشکل است زیرا شما نیاز به نگاه کردن اسم رمز برای اشاره به هر یک از دکمه می خواهید به حذف. شما دریافت می کنید بیشتر بنگ برای جفتک انداختن خود را با از بین بردن “سینک آشپزخانه” را فشار دهید که پستی کل ردیف دوم که شامل دکمه های قالب بندی مشکل ساز است. اضافه کردن کد زیر به تم خود را در فایل functions.php فایل انجام این کار.

# Remove visual editor buttons
function emersonthis_tinymce_buttons($buttons)
{
    # Remove the text color selector
    $remove = array('wp_adv'); //Add other button names to this array
    # Find the array key and then unset
    return array_diff($buttons,$remove);
}
add_filter(
    'mce_buttons',
    'emersonthis_tinymce_buttons'
);

یک ترفند به بدانند نام کد از دکمه شما می خواهید به حذف است و با بررسی نشانه گذاری به فرم. در زمان نوشتن این مقاله، هر دکمه دارای یک نام کلاس است که با شروع mce-i-به دنبال نام کد شما را در آرایه بالا قرار داده است.

حذف “اضافه کردن رسانه ها” را فشار دهید لینک

“اضافه کردن رسانه” را فشار دهید به نظر می رسد به طور پیش فرض هر زمان که یک نوع پست سفارشی پشتیبانی از ویژگی ویرایشگر. اما نوع پست سفارشی می تواند برای طیف گسترده ای از چیزهایی استفاده می شود، و اغلب آن نامناسب است که درست که شامل تصاویر.

وبلاگ پست پر از تصاویر زشت
وبلاگ پست پر از تصاویر زشت است. ( مشاهده نسخه بزرگ )

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

آگهی تک کاره و عکس های جاسازی شده با استفاده از “اضافه کردن رسانه” را فشار دهید در ویرایشگر سخت به کنترل هستند و آنها تمایل به نگاه بی دست و پا بسته به جایی که نویسنده درج تصویر در رابطه با متن اطراف دارند. آنها همچنین سردرگمی برای بسیاری از نویسندگان می شود، چرا که در یک نگاه “اضافه کردن رسانه” را فشار دهید به راحتی با “تصویر برجسته” دکمه آپلود که بیشتر پایین صفحه (به طور پیش فرض) به نظر می رسد اشتباه است، و ممکن است بسیار متفاوت با موضوع استفاده می شود. من تقریبا همیشه آن را حذف، با اضافه کردن کد زیر به موضوع فایل functions.php فایل.

# Remove media buttons
function emersonthis_remove_add_media(){
    # do this conditionally if you want to be more selective
    remove_action( 'media_buttons', 'media_buttons' );
}
add_action('admin_head', 'emersonthis_remove_add_media');

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

غیر فعال کردن تم Customizer گزینه لینک

اگر شما به کار بر روی یک تم کودک، موضوع پدر و مادر ممکن است گزینه های سفارشی سازی است که برای کودک نامناسب هستند را ارائه دهد. گزینه های سفارشی سازی ممکن است استفاده نشده در موضوع کودک خود، و یا دارای پتانسیل برای شکستن همه چیز. در هر صورت، وردپرس تم customizer API را آسان می کند از شر آنها خلاص با اضافه کردن کد زیر به تم خود را در فایل functions.php فایل.

# Remove customizer options.
function emersonthis_remove_customizer_options( $wp_customize ) {
    // $wp_customize->remove_section( 'static_front_page' );
    // $wp_customize->remove_section( 'title_tagline' );
    $wp_customize->remove_section( 'colors' );
    $wp_customize->remove_section( 'header_image' );
    $wp_customize->remove_section( 'background_image' );
    // $wp_customize->remove_section( 'nav' );
    // $wp_customize->remove_section( 'themes' );
    // $wp_customize->remove_section( 'featured_content' );
    // $wp_customize->remove_panel( 'widgets' );
}
add_action( 'customize_register',
            'emersonthis_remove_customizer_options',
            ۳۰);

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

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

هر سایت دارای همان نوع از محتوا؛ برخی از سایت های هیچ وبلاگ، برای مثال. اگر ما همان منطق تقاضای خود را به داشبورد وردپرس است که ما به هر رابط کاربر دیگر اعمال می شود، آن را گیج کننده و غیر ضروری برای نشان دادن دکمه که کاری انجام نشده است. در این مثال، پست آیتم منو می شود غیر ضروری، پس بیایید آن را حذف با اضافه کردن کد زیر به در فایل functions.php :

function emersonthis_custom_menu_page_removing() {
  // remove_menu_page( 'index.php' );                  //Dashboard
  // remove_menu_page( 'jetpack' );                    //Jetpack* 
  remove_menu_page( 'edit.php' );                   //Posts
  remove_menu_page( 'upload.php' );                 //Media
  // remove_menu_page( 'edit.php?post_type=page' );    //Pages
  remove_menu_page( 'edit-comments.php' );          //Comments
  // remove_menu_page( 'themes.php' );                 //Appearance
  // remove_menu_page( 'plugins.php' );                //Plugins
  // remove_menu_page( 'users.php' );                  //Users
  // remove_menu_page( 'tools.php' );                  //Tools
  // remove_menu_page( 'options-general.php' );        //Settings
}
add_action( 'admin_menu', 'emersonthis_custom_menu_page_removing' );

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

منوی پست به نظر می رسد به طور پیش فرض یا نه سایت دارای یک وبلاگ
آیتم های منو پست به نظر می رسد به طور پیش فرض یا نه سایت دارای یک وبلاگ است. ( مشاهده نسخه بزرگ )
06-پست-منو پنهان پیش نمایش-OPT
داشبورد وردپرس بدون پست آیتم های منو. ( مشاهده نسخه بزرگ )

این مهم است که به درک که از بین بردن این آیتم های منو نمی کند در واقع مجوز کاربر را لغو نمی شود. کاربر هنوز هم می تواند از آیتم های منو مخفی دسترسی داشته باشید به طور مستقیم با استفاده از URL. اگر هدف این است که داشبورد کمتر توسط کنترل های مخفی اضافی هم ریخته، پس از آن این است که احتمالا خوب است. اگر هدف این است که در واقع جلوگیری از از دسترسی به کسانی که کنترل یک کاربر، پس از آن شما نیاز به تغییر قابلیت های نقش کاربر . برای انجام این کار، اضافه کردن یک قطعه مانند زیر را به قلاب فعال شدن یک پلاگین (آن تنها نیاز به یک بار اجرا):

global $wp_roles; // global class
$role = 'author';
$cap = 'delete_published_posts';
$wp_roles->remove_cap( $role, $cap );

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

اضافه کردن یک اشاره در مورد چگونه فواصل خط کار را در ویرایشگر لینک

به طور پیش فرض ویرایشگر بصری (TinyMCE به) یک پاراگراف جدید که پرس نویسنده ایجاد Return. اگر شما فقط می خواهید یک خط قدیمی از مد افتاده (بازگشت نام مستعار حمل) شما نیاز به فشار Shift+Return. این بسیار خوب و قدرتمند اما برای بسیاری از نویسندگان بصری است. من شروع به اضافه کردن یک یادآوری سریع برای جلوگیری از شکایت اجتناب ناپذیر در مورد “یک دسته از فضای سفید عجیب و غریب” نشان دادن در یک پست یا صفحه.

پست وبلاگ را با زشت فضای اضافی سفید
پست وبلاگ را با زشت فضای اضافی سفید. ( مشاهده نسخه بزرگ )

اضافه کردن کد زیر به شما فایل functions.php فایل. تغییر ارزش $tipبه هر آنچه می خواهید به یاد نویسندگان خود را از.

# Adds instruction text after the post title input
function emersonthis_edit_form_after_title() {
    $tip = '<strong>TIP:</strong> To create a single line break use SHIFT+RETURN. By default, RETURN creates a new paragraph.';
    echo '<p style="margin-bottom:0;">'.$tip.'</p>';
}
add_action(
    'edit_form_after_title',
    'emersonthis_edit_form_after_title'
);

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

صفحه پست با نوک فضای خالی اضافه
صفحه پست با نوک فضای سفید اضافه شده است. ( مشاهده نسخه بزرگ )

هنوز دول نه از مدیر حساب لینک

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

لیست کاربران پر از مدیران
لیست کاربران پر از مدیران. ( مشاهده نسخه بزرگ )

روش دیگر، به مشتری هر دو مجموعه از اعتبار و آنها را ذخیره اعتبار مدیریت در جایی امن و تنها استفاده از آن برای انجام وظایف مدیریت. بسیاری از مشتریان به سرعت اعتبار مدیریت را از دست بدهند اما خوب است: رمز عبور همیشه می توانید بازنشانی می شود، و این اغلب از مشتریان که شما دوباره استخدام به انجام تعمیر و نگهداری روزمره سایت برای آنها به هر حال.

مهم ترین دلیل برای ناشی از خست با حساب های مدیریت بودن این است که آنها یک آسیب پذیری امنیتی هستند. یک اثر جانبی دلپذیر است که کاربران وردپرس مبتدی اغلب زمانی که آنها ورود به عنوان نویسندگان و سردبیران زیرا منوها کمتری برای مرتب سازی از طریق در حالی که یادگیری مهارت های اولیه مانند اضافه کردن و یا پست ویرایش وجود دارد پیدا کنید UI داشبورد کمتر خسته کننده باشد.

استفاده از مو پلاگین لینک

MU-پلاگین ها / دایرکتوری است برای مدت طولانی وجود داشته است، اما بسیاری از هکرها وردپرس دیدار من با هرگز از آن شنیده می شود. به “مو” مخفف استفاده می کنید باید . دایرکتوری محل جایگزین که در آن پلاگین را می توان نصب است.

باید رابط پلاگین در داشبورد وردپرس استفاده
باید رابط پلاگین در داشبورد وردپرس استفاده کنید. ( مشاهده نسخه بزرگ )

تفاوت این است که “باید با استفاده از” پلاگین به طور خودکار فعال هستند و نمی توان به طور تصادفی در سراسر داشبورد غیر فعال است. آنها همچنین لود قبل از پلاگین های دیگر است. این است ایده آل برای پلاگین که باید وجود داشته باشد برای این سایت را به درستی اجرا است. این یک جایگزین عالی برای هک غیر نمایشی که به طور معمول ممکن است به موضوع دلخواه خود است این ماجرا نیز فایل functions.php فایل. به عنوان مثال، من می خواهم به تعریف انواع پست سفارشی در یک MU-پلاگین، چرا که محتوا باید باقی بماند یا نه یک موضوع خاص فعال است.

MU-پلاگین ها / دایرکتوری در خارج از جعبه وجود ندارد. شما آن را ایجاد دستی در داخل پوشه wp-content / .

wp-content/
    mu-plugins/
    plugins/
    themes/
    ...

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

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

آخر توجه داشته باشید لینک

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

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


WordPress is a wonderfully powerful CMS that ships with many versatile features giving it the flexibility to work out of the box for a wide range of users. However, if you are a professional building custom themes and plugins, sometimes these features can be problematic. The same features and options that allow off-the-shelf themes to adapt to many different use cases can sometimes also be used to undermine a carefully designed custom theme built for a specific use case.

The following article comprises a collection of code snippets that I use again and again on almost every WordPress project. What they all have in common is that they limit functionality that is either unnecessary, confusing, or unsafe. Everything that follows can be used on any site, but these tips are especially applicable for professionals making custom themes and plugins for clients. The notable distinction is that custom themes can be built to serve a specific purpose. So the blanks for the authors’ content can and should also be much narrower. A well-designed WordPress theme should make as many design decisions as possible so the author doesn’t have to.

Disable The Plugins And Theme Editor Link

There is no good reason why anyone should be live-editing your custom theme or plugin files via the WordPress dashboard. Professionals don’t work that way, and muggles typically don’t realize just how easy it is to break a site by skipping a single semicolon. It is also a security vulnerability hackers can exploit. Fortunately, our friends at WordPress.org made it really easy to disable this feature. Simply add the following snippet to the wp-config.php file.

define( 'DISALLOW_FILE_EDIT', true );

In addition to the theme editor, this will also disable the plugin editor. I consider this a feature not a bug.

Wordpress plugins editor
WordPress plugins editor. (View large version)

Limit The Visual And Text Editor Link

By default, the WordPress WYSIWYG editor supports far too many formatting options for a well-designed custom theme. Letting clients override text colors or font sizes is a fast way to make even the most chic site look cheap and ugly. If blog post text is designed to always be left-aligned, why give the author a button to right-align it? Do you think it will look good if the text on the About page is purple, bold, and italicized? Then don’t arm your client with the means to do it. In most situations I recommend disabling the visual editor entirely.

Ugly typography page
Ugly typography page. (View large version)

DISABLING THE VISUAL EDITOR LINK

Add the following snippet to your theme’s functions.php file and the tab to toggle the WYSIWYG editor will disappear.

function emersonthis_disable_visual_editor(){
    # add logic here if you want to permit it selectively
    return false;
}
add_filter('user_can_richedit' , 'emersonthis_disable_visual_editor', 50);

This is a good start, but you’ll notice that the bold and italic buttons are still present on the plain text editor. In my experience, clients abuse these buttons much less often when the instant gratification of the WYSIWYG editor is gone. But I still prefer to remove them if they are not necessary.

The visual editor tab
The visual editor tab. (View large version)

REMOVING BOLD AND ITALIC QUICKTAGS FROM THE TEXT EDITOR LINK

The text editor has quicktag buttons that will wrap selected text with <strong>and <em> tags. Add the following code in your theme’s functions.php file and authors will no longer have bold or italics buttons.

# Removes bold and italic quicktags from text editor
function emersothis_quicktags_settings( $qtInit  ) {
    //To disable ALL butons it must be set to "," (not "")
    $qtInit['buttons'] = 'more,';
    return $qtInit;
}
add_filter('quicktags_settings', 'emersonthis_quicktags_settings');

This removes the possibility that your client will decide to, say, italicize an entire article. But this does not remove the ability to write markup into the text editor by hand. Every now and then that can come in handy when you’re in a pinch.

If you are in a rare situation where the user should be formatting text themselves, you can leave the visual editor enabled but disable specific buttons individually.

DISABLING BUTTONS ON THE VISUAL EDITOR LINK

One of the few times I leave the visual editor enabled is when authors are writing long posts or pages that have internal structure of their own. For example, an author of a 10-page article might need the ability to add subheadings. In these situations I set up custom classes for the subsections and then disable all the other formatting buttons that are not needed.

The WordPress API for modifying the TinyMCE editor is a bit tricky because you need to look up the code names used to refer to each button you want to remove. You get the most bang for your buck by removing the “kitchen sink” button which toggles the entire second row that contains the most problematic formatting buttons. Adding the following code to your theme’sfunctions.php file will do this.

# Remove visual editor buttons
function emersonthis_tinymce_buttons($buttons)
{
    # Remove the text color selector
    $remove = array('wp_adv'); //Add other button names to this array
    # Find the array key and then unset
    return array_diff($buttons,$remove);
}
add_filter(
    'mce_buttons',
    'emersonthis_tinymce_buttons'
);

One trick to figuring out the code name of the button you want to remove is by inspecting the markup of the form. At the time of writing, each button has a class name that begins with mce-i- followed by the code name you would put in the array above.

Remove The “Add Media” Button Link

The “Add media” button appears by default whenever a custom post type supports the editor feature. But custom post types can be used for a wide range of things, and often it is inappropriate for that field to include images.

Blog post filled with ugly images
Blog post filled with ugly images. (View large version)

Most of the time, when I expect the author to publish an image to accompany text, I use post thumbnails (aka featured images). This makes it easy to integrate the images into theme templates, and it also gives the developer more control over the size and specifications for the images.

Ad hoc photos embedded using the “Add media” button in the editor are hard to control and they have a tendency to look awkward depending on where the author inserts the image in relation to the surrounding text. They also cause confusion for many authors, because at a glance the “Add media” button is easily confused with the “Featured image” upload button that appears further down the page (by default), and may be used very differently by the theme. I almost always remove it, by adding the following code to the theme’sfunctions.php file.

# Remove media buttons
function emersonthis_remove_add_media(){
    # do this conditionally if you want to be more selective
    remove_action( 'media_buttons', 'media_buttons' );
}
add_action('admin_head', 'emersonthis_remove_add_media');

You can add logic before the remove_action() to remove only the media button conditionally for certain post types. For example, you might want to let authors add images to pages, but not blog posts which instead use thumbnails.

Disable Theme Customizer Options Link

If you are working on a child theme, the parent theme may offer customization options that are inappropriate for the child. The customization options may be unused in your child theme, or have the potential to break things. Either way, the WordPress theme customizer API makes it easy to get rid of them by adding the following snippet to your theme’s functions.php file.

# Remove customizer options.
function emersonthis_remove_customizer_options( $wp_customize ) {
    // $wp_customize->remove_section( 'static_front_page' );
    // $wp_customize->remove_section( 'title_tagline' );
    $wp_customize->remove_section( 'colors' );
    $wp_customize->remove_section( 'header_image' );
    $wp_customize->remove_section( 'background_image' );
    // $wp_customize->remove_section( 'nav' );
    // $wp_customize->remove_section( 'themes' );
    // $wp_customize->remove_section( 'featured_content' );
    // $wp_customize->remove_panel( 'widgets' );
}
add_action( 'customize_register',
            'emersonthis_remove_customizer_options',
            ۳۰);

Each line in the snippet above corresponds to an individual theme customization option that you can disable by uncommenting it.

Hide Unused Dashboard Menu Items Link

Not every site has the same types of content; some sites have no blog, for example. If we apply the same logic to the WordPress dashboard that we apply to any other user interface, it is confusing and unnecessary to show buttons that do not do anything. In this example, the Posts menu item would be unnecessary, so let’s remove it by adding the following snippet tofunctions.php:

function emersonthis_custom_menu_page_removing() {
  // remove_menu_page( 'index.php' );                  //Dashboard
  // remove_menu_page( 'jetpack' );                    //Jetpack* 
  remove_menu_page( 'edit.php' );                   //Posts
  remove_menu_page( 'upload.php' );                 //Media
  // remove_menu_page( 'edit.php?post_type=page' );    //Pages
  remove_menu_page( 'edit-comments.php' );          //Comments
  // remove_menu_page( 'themes.php' );                 //Appearance
  // remove_menu_page( 'plugins.php' );                //Plugins
  // remove_menu_page( 'users.php' );                  //Users
  // remove_menu_page( 'tools.php' );                  //Tools
  // remove_menu_page( 'options-general.php' );        //Settings
}
add_action( 'admin_menu', 'emersonthis_custom_menu_page_removing' );

Each line corresponds to a specific menu in the dashboard. The file names do not always match the name that appears in the dashboard menu, so the commented lines are left in as a quick reference.

The Posts menu appears by default whether or not the site has a blog
The Posts menu item appears by default whether or not the site has a blog. (View large version)
06-posts-menu-hidden-preview-opt
The WordPress dashboard without the Posts menu item. (View large version)

It is important to understand that removing these menu items does not actually revoke the user’s permissions. A user could still access the hidden menu item directly using the URL. If the goal is to make the dashboard less cluttered by hiding superfluous controls, then this is probably fine. If the goal is to actually prevent a user from accessing those controls, then you will need to modify the capabilities of the user’s role. To accomplish this, add a snippet like the following to the activation hook of a plugin (it only needs to run once):

global $wp_roles; // global class
$role = 'author';
$cap = 'delete_published_posts';
$wp_roles->remove_cap( $role, $cap );

Use this comprehensive table of all capabilities to find the specific capabilities you can add or remove for each of the default roles.

Add A Hint About How Line Breaks Work In The Editor Link

By default the visual editor (TinyMCE) will create a new paragraph when the author presses Return. If you just want an old fashioned line break (aka carriage return) you need to press Shift+Return. This is nifty and powerful but not intuitive for many authors. I’ve started adding a quick reminder to avoid the inevitable complaint about “a bunch of weird white space” showing up in a post or page.

Blog post with ugly extra white space
Blog post with ugly extra white space. (View large version)

Add the following snippet to your functions.php file. Change the value of $tipto say whatever you want to remind your authors of.

# Adds instruction text after the post title input
function emersonthis_edit_form_after_title() {
    $tip = '<strong>TIP:</strong> To create a single line break use SHIFT+RETURN. By default, RETURN creates a new paragraph.';
    echo '<p style="margin-bottom:0;">'.$tip.'</p>';
}
add_action(
    'edit_form_after_title',
    'emersonthis_edit_form_after_title'
);

This technique could be used to inject a reminder about anything you want authors to remember when adding or editing content.

Posts page with whitespace tip added
Posts page with white space tip added. (View large version)

Do Not Dole Out Administrator Accounts Link

The WordPress administrator role is very powerful and with great power comes great responsibility. Some clients are experienced WordPress power users who administer their site competently. Many of them are not. The latter should not be poking around as administrators. Instead, make them an editor and create a separate admin account with a super strong password. If you have an ongoing affiliation with the client you can hang on to those credentials until the client is ready to administer the site themselves.

Users list full of admins
Users list full of admins. (View large version)

Alternatively, give the client both sets of credentials and have them store the admin credentials somewhere safe and only use it to perform admin tasks. Many clients will promptly lose the admin credentials but that is fine: the password can always be reset, and these are often the types of clients who will rehire you to do the routine site maintenance for them anyway.

The most important reason for being stingy with admin accounts is that they are a security vulnerability. A pleasant side effect is that beginner WordPress users often find the dashboard UI less overwhelming when they log in as authors or editors because there are fewer menus to sort through while learning basic skills such as adding or editing posts.

Use mu-Plugins Link

The mu-plugins/ directory has existed for a long time, but most WordPress hackers I meet have never heard of it. The “mu” stands for must use. The directory is an alternative location where plugins can be installed.

Must use plugins interface in WordPress dashboard
Must use plugins interface in WordPress dashboard. (View large version)

The difference is that “must use” plugins are automatically active and cannot be disabled by accident throughout the dashboard. They are also loadedbefore the other plugins. This is ideal for plugins that must be present for the site to run properly. It’s also a great alternative for non-presentational hacks that might normally get jammed into your custom theme’s functions.php file. For example, I like to define custom post types in a mu-plugin, because that content should persist whether or not a particular theme is active.

The mu-plugins/ directory does not exist out of the box. You create it manually inside wp-content/.

wp-content/
    mu-plugins/
    plugins/
    themes/
    ...

The biggest limitation is that WordPress only looks for files in the top level ofmu-plugins/ and will ignore code inside a subdirectory. However, you can work around this by creating a single PHP file at the top of mu-plugins/ that loads code from a sibling subdirectory. Also keep in mind that update notifications do not apply to mu-plugins. I think of mu-plugins/ as the place to put important code that the client should never have to think about.

Read more about must use plugins in the Codex. If you want to require other plugins by preventing the ability to deactivate them, you might find the WDS-Required-Plugins library useful.

Final Note Link

You may find it counterintuitive to disable functionality that WordPress gives you for free. But remember that your client is not paying you to give them a lot of buttons. Your job is to make an effective, robust website that is tailored to match the client’s goals. By disabling problematic or extraneous functionality you are actually delivering more value.

If you want more snippets, I have created a public GitHub repository of useful WordPress snippets which contains up-to-date versions of the hacks above, as well as others I add periodically. If you have your own handy snippets you want to share, pull requests are more than welcome!

تاکنون برای این مطلب 1 نظر ثبت گردیده است

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