10 وصفات لملف الدوال تغنيك عن مثيلاتها من إضافات WordPress

مدرج تحت قسم: دروس
11 أكتوبر 2009

10 وصفات لملف الدوال تغنيك عن مثيلاتها من إضافات WordPress

في هذا المقال، سنتعلم بعض ما أحب أن أطلق عليه “الوصفات”، أو الشفرات البرمجية في ملف functions.php ستغنيك عن ما يشبهها من إضافات لنظام WordPress.

ملف functions.php هو ملف للدوال التي تستخدم باستمرار من قبل ملفات القالب الخاص بمدونة WordPress. هذا الملف يمكن أن يعمل عمل الإضافات، وإذا كان موجوداً لديك في مجلد القالب، فإن WordPress سيقوم بتحمليه آلياً عند التهيئة (في صفحات لوحة التحكم والصفحات الخارجية). أي أنه سيكون حاضراً لديك في كل الأوقات للإستدعاء منه.

إذا لم يكن لديك هذا الملف في مجلد القالب، ببساطة، قم بإنشاء ملف عادي، وسمّه functions.php داخل المجلد، وأبدأ معنا بتجربة بعض هذه الوصفات.

1. إضافة يملي للتعليقات Yamli

yamli

كما يعلم الجميع، فإن خدمة يملي تعتبر من أفضل خدمات الكرشنة والنقحرة، لتحويل الأحرف من اللغة اللاتينية إلى اللغة العربية.

تتطلب هذه الوصفة وجود دالة wp_footer()، في أغلب الأحيان تكون موجودة في ملف footer.php للقالب. فإذا كانت موجودة، إذاً أكمل معنا، وإذا لم تكن موجودة، فقط قم بإضافتها قبل وسم </body>.

<?php wp_footer(); ?>

</body>
</html>

ببساطة، انسخ الشفرة وألصقها في ملف functions.php.

function wpy_yamlify()
{
	//Yamli Options can be found at: http://www.yamli.com/api/docs/
	//a: الحقول المراد تفعيل يملي بداخلها
	$yamli_options['fields']['comment'] = true;
	$yamli_options['fields']['author'] = true;
	//b: مكان ظهور مربع يملي
	$yamli_options['settingsPlacement'] = "inside";
	//c: لغة واجهة مستخدم يملي
	$yamli_options['uiLanguage'] = "en";
	//d: بداية ظهور يملي
	$yamli_options['startMode'] = "onOrUserDefault";
	//e: لا تغير تحت هذا الخط
	//------------------------------------------------------------

	foreach($yamli_options['fields'] as $option => $state)
	{
		if($state)
		{
			$yamli_out .= 'Yamli.yamlify("' . $option . '", {
							settingsPlacement: "' . $yamli_options['settingsPlacement'] . '"
							,uiLanguage: "' . $yamli_options['uiLanguage'] . '"
							,startMode: "' . $yamli_options['onOrUserDefault'] . '"
					} );' . "\n";
		}
	}

	echo '
		<!-- YAMLI CODE START -->
		<script type="text/javascript" src="http://api.yamli.com/js/yamli_api.js"></script>
		<script type="text/javascript">
		if (typeof(Yamli) == "object" && Yamli.init())
		{
	'.
			$yamli_out
	.'
		}
		</script>
		<!-- YAMLI CODE END -->
	';
}

add_action( 'wp_footer', 'wpy_yamlify' );

2. إخفاء نسخة WordPress

generator-remover

إحدى الحيل التي من الممكن أن تساعدك على رفع مستوى أمان المدونة، هي إخفاء نسخة WordPress المستخدمة. حيث أنه افتراضياً، تكون النسخة المستخدمة ظاهرة عند مشاهدة الشفرة المصدرية للصفحة.

ببساطة، انسخ الشفرة وألصقها في ملف functions.php.

function replace_wp_version()
{
	if ( !is_admin() )
	{
		global $wp_version;

		// random value
		$v = intval( rand(0, 9999) );

		if ( function_exists('the_generator') )
		{
			// eliminate version for wordpress >= 2.4
			add_filter( 'the_generator', create_function('$a', "return null;") );
			// add_filter( 'wp_generator_type', create_function( '$a', "return null;" ) );

			// for $wp_version and db_version
			$wp_version = $v;
		}
		else
		{
			// for wordpress < 2.4
			add_filter( "bloginfo_rss('version')", create_function('$a', "return $v;") );

			// for rdf and rss v0.92
			$wp_version = $v;
		}
	}
}

add_action( 'init', 'replace_wp_version', 1 );

المصدر: إضافة Secure WordPress

3. أخذ الرابط القصير من bit.ly آلياً

bitly

خدمة Bit.ly يستخدمها الكثير منا لتقصير الروابط، وبالإضافة إلى تقصيرها للروابط، تقوم الخدمة بعمل إحصائية كاملة عن الروابط التي قمت بتقصيرها، وعدد مرات زيارتها.

قبل استخدامك لهذه الوصفة، الرجاء التسجيل في الخدمة حتى تتمكن من متابعة الإحصائيات على حسابك. بعد التسجيل عليك بتغيير المتغيرين في الشفرة $login و $api_key.

أولاً، انسخ الشفرة وألصقها في ملف functions.php. ولا تنسى تغيير إعدادات المتغيرات.

function get_bit_ly_url($url)
{
	//Bit.ly options
	//a: اسم الدخول الخاص بك في Bit.ly
	$login   = 'bitlyapidemo';
	//b: مفتاح API
	$api_key = 'R_0da49e0a9118ff35f52f629d2d71bf07';
	//c: لا تغير تحت هذا الخط
	//------------------------------------------------------------

	$bitly_api_data = @file_get_contents('http://api.bit.ly/shorten?version=2.0.1&longUrl=' . $url . '&login=' . $login . '&apiKey=' . $api_key );
	$response = explode(" ", $http_response_header[0], 3);
	$response = $response[1];

	if ($response != "200") return;

	$bitly_return_data = json_decode($bitly_api_data, true);

	if ($bitly_return_data["errorCode"] != 0) return;

	return $bitly_return_data["results"][$url]["shortUrl"];
}

ثانياً، انسخ هذه الشفرة، وألصقها في أي مكان داخل الحلقة The Loop، ويفضل بعد the_content() مباشرة. ليتمكن زوارك من رؤية الرابط ومشاركته.

<?php if( function_exists('get_bit_ly_url') ): ?>
<?php $short_url = get_bit_ly_url(get_permalink()); ?>
<?php if($short_url): ?><strong>الرابط القصير: </strong><a href="<?php echo $short_url ;?>"><?php echo $short_url ;?></a><?php endif; ?>
<?php endif; ?>

4. إضافة محتويات خاصة بقرّاء الخلاصات RSS

rss-insert-content

يمكنك استخدام هذه الوصفة في أشياء كثيرة، على سبيل المثال، إدراج الإعلانات لقرّاء خلاصة مدونتك.

انسخ الشفرة وألصقها في ملف functions.php. ويمكنك التعديل على متغيرات $before_content أي قبل المحتوى، و $after_content أي بعد المحتوى لما تريد من نصوص أو عناصر HTML.

function insertRss($content)
{
	if( is_feed() )
	{
		//a: نص أو عناصر HTML تأتي قبل المحتوى
		$before_content = '<h3>إعلانات أو أي شيء آخر يكون قبل المحتوى</h3>&nbsp;';
		//b: نص أو عناصر HTML تأتي بعد المحتوى
		$after_content  = ' <p>إعلانات أو أي شيء آخر يكون بعد المحتوى</p>&nbsp;';
		//c: لا تغير تحت هذا الخط
		//------------------------------------------------------------
		$content = $before_content . $content . $after_content;
		return $content;
	}
}

add_filter('the_content', 'insertRss');

المصدر: http://www.wprecipes.com/hack-insert-ads-in-your-rss-feed

5. عرض عدد متابعي خلاصتك عبر خدمة Feedburner بشكل نصي

rss-readers-count

قبل أن تستخدم هذه الوصفة، عليك التأكد من حسابك على خدمة Feedburner، وأن خدمة Awareness API لديك مفعلة. إن لم تكن كذلك، كل ما عليك فعله هو الذهاب إلى Publicize ومن ثم اختيار Awareness API، والضغط على Activate.

أولاً، انسخ الشفرة وألصقها في ملف functions.php. ولا تنسى تغيير إعدادات المتغيرات.

function feedburner_rss_count_text()
{
	//a: معرّف حسابك لدى Feedburner
	$uri = 'Almashroo';
	//b: مدة تخزين الرقم مؤقتاً قبل طلبه من جديد من الخادم cache (الرقم بالثواني)
	$cache_time = 600;
	//c: لا تغير تحت هذا الخط
	//------------------------------------------------------------

	$fb = get_option("feedburnersubscribecount");
	if ($fb['lastcheck'] < ( @mktime() - $cache_time ) )
	{
		$url	= 'https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=' . $uri;
		$ch 	= @curl_init();
		@curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		@curl_setopt($ch, CURLOPT_URL, $url);
		$data = @curl_exec($ch);
		@curl_close($ch);
		if ($data)
		{
			@preg_match('/circulation=\"([0-9]+)\"/', $data, $matches);
			$fb['count'] = 0;

			if ($matches[1] != 0)
			{
				$fb['count'] = $matches[1];
			}

			$fb['lastcheck'] = @mktime();
			update_option("feedburnersubscribecount", $fb);
			return $fb['count'];
		}
		return;
	}
	else
	{
		return $fb['count'];
	}
}

ثانياً، انسخ هذه الشفرة، وألصقها في أي مكان تريد أن يظهر به العدد.

<?php if (function_exists('feedburner_rss_count_text')) : ?>عدد متابعينا عبر الملقم: <?php echo feedburner_rss_count_text(); ?><?php endif; ?>

المصدر: http://yoast.com/feedburner-subscription-feedproxy-google/

6. عرض خلاصات RSS على المدونة

rss-reader-list

يمكنك عرض آخر مستجدات المواقع التي تتابعها على مدونتك، والوصفة لذلك بسيطة.

أولاً، انسخ الشفرة وألصقها في ملف functions.php.

function wp_rss_fetch_items($feed_url, $number = 5)
{
	include_once(ABSPATH . WPINC . '/feed.php');
	$rss = fetch_feed($feed_url);
	if ( is_wp_error($rss) )
	{
		return false;
	}
	else
	{
		$maxitems = $rss->get_item_quantity($number);
		return $rss->get_items(0, $maxitems);
	}
}

ثانياً، في أي مكان في الصفحة، ويفضل الجانب sidebar، ألصق هذه الشفرة، ويمكنك تغيير إعدادت الموقع وعدد المواضيع المعروضة.

<?php $rss_items = wp_rss_fetch_items('http://www.almashroo.com/feed/', 5); ?>
<?php if ($rss_items): ?>
<li>
	<h2>خلاصة RSS من موقع المشروع</h2>
	<ul>
	<?php foreach ( $rss_items as $item ) : ?>
		<li>
			<a href='<?php echo $item->get_permalink(); ?>' title='<?php echo 'نشر بتاريخ '.$item->get_date('j F Y الساعة g:i a'); ?>'>
			<?php echo $item->get_title(); ?></a>
		</li>
	<?php endforeach; ?>
	</ul>
</li>
<?php endif; ?>

7. عرض عدد التعليقات الحقيقي

real-comment-count

في نظام WordPress، التنبيهات والتعليقات يكون حسابها واحداً، أي أن مجموع عدد التعليقات التي ستظهر لك هو مجموع التنبيهات مضاف إليه التعليقات، والبعض منا لا يريد هذا الجمع. لذلك هذه الوصفة تقوم باحتساب العدد الفعلي للتعليقات فقط من دون حساب التنبيهات والتعقيبات.

انسخ الشفرة وألصقها في ملف functions.php.

function comment_count( $count )
{
        if ( ! is_admin() )
	{
                global $id;
                $comments_by_type = &separate_comments(get_comments('status=approve&post_id=' . $id));
                return count($comments_by_type['comment']);
        } else {
                return $count;
        }
}

add_filter('get_comments_number', 'comment_count', 0);

المصدر: http://sivel.net/2008/10/wp-27-comment-separation/

8. تعطيل عرض أخطاء الدخول للوحة التحكم

suppress-login-errors

أيضاً وصفة خاصة برفع مستوى الأمان لديك، يمكنك تعطيل الجمل المختلفة التي تخرج عند إعطاء المعلومات الخاطئة عن الدخول للوحة التحكم.

انسخ الشفرة وألصقها في ملف functions.php.

if ( !is_admin() )
{
	add_action( 'login_head', create_function( '$a',  "echo \"<style type='text/css'>#login_error {display: none;}</style>\n\";") );
	add_filter( 'login_errors', create_function( '$a', "return null;" ) );
}

المصدر: إضافة Secure WordPress

9. تعطيل الحفظ التلقائي للتدوينات

disable-autosave

هي وبلا شك ميزة رائعة من مميزات WordPress، ولكن في بعض الأحيان تُبطىء المتصفح لدرجة غير معقولة، مما يجعلها نقمة بدلاً من كونها نعمة. لذلك هذه الوصفة تعطل هذه الخاصية.

انسخ الشفرة وألصقها في ملف functions.php.

function disableAutoSave()
{
	wp_deregister_script('autosave');
}
add_action( 'wp_print_scripts', 'disableAutoSave' );

المصدر: http://www.wprecipes.com/wordpress-hook-disable-posts-auto-saving

10. كشف المتصفحات ودالة body_class()

browser-detection

هي من الوصفات الجديدة نسبياً، حيث ظهرت دالة body_class() في نسخة 2.8، وتتيح هذه الوصفة استهداف المتصفحات المختلفة بفئات CSS Classes خاصة بها، أي أنه يمكنك، على سبيل المثال، إنشاء قوانين وفئات خاصة بمتصفح Opera، وقوانين أخرى خاصة بمتصفح Safari، بحيث يمكنك استدعاء هذه الفئات والقوانين لدى كل مستخدم لهذه المتصفحات.

تتطلب هذه الوصفة وجود الدالة body_class() في وسم body لديك. كالتالي:

<body <?php body_class(); ?>>

انسخ الشفرة وألصقها في ملف functions.php.

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;
}

add_filter('body_class','browser_body_class');

النسخة النهائية لوسم body سيكون بهذا الشكل:

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

الآن، يمكنك استهداف الروابط على متصفح Safari بهذا الشكل:

.safari a
{
	color: red;
	text-decoration: underline;
}

المصدر: http://www.nathanrice.net/blog/browser-detection-and-the-body_class-function/

عن الكاتب

عبدالرحمن العتيبة أحد مؤسسي ورئيس التحرير في موقع المشروع، يهوى برمجة وتطوير الويب بكافة أنواعها، وله خبرة تتعدى 10 سنوات في هذا المجال، يعتبر نفسه من "أشد" مناصري المصادر المفتوحة، وأنها "في يوم ما" ستقضي على كل برنامج محتكر ومغلق مصدره. يعتقد بوجود القمر، ولكنه للأسف لم يصل إليه إلى الآن. يمكنك متابعته على twitter وعلى مدونته.

  • Share/Bookmark

التعقيبات

  1. مصادر لتطوير أدوات الووردبريس (الجزء الأول)

التعليقات (5) على ”10 وصفات لملف الدوال تغنيك عن مثيلاتها من إضافات WordPress“

  1. الصراحة أغلب الدوال جديدة على بشكل كبير – شكراً لقد إستفدت منها كثيراً ..

  2. أكواد مهمة .

    جزاك الله كل خير.

  3. شكرا لك اخي الكريم :)
    درس مفيدة وهناك بعض النقاط مفيدة جداً وضعته بالمفضلة وسأستفيد بيه :)

  4. هذا أكثر من “مقال ممتاز” ،،
    جزاك الله خيراً

  5. mohob

    جزااك الله الف خير ..
    والله استفدت منها ..
    وطبقت اكثر من اضافه ..
    الحمد لله
    -
    وجزاك الله خير

أضف تعليقك




يمكنك استخدام الوسوم التالية في التعليق: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


* حقول مطلوبة