کدهای هک وردپرس

9 هک وردپرس کاربردی در فایل functions.php بهمراه کدها

۹ هک وردپرس کاربردی در فایل functions.php بهمراه کدها

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

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

در این مطلب شما را با ۹ مورد از هک وردپرس در فایل functions.php برای توسعه سایت آشنا خواهیم شد.

استفاده از کدهای توابع functions.php بجای افزونه باعث کاهش استفاده از منابع سایت است.

هک وردپرس با کدهای توابع functions.php

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

استفاده از هوک ها در وبلاگ وردپرس

شما می توانید هوک ها را در فایل functions.php بنویسید، مگر در مواردی که شما در حال نوشتن یک پلاگین می باشید. این فایل در فهرست راهنمای wp-content/themes/yourtheme واقع شده است.

۹ هک وردپرس کاربردی در فایل functions.php بهمراه کدها

همانطور که شما انتظار دارید، یک هوک، یک تابع به دیگری هوک میکند. برای مثال، شما می توانید یک تابع سفارشی نوشته و آن را به یکی ازعملکردهای هسته ی وردپرس ضمیمه کنید:

add_action ( 'publish_post', 'myCustomFunction' );

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

remove_action ( 'publish_post', 'myCustomFunction' );

منابع هوک ها :

WordPress plugin API Codex page

Adam Brown’s hook database

Hooks from WpRecipes

۱- غیر فعال کردن Automatic Formatting وردپرس

مشکل: شما احتمالا متوجه شده اید که به طور پیش فرض، وردپرس نقل های عادی را به “curly” تبدیل می کند، و دیگر تغییرات قالب بندی(formatting) کوچک را هنگامی که یک پست نمایش داده می شود، ایجاد می کند.

این امر برای کسانی که محتوای عادی منتشر می کنند، خوشایند است، اما هر کسی که از وبلاگ خود برای بحث در مورد کد استفاده میکند اذیت خواهد شد زیرا زمانی که از یک ویرایشگر متن استفاده میکند، کدهایی با curly quotes خطاهای syntax میدهد.

راه حل: به سادگی کد زیر را در فایل functions.php خود پیست کنید:

function my_formatter($content) {<br />
$new_content = '';<br />
$pattern_full = '{(\[raw\].*?\[/raw\])}is';<br />
$pattern_contents = '{\[raw\](.*?)\[/raw\]}is';<br />
$pieces = preg_split($pattern_full, $content, -1, PREG_SPLIT_DELIM_CAPTURE);</p>
<p> foreach ($pieces as $piece) {<br />
if (preg_match($pattern_contents, $piece, $matches)) {<br />
$new_content .= $matches[1];<br />
} else {<br />
$new_content .= wptexturize(wpautop($piece));<br />
}<br />
}</p>
<p> return $new_content;<br />
}</p>
<p>remove_filter('the_content', 'wpautop');<br />
remove_filter('the_content', 'wptexturize');</p>
<p>add_filter('the_content', 'my_formatter', 99);

به محض این که این کار انجام شود، شما می توانید از کد کوتاه[RAW] در پست های خود استفاده کنید:

This text will not be automatically formatted.

توضیح کد: اولین قدم ما در اینجا این بود که تابعی ایجاد کنیم که از یک بیان منظم برای پیدا کردن کد کوتاه در محتوای پستهایتانف استفاده میکند.

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

۲- تشخیص مرورگر بازدید کنندگان با استفاده از یک هوک

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

در حال حاضر مرورگرهای شناسایی و چند متغیر جهانی برای استفاده ی ما در دسترس هستند.

راه حل: هیچ چیز سختی در اینجا وجود ندارد: فقط کد زیر را در فایل functions.php خود پیست کنید، سپس فایل را ذخیره کرده و کار تمام است!

<?php add_filter('body_class','browser_body_class');
function browser_body_class($classes)
{ global $is_lynx, $is_gecko, $is_IE, $is_opera, $is_NS4, $is_safari, $is_chrome, $is_iphone; if($is_lynx) $classes[] = 'lynx';
 elseif($is_gecko) $classes[] = 'gecko';
 elseif($is_opera) $classes[] = 'opera';
 elseif($is_NS4) $classes[] = 'ns4';
 elseif($is_safari) $classes[] = 'safari';
 elseif($is_chrome) $classes[] = 'chrome';
 elseif($is_IE) $classes[] = 'ie';
 else $classes[] = 'unknown'; 
if($is_iphone) $classes[] = 'iphone'; return $classes; } ?>

همانطور که در مثال زیر نشان داده شده است، هنگامی که شما فایل را ذخیره میکنید، تابع به صورت خودکار یک کلاسCSS بهbody tag اضافه میکند:

<body class="home blog logged-in safari">

توضیح کد: وردپرس دارای متغیر های جهانی است که اگر ویزیت کننده از جستجوگر خاصی استفاده میکند true را نشان میدهد، اگر مرورگر بازدید کننده گوگل کروم است، متغییر $is_chrome ، true را نشان خواهد داد.

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

۳- تعریف متن پیش فرض در ویرایشگر TinyMCE

مشکل: بسیاری از وبلاگ نویسان تقریبا همیشه صفحه بندی مشابهی را برای پست های وبلاگ خود استفاده کنید. پست ها در وبلاگ خود من WpRecipes.com همیشه به همان شیوه نمایش داده می شود، کمی متن، کمی کد و سپس دوباره کمی متن بیشتر.

چطور است با مجبور کردنTinyMCE (ویرایشگر دیداری وردپرس) به نمایش متون پیش فرض در وقت صرفه جویی کنیم؟

راه حل: یک بار دیگر، هوک ها راه حل هستند. فقط فایل functions.php را باز کنید، کدها را پیست کنید و اجازه دهید که هوک کار سحرآمیز خود را انجام دهد!

<?php add_filter('default_content', 'my_editor_content');
 function my_editor_content( $content ) 
{ $content = "If you like,subscribe to my rss feed.";
 return $content; } ?>

توضیح کد: این کد قدرتمند اما در عین حال روش بسیار ساده ایی است. فقط تابعی ایجاد کنید که متون مورد نظرتان را تشات میدهد (در این مثال، ما برخی متون ساده را تعریف کرده ایم که از reader ها می خواهد که در feed وبلاگ RSS مشارکت کنند) و تابع را به تابع ()default_content وردپرس هوک کنند. همین.

۴- قرار دادن محتوا به صورت خودکار بعد از هر پست

مشکل: اکثر وبلاگ ها با استفاده از قالب فایل single.php برای وارد کردن برخی متون، عکس ها و یا تبلیغات بعد از پست هایشان، استفاده می کنند. مطمئنا، این امر می تواند با باز کردن single.php و پیست کردن متن مورد نظر بعد از تابع ()the_content انجام شود. اما چرا متن در فید RSS ظاهر نخواهد شد؟ هوک ها و روش شرح داده شده در زیر راه حل این مشکل است.

راه حل: یکبار دیگر، به سادگی کد زیر را در فایل functions.php تم خود را وارد کنید . همین.

function insertFootNote($content) {<br />
if(!is_feed() && !is_home()) {<br />
$content.= "<br />
<div class='subscribe'>";<br />
$content.= "<br />
<h4>Enjoyed this article?</h4>
<p>";<br />
$content.= "
<p>Subscribe to our <a href='http://feeds2.feedburner.com/youcode'>RSS feed</a> and never miss a recipe!</p>
<p>";<br />
$content.= "</div>
<p>";<br />
}<br />
return $content;<br />
}<br />
add_filter ('the_content', 'insertFootNote');

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

 به شرط (!is_feed) در خط ۲ که از وارد شدن متن در RSS جلوگیری می کند، توجه داشته باشید. اگر شما می خواهید متن فید RSS تان ظاهر شود، خط ۲ با کد زیر جایگزین کنید:

if (!is_home()) {

۵- غیر فعال کردن پیام “Please Update Now” در داشبورد وردپرس

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

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

راه حل: فقط این چهار خط کد را در فایل functions.php خود پیست کنید.

if (!current_user_can('edit_users')) {<br />
add_action( 'init', create_function( '$a', "remove_action( 'init', 'wp_version_check' );" ), 2 );<br />
add_filter( 'pre_option_update_core', create_function( '$a', "return null;" ) );<br />
}

هنگامی که فایل functions.php را ذخیره کردید، دیگر این پیام بر روی داشبورد نخواهید دید.

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

۶- غیر فعال کردن وردپرس از ذخیره ی خودکار پست ها

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

راه حل: برای غیر فعال کردن قابلیت های خودکار ذخیره سازی در وردپرس،به سادگی فایل functions.php باز کنید و تابع زیر را در آن پیست کنید:

function disableAutoSave(){<br />
wp_deregister_script('autosave');<br />
}<br />
add_action( 'wp_print_scripts', 'disableAutoSave' );

توضیح کد: باز هم، هیچ چیز سختی در مورد این کد وجود ندارد، ما به سادگی یک حرکت (در خط ۴) ایجاد می کنیم و تابع ()disableAutoSave را که در خط ۱ ایجاد کردیم به ()wp_print_scripts وردپرس هوک می کنیم.

نتیجه این است که تابع ()disableAutoSave ما، هر زمان که وردپرس ()wp_print_scripts را اجرا کند، اجرا می شود.

مشکل: مطالب تکراری یک مشکل SEO برای بسیاری از وب سایت ها است. این امر می توانر می تواند برای وبلاگ وردپرس شما هم مشکل ساز باشد اگر از چند ترفند استفاده نکنید.

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

بیایید از ویژگی جدید rel=”canonical” برای جلوگیری از تکرار مطالب در صفحه ی نظرات استفاده کنیم.

راه حل: به سادگی کد زیر را در فایل function.php خود پیست کنید:

function canonical_for_comments() {<br />
global $cpage, $post;<br />
if ( $cpage > 1 ) :<br />
echo "\n";<br />
echo "<link rel='canonical' href='"; echo get_permalink( $post->ID );<br />
echo "' />\n";<br />
endif;<br />
}</p>
<p>add_action( 'wp_head', 'canonical_for_comments' );

توضیح کد: ابتدا، یک تابع برای اضافه کردن ویژگی rel=”canonical” به صفحه نظرات به جز صفحه ۱، ایجاد می کنیم. سپس با این تابع را به تابع ()wp_head وردپرس هوک میکنیم. به همین سادگی است!

۷- دریافت کل پست یا صفحه در یک متغیر PHP

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

راه حل: یک بار دیگر، هیچ چیز سختی وجود ندارد. فقط کد زیر را درفایل function.php خود پیست کنید:

function callback($buffer) {<br />
// modify buffer here, and then return the updated code<br />
return $buffer;<br />
}</p>
<p>function buffer_start() {<br />
ob_start("callback");<br />
}</p>
<p>function buffer_end() {<br />
ob_end_flush();<br />
}</p>
<p>add_action('wp_head', 'buffer_start');<br />
add_action('wp_footer', 'buffer_end');<br />

توضیح کد: برای دستیابی به این هک، به سه تابع نیازداریم:

• ()callback : این تابع تمام صفحه را به یک متغیر به نام $buffer تبدیل می کند. به عنوان مثال، شما می توانید با استفاده از عبارات منظم آن را قبل از تغییر اصلاح کنید.
• ()buffer_start :این تابع به سادگی بافر را شروع می کند. این تابع به تابع ()wp_head وردپرس هوک شده است.

• ()buffer_end :ین تابع بافر پاک می کند. . این تابع به تابع ()wp_footer وردپرس هوک شده است.

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

۸- استفاده از هوک و cron برای زمانبندی رویدادها

مشکل: شما احتمالا می دانید که وردپرس می توانید رویدادها را برنامه ریزی کند. برای مثال، می تواند پست ها را در تاریخ و زمان از پیش تعیین شده منتشر کند. ما به راحتی می توانیم با استفاده از هوک ها و wp-cron رویدادهای خود را زمانبندی کنیم. در این مثال، ما وبلاگ وردپرس خود را تنظیم خواهیم کرد که هر یک ساعت یک بار یک ایمیل به ما ارسال کند.

راه حل: بلوک کد زیر را در فایل functions.php تم خود پیست کنید

if (!wp_next_scheduled('my_task_hook')) {<br />
wp_schedule_event( time(), 'hourly', 'my_task_hook' );<br />
}</p>
<p>add_action( 'my_task_hook', 'my_task_function' );</p>
<p>function my_task_function() {<br />
wp_mail('you@yoursite.com', 'Automatic email', 'it is scheduled email.');<br />
}

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

برای زمانبندی یک رویداد، ما مجبور به استفاده از تابع ()wp_schedule_event هستیم. آخرین استدلال باید هوک شود، به همین دلیل است که ما تابع ()my_task_function را به my_task_hook هوک می کنیم.

۹- فهرست کردن تمام توابع هوک شده

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

راه حل: مثل دیگر کد ها این کد هم باید در فایل functions.php شما پیست شود. هنگامی که اشکال زدایی شما به پایان رسید، فراموش نکنید که کد را از فایل functions.php و یا هر پیز دیگری حذف کنید، وگرنه پیام اشکال زدایی همینطور ظاهر خواهد شد.

function list_hooked_functions($tag=false){<br />
global $wp_filter;<br />
if ($tag) {<br />
$hook[$tag]=$wp_filter[$tag];<br />
if (!is_array($hook[$tag])) {<br />
trigger_error("Nothing found for '$tag' hook", E_USER_WARNING);<br />
return;<br />
}<br />
}<br />
else {<br />
$hook=$wp_filter;<br />
ksort($hook);<br />
}<br />
echo '
<pre>';
foreach($hook as $tag => $priority){
echo "<br />&gt;&gt;&gt;&gt;&gt;\t<strong>$tag</strong><br />";
ksort($priority);
foreach($priority as $priority => $function){
echo $priority;
foreach($function as $name => $properties) echo "\t$name<br />";
}
}
echo '</pre>
<p>';<br />
return;<br />
}

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

list_hooked_functions();

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

list_hooked_functions('wp_head');
0 0 رای ها
امتیازدهی به مقاله
نمایش بیشتر

مطالب مرتبط

اشتراک در
باخبرم کن
guest
2 نظرات
جدیدترین ها
قدیمی ترین ها بیشترین رای
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها
دکمه بازگشت به بالا
2
0
افکار شما را دوست داریم، لطفا نظر دهید.x