<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>رادیکال دو &#187; Wordpress</title>
	<atom:link href="http://www.radikal2.com/category/tutorial/wordpress-tutorial/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.radikal2.com</link>
	<description>آموزش برنامه‌نویسی و طراحی وب، دنیای اینترنت</description>
	<lastBuildDate>Sun, 25 Oct 2009 18:44:00 +0000</lastBuildDate>
	<language>fa</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>چگونه یک افزونه برای وردپرس بنویسیم</title>
		<link>http://www.radikal2.com/1388/08/how-to-write-a-wordpress-plugin/</link>
		<comments>http://www.radikal2.com/1388/08/how-to-write-a-wordpress-plugin/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 18:12:17 +0000</pubDate>
		<dc:creator>Alireza.S</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[آموزش]]></category>
		<category><![CDATA[افزونه]]></category>
		<category><![CDATA[وردپرس]]></category>

		<guid isPermaLink="false">http://www.radikal2.com/?p=182</guid>
		<description><![CDATA[در این پست اشاره‌ای خواهم داشت به این که چگونه میتوانیم برای وردپرس افزونه (Plugin) بنویسیم. نوشتن یک افزونه راه‌های زیادی دارد، من در این مطلب به ساده‌ترین راه برای شروع اشاره میکنم. در پایان این نوشته افزونه‌ای خواهیم نوشت که بعد از انتشار پست آن را برای چند نفر ایمیل کند، به تیتر‌ها افکت [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: right;">در این پست اشاره‌ای خواهم داشت به این که چگونه میتوانیم برای وردپرس افزونه (Plugin) بنویسیم. نوشتن یک افزونه راه‌های زیادی دارد، من در این مطلب به ساده‌ترین راه برای شروع اشاره میکنم.<br />
در پایان این نوشته افزونه‌ای خواهیم نوشت که بعد از انتشار پست آن را برای چند نفر ایمیل کند، به تیتر‌ها افکت سایه بدهد.</p>
<h2>مقدمه</h2>
<p style="text-align: right;">یکی از نقاط قدرت وردپرس افزونه‌های آن است که  قابلیت‌ها و توانایی‌های آن را افزایش میدهد. وردپرس این امکان را به هر کاربری با کمی معلومات میدهد تا افزونه خود را بنویسد و بصورت شخصی استفاده کند یا با دیگران به اشتراک بگذارد.<br />
برای نوشتن یک افزونه وردپرس کافیست اطلاعاتی مقدماتی در PHP, JavaScript و CSS داشته باشید.</p>
<h2>چرا باید یک افزونه وردپرس بنویسیم؟</h2>
<p style="text-align: right;">دلایل زیادی میتواند وجود داشته باشد که شروع به نوشتن یک افزونه وردپرس بکنید، ممکن است طراح قالب‌های وردپرس باشید و بخواهید کاری را که دائم انجام میدهید بصورت اتوماتیک در بیاورید، ممکن است بخواهید یک افزونه وردپرس را گشترس دهید یا آن را تغییر دهید، ممکن است بخواهید از این راه کسب درآمد کنید، یا شاید هم بخاطر محبوبیت، فرض کنید یک افزونه برای وردپرس مینویسید و آن را در بانک افزونه‌های وردپرس قرار میدهید و هزاران نفر از آن استفاده میکنند و در قسمت مدیریت افزونه‌های سایت خود لینک سایت شما را مشاهده خواهند کرد.</p>
<h2>شروع</h2>
<p style="text-align: right;">هر افزونه وردپرس باید حداقل دارای یک فایل PHP باشد، همچنین میتواند دارای فایل‌های دیگر شامل فایل‌های جاوا اسکریپت، فایل‌های استایل، عکس و&#8230; باشد، به همین دلیل بهتر است برای افزونه خود یک پوشه ایجاد کنیم.<br />
برای شروع در مسیر <strong><em>wp-content/plugins</em> </strong>یک پوشه همنام با افزونه خود ایجاد میکنیم، نام این پوشه نباید شامل فاصله (space) باشد، برای این آموزش من پوشه‌ی myPlugin را ایجاد میکنم.<br />
درون این پوشه یک فایل PHP ایجاد میکنیم همنام با نامِ پوشه، اگر با درست کردن قالب‌های وردپرس آشنا باشید میدانید که برای اینکه وردپرس قالب شما را بشناسد باید در چند خط اول فایل style.css مشخصات قالب را وارد کنیم، در نوشتن افزونه نیز باید همین کار را انجام دهیم، بنابراین چند خط اول این فایل به مشخصات افزونه اختصاص دارد.</p>
<pre class="brush: php;">
&lt;?php
/*
Plugin Name: Name Of The Plugin
Plugin URI: http://URI_Of_Page_Describing_Plugin_and_Updates
Description: A brief description of the Plugin.
Version: The Plugin's Version Number, e.g.: 1.0
Author: Name Of The Plugin Author
Author URI: http://URI_Of_The_Plugin_Author
*/
?&gt;
</pre>
<p style="text-align: right;">این‌ها اطلاعاتیست که برای شناساندن افزونه خود به وردپرس نیازمندیم، همانطور که در کد آمده خط سوم نام افزونه رو مشخص میکند که در صفحه مدیریت افزونه‌ها نمایش داده میشود، خط چهارم آدرس افزونه را مشخص میکند، خطوط پنجم و ششم به ترتیب توضیحی از کاربرد افزونه و نسخه آن را مشخص میکنند و در خط هفتم نام سازنده افزونه مشخص میشود، در خط هشتم نیز آدرس سازنده مشخص میشود.</p>
<p style="text-align: right;"><strong><em>نکته بسیار مهمی</em></strong> که باید به آن توجه داشته باشید این است که Encoding این فایل باید ANSI باشد، اگر این فایل را بصورت UTF-8 یا فرمت‌های دیگر ذخیره کنید هنگام راه‌اندازی یا استفاده از افزونه با خطای :</p>
<pre><strong>Warning</strong>: Cannot modify header information</pre>
<p style="text-align: right;">مواجه خواهید شد. برای تغییر Encoding فایل میتوانید در برنامه Notepad++ از منوی Format گزینه Encoding in ANSI را انتخاب کنید مانند تصویر زیر:</p>
<p style="text-align: center;"><img class="size-full wp-image-183  aligncenter" title="How to Write a WordPress Plugin - File Encoding" src="http://radikal2.com/radikal2/wp/wp-content/uploads/2009/10/encoding.jpg" alt="How to Write a WordPress Plugin - File Encoding" width="256" height="225" /></p>
<p style="text-align: center;">
<p style="text-align: right;">یا از UTF-8 without BOM استفاده کنید.<br />
حال که فایل که خود آماده و ذخیره کردیم میتوانید وارد صفحه مدیریت افزونه‌های وردپرس شویم، اگر تمام کارها را درست انجام داده باشیم افزونه‌ای که درست کردیم را در لیست افزونه خواهیم دید.</p>
<p style="text-align: center;"><img class="size-full wp-image-184  aligncenter" title="How to Write a WordPress Plugin" src="http://radikal2.com/radikal2/wp/wp-content/uploads/2009/10/plugin-page.jpg" alt="How to Write a WordPress Plugin" width="427" height="51" /></p>
<p style="text-align: center;">
<h2>استفاده از توابع Hook</h2>
<p style="text-align: right;">hook‌ها یک سری توابع هستند که وردپرس در خود گنجانده است، نحوه کار آن‌ها به این صورت است که وردپرس قبل از اجرای هر یک از توابع خود یک بار توابع Hook که توسط افزونه‌ها نوشته شده‌اند چک میکند و کاری که hookها به آن اشاره دارند انجام میدهد و سپس نتیجه را نمایش میدهد.<br />
برای مثال وردپرس قبل از اینکه عنوان هر مطلب را نمایش دهد، بررسی میکند که آیا تابع Hookای از جنس filter با مشخصه the_title وجود دارد یا نه اگر وجود داشت آن را اجرا میکند و سپس عنوان مطلب را چاپ میکند.<br />
یا وقتی یک پست را مینویسید و بر روی دکمه انتشار کلیک میکنید وردپرس بررسی خواهد کرد که آیا باید قبل فرستادن اطلاعات به پایگاه داده کاری روی آن انجام دهد یا خیر، تمام این کار‌ها را میتوان با توابع Hook انجام داد.</p>
<p style="text-align: right;">یکی از این توابع تابع <em><a href="http://codex.wordpress.org/Function_Reference/register_activation_hook" target="_blank">register_activation_hook</a> </em>میباشد، این تابع دو ورودی دریافت میکند، ورودی اول مسیری است که فایل PHP اصلی افزونه در آن قرار دارد، و ورودی دوم تابعی است که باید اجرا کند.<br />
کار این تابع این است که تابعی که به عنوان ورودی دریافت میکند را هنگامی که افزونه فعال میشود اجرا کند، برای مثال به کد زیر توجه کنید:</p>
<pre class="brush: php;">
register_activation_hook(__FILE__, 'myPlugin_activate');

function myPlugin_activate() {
 // do something...
}
</pre>
<p style="text-align: right;">در این تکه کد مشاهده میکنید که یک تابع به اسم <em>myPlugin_activate </em>معرفی شده است و به وسیله تابع <em>register_activation_hook </em>در زمان فعال‌سازیه افزونه فراخوانی شده است.<br />
در تابع <em>myPlugin_activate</em> میتوان کارهایی از قبیل ساختن جداول لازم در پایگاه داده، معرفی متغییرهای لازم و دیگر کارهای لازم در هنگام اجرای افزونه را انجام دهیم.</p>
<p style="text-align: right;">تابع دیگر <a href="http://codex.wordpress.org/Function_Reference/register_deactivation_hook" target="_blank"><em>register_deactivation_hook</em></a> میباشد که مانند تابع قبل دو ورودی میگیرد و تابع‌ای که به آن معرفی میشود را هنگام غیرفعال کردن افزونه اجرا میکند.</p>
<p style="text-align: right;">به جز تو تابع بالا توابع hook به دو دسته تقسیم میشوند:<br />
<a href="http://codex.wordpress.org/Plugin_API#Actions" target="_blank">Actions </a>: وقتی یک رویداد خاص اتفاق میفتد یا در زمان خاصی اجرا میشوند.<br />
<a href="http://codex.wordpress.org/Plugin_API#Filters" target="_blank">Filters </a>: برای انجام تغییراتی روی اطلاعات قبل ارسال به پایگاه داده یا نمایش استفاده میشوند.</p>
<p style="text-align: right;">گاهی میتواند یک کار را هم با استفاده از Actionها انجام داد هم Filterها.</p>
<h2>Actions</h2>
<p style="text-align: right;">برای استفاده از actionها کافیست یک تابع PHP که میخواهید اجرا شود بنویسید، سپس آن را در زمانی که میخواهید توسط تابع <em>add_action</em> اجرا کنید.</p>
<pre class="brush: php;">
add_action ('plugins_loaded', 'plugin_start');

function plugin_start() {
 if ( is_admin() ) { } else {
 wp_enqueue_script (&quot;jquery&quot;);
 require_once (dirname (__FILE__) . &quot;/functions.php&quot;);
 }
}
</pre>
<p style="text-align: right;">برای مثال در تکه کد بالا مشاهده میکنید که یک تابع با نام <em>plugin_start</em> نوشته شده است، سپس توسط تابع <em>add_action</em> در زمان <em>plugins_loaded</em> فراخوانی شده است، در این صورت تابع plugin_start در زمانی که افزونه‌ها بطور کامل بارگذاری شده‌اند اجرا میشود و کتابخانه جاوا اسکریپت jQuery موجود در هسته وردپرس و فایل functions.php موجود در پوشه افزونه را فراخوانی میکند.</p>
<p style="text-align: right;">یا برای مثال میتوانید تابعی به اسم <em>email_friends</em> بنویسید و آن را در زمان <em>publish_post</em> فراخوانی کنید، در این صورت زمانی که پست شما منتشر میشود تابع email_friends اجرا میشود و آن را برای تمام دوستان شما ارسال میکند.</p>
<p style="text-align: right;">میتوانید لیستی از hookهایی که میتوانید در آنها از تابع add_action استفاده کنید را در <a href="http://codex.wordpress.org/Plugin_API/Action_Reference" target="_blank">این صفحه</a> ببینید.</p>
<h2>Filters</h2>
<p style="text-align: right;">فیلترها نیز مانند actionها کار میکنند، فقط باید یک تابع بنویسید و آن را به زمانی که میخواهید اجرا شود به وسیله تابع <em>add_filter</em> اختصاص دهید.</p>
<pre class="brush: php;">
add_filter('comment_text','filter_profanity');

function filter_profanity($content) {
 global $profanities;
 $content=str_ireplace($profanities,'{censored}',$content);
 return $content;
}
</pre>
<p style="text-align: right;">برای مثال در کد بالا تابع <em>filter_profanity</em> نوشته شده و یک ورودی <em>content</em> میگیرد و با متغییر <em>profanities</em> از قبل تعریف شده مقایسه میکند و اگر کلمه‌ای متشابه داشته باشد آن را با {censored} جایگزین میکند، این تابع به <em>comment_text</em> اختصاص داده شده و به این ترتیب متن دیدگاه‌هارا بررسی میکند اگر در آن ناسزا بکار برده شده باشد آن را سانسور میکند.</p>
<p style="text-align: right;">میتوانید لیستی از hookهایی که میتوانید در آنها از تابع add_filter استفاده کنید را در <a href="http://codex.wordpress.org/Plugin_API/Filter_Reference" target="_blank">این صفحه</a> ببینید.</p>
<h2>نمونه</h2>
<p style="text-align: right;">در آخر افزونه myPlugin را این صورت کامل میکنیم:</p>
<pre class="brush: php;">
&lt;?php
/*
Plugin Name: myPlugin
Plugin URI: http://www.radikal2.com/
Description: it is my first wordpress plugin
Version: 1.0
Author: Radikal2
Author URI: http://www.radikal2.com
*/

add_action ('publish_post', 'myPlugin_email');
add_filter ('the_title', 'myPlugin_title');

function myPlugin_email($post_ID) {
 $mails = 'you-name@your-domain.com,you-name@your-domain.com,you-name@your-domain.com,';
 mail($mails, &quot;My Blog Updated!&quot;,
 'I just put something on my blog: http://blog.example.com');
 return $post_ID;
}

function myPlugin_title($t) {
 $x = '&lt;span style=&quot;text-shadow: 0px 0px 16px blue;&quot;&gt;' .$t. '&lt;/span&gt;';
 return $x;
}

?&gt;
</pre>
<p>مشاهده میکنیم که در این کد از دو تابع add_action برای فراخوانی تابع myPlugin_email برای ارسال یک ایمیل برای تعدادی از دوستان بعد از انتشار پست و add_filter برای اضافه کردن افکت سایه به کمک یک کد CSS به تیتر مطالب استفاده شده است.</p>
<p>+ <a href="http://codex.wordpress.org/Writing_a_Plugin" target="_blank">Writing a Plugin</a> / <a href="http://codex.wordpress.org/Plugin_API" target="_blank">Plugin API</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.radikal2.com/1388/08/how-to-write-a-wordpress-plugin/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>نمایش تعداد تمام پست‌ها، نظرها، دسته‌بندی‌ها و برچسب‌های یک وبلاگ در وردپرس</title>
		<link>http://www.radikal2.com/1387/11/display-the-total-number-of-wordpress-posts-comments-categories-and-tags/</link>
		<comments>http://www.radikal2.com/1387/11/display-the-total-number-of-wordpress-posts-comments-categories-and-tags/#comments</comments>
		<pubDate>Tue, 17 Feb 2009 16:10:07 +0000</pubDate>
		<dc:creator>Alireza.S</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[آموزش]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[طراحی وب]]></category>
		<category><![CDATA[وردپرس]]></category>

		<guid isPermaLink="false">http://www.radikal2.com/?p=92</guid>
		<description><![CDATA[اگر بخواهید تعداد تمام پست‌ها ، نطرها، دسته‌بندی‌ها و برچسب‌های موجود در یک بلاگ ایجاد شده به کمک وردپرس را نمایش دهید میتوانید از کد‌های زیر استفاده کنید. کد زیر را در قالب خود قرار دهید &#38;lt;?php $numposts = $wpdb-&#38;gt;get_var(&#38;quot;SELECT COUNT(*) FROM $wpdb-&#38;gt;posts WHERE post_status = 'publish' AND post_type = 'post'&#38;quot;); if (0 &#38;lt; $numposts) [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="nostyle size-full wp-image-93 aligncenter" title="display the total number of wordpress posts, comments, categories and tags" src="http://radikal2.com/radikal2/wp/wp-content/uploads/2009/02/post-comments-nums2.gif" alt="display the total number of wordpress posts, comments, categories and tags" width="400" height="150" /></p>
<p>اگر بخواهید تعداد تمام پست‌ها ، نطرها، دسته‌بندی‌ها و برچسب‌های موجود در یک بلاگ ایجاد شده به کمک وردپرس را نمایش دهید میتوانید از کد‌های زیر استفاده کنید.</p>
<p>کد زیر را در قالب خود قرار دهید</p>
<pre class="brush: php;">
&amp;lt;?php
$numposts = $wpdb-&amp;gt;get_var(&amp;quot;SELECT COUNT(*) FROM $wpdb-&amp;gt;posts WHERE post_status = 'publish' AND post_type = 'post'&amp;quot;);
if (0 &amp;lt; $numposts) $numposts = number_format($numposts);

$numcomms = $wpdb-&amp;gt;get_var(&amp;quot;SELECT COUNT(*) FROM $wpdb-&amp;gt;comments WHERE comment_approved = '1'&amp;quot;);
if (0 &amp;lt; $numcomms) $numcomms = number_format($numcomms);

$numcats = $wpdb-&amp;gt;get_var(&amp;quot;SELECT COUNT(*) FROM $wpdb-&amp;gt;term_taxonomy WHERE taxonomy = 'category'&amp;quot;);
if (0 &amp;lt; $numcats) $numcats = number_format($numcats);

$numtags = $wpdb-&amp;gt;get_var(&amp;quot;SELECT COUNT(*) FROM $wpdb-&amp;gt;term_taxonomy WHERE taxonomy = 'post_tag'&amp;quot;);
if (0 &amp;lt; $numtags) $numtags = number_format($numtags);
?&amp;gt;
</pre>
<p>حالا متغییر numposts$ تعداد پست‌ها، متغییر numcomms$ تعداد نظرها، متغییر numcats$ تعداد دسته‌بندی‌ها و متغییر numtags$ تعداد برچسب‌ها را در خود نگهداری میکنند و میتوانید به راحتی از آنها در قالب خود استفاده کنید.</p>
<pre class="brush: php;">
Total posts: &amp;lt;?php echo $numposts; ?&amp;gt;
Total comments: &amp;lt;?php echo $numcomms; ?&amp;gt;
Total Categories: &amp;lt;?php echo $numcats; ?&amp;gt;
Total Tags: &amp;lt;?php echo $numtags; ?&amp;gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.radikal2.com/1387/11/display-the-total-number-of-wordpress-posts-comments-categories-and-tags/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>تفکیک فایل‌های استایل در وردپرس</title>
		<link>http://www.radikal2.com/1387/09/separated-wordpress-stylesheets/</link>
		<comments>http://www.radikal2.com/1387/09/separated-wordpress-stylesheets/#comments</comments>
		<pubDate>Fri, 28 Nov 2008 11:20:51 +0000</pubDate>
		<dc:creator>Alireza.S</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[آموزش]]></category>
		<category><![CDATA[استایل]]></category>
		<category><![CDATA[وردپرس]]></category>

		<guid isPermaLink="false">http://www.radikal2.com/?p=8</guid>
		<description><![CDATA[برای شناخته شدن یک پوسته‌ی جدید در قسمت مدیریت پوسته‌های وردپرس وجود فایلی با اسم style و پسوند css الزامی است. ولی ممکن است نوشتن تمام استایل‌ها در این فایل کمی این فایل را طولانی کند و خواندن و ویرایش آن را پیچیده کند. اما ما میتوانیم فایل‌های استایل را برای قسمت‌های مختلف تفکیک کنیم، [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: right;">برای شناخته شدن یک پوسته‌ی جدید در قسمت مدیریت پوسته‌های وردپرس وجود فایلی با اسم style و پسوند css الزامی است.<br />
ولی ممکن است نوشتن تمام استایل‌ها در این فایل کمی این فایل را طولانی کند و خواندن و ویرایش آن را پیچیده کند.<img class="alignleft size-full wp-image-9" title="filenames" src="http://radikal2.com/radikal2/wp/wp-content/uploads/2008/11/filenames.gif" alt="" width="160" height="121" /></p>
<p style="text-align: right;">اما ما میتوانیم فایل‌های استایل را برای قسمت‌های مختلف تفکیک کنیم، برای مثال فایل استایل قسمت صفحات را جدا، استایل صفحه اصلی را جدا و استایل قسمت نظرات را جدا بنویسیم.</p>
<p style="text-align: right;">برا این کار ابتدا یک پوشه با اسم stylesheets در پوشه‌ پوسته مورد نظر ایجاد میکنیم، فایل style.css را نیز ایجاد میکنیم و توضیخات مربوط به پوسته را درون آن مینویسیم.</p>
<p style="text-align: right;">سپس فایل‌های استایل مورد نظر را در پوشه stylesheets ایجاد میکنیم.<br />
حالا برای وارد کردن این استایل‌ها به فایل استایل اصلی یعنی style.css کافیست فایل style.css را به شکل زیر ویراش کنیم.</p>
<p style="text-align: right;">برای مثال اگر سه استایل با اسم‌های index.css , pages.css , comment.css درست کرده‌ایم میتوانیم آنها را به شکل زیر وارد فایل style.css بکنیم.</p>
<pre class="brush: css;">
@import url(&amp;quot;stylesheets/index.css&amp;quot;);
@import url(&amp;quot;stylesheets/pages.css&amp;quot;);
@import url(&amp;quot;stylesheets/comment.css&amp;quot;);
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.radikal2.com/1387/09/separated-wordpress-stylesheets/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
