21 ترفند وردپرس که لازمتان میشود !

نکات و ترفندهای قدرتمند وردپرس

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

1. وردپرس دارای هزاران اسکریپت است

با استفاده از دو تابع بی نظیر wp_enqueue_script() و wp_enqueue_style()، می توانید طرح ها و اسکریپت ها را به راحتی در مدیریت استفاده کنید. اما آیا می دانستید که وردپرس تعداد زیادی اسکریپت پیش ساخته دارد؟ jQuery ، بسیاری از عناصر UI jQuery ، فرم jQuery ، موضوع های SWF، MCE های زیر، Jcrop ها و Thickbox ها که از همه شناخته شده تر هستند. لیست کامل را می توان در مستندات وردپرس یافت. اگر علاقه مند به یادگیری چگونگی استفاده از به نوبت قراردادن توابع به طور موثر هستید، من “راهنمای توسعه دهندگان برای ایجاد ستیزه ی رایگان میان جاوا اسکریپت و CSS در وردپرس” توصیه می کنم که در Smashing Magazine موجود است!

2. جایگزین کردن سازه در (Built-In) اسکریپت با غیر فعال کردن ثبت آنها

اگر ناچار باشید، می توانید از نسخه های اسکریپت ها به جای سازه ها استفاده کنید. استفاده از جدیدترین نسخه ی jQuery کار متداولی است(هر چند نه لزوما خوب)، که می تواند به صورت زیر انجام شود.

function my_scripts_method() {
	wp_deregister_script( 'jquery' );
	wp_register_script( 'jquery', get_template_directory_uri() . '/js/jquery-new.js');
	wp_enqueue_script( 'jquery' );
}
add_action('wp_enqueue_scripts', 'my_scripts_method');

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

3. فشرده کردن تصاویر JPG ایده آل

این یک مثال کلاسیک است که چرا کار کردن در یک تیم مفید است. دوست خوب من Lars، به من گفت که وردپرس به منظور حفظ فضا و پهنای باند، برای تصاویر ارائه شده در وب سایت، کیفیت 100٪ استفاده نمی کند. او البته به من یک راه حل نشان داد:

add_filter( 'jpeg_quality', 'smashing_jpeg_quality' );
function smashing_jpeg_quality() {
	return 100;
}

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

4. ریدایرکت خوراک به فیدبرنر

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

add_action( 'template_redirect' , 'smashing_rss_redirect');
function smashing_rss_redirect() {
	if ( is_feed() AND !preg_match( '/feedburner|feedvalidator/i', $_SERVER['HTTP_USER_AGENT'] ) ){
		header( 'Location: http://feeds.feedburner.com/my_smashing_feed' );
		header( 'HTTP/1.1 302 Temporary Redirect' );
	}
}

5. استفاده از توابع طبقه بندی عمومی

تعدادی از توابع طبقه بندی می توانند هم طبقه بندی های سفارشی شما را انجام دهند و هم تگ های سازه ها و دسته بندی ها را اداره کنند. مرجع توابع مستندات، شامل لیست کاملی از توابع طبقه بندی می شود. من به طور ویژه دوست دارم که از get_term() ، get_terms() و wp_get_object_terms() استفاده کنم. برای منطبق کردن بیشتر چیزها، تا اندازه ای که می توانم از این توابع استفاده می کنم، حتی برای تگ ها و دسته ها.

6. تنظیم و راه اندازی Sessions در وردپرس

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

add_action( 'init', 'smashing_session_start' );
function smashing_session_start() {
	if ( !session_id() ) {
		session_start();
	}
}

توجه داشته باشید که، در حالی که Sessions ها به طور کلی بسیار امن هستند، چک کردن IP و یا اضافه کردن حفاظت nonce را برای امنیت بیشتر انجام دهید. هر چند، اگر با اطلاعات غیر حساس کار می کنید، جای نگرانی نخواهد بود. برای اطلاعات بیشتر به مقاله ی عالی Mark Jaquith در موردnonces مراجعه کنید.

7. لیست کردن تمام توابع هوک شده

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

function list_hooked_functions($tag=false){
	global $wp_filter;
	if ($tag) {
		$hook[$tag]=$wp_filter[$tag];
		if (!is_array($hook[$tag])) {
			trigger_error("Nothing found for '$tag' hook", E_USER_WARNING);
			return;
		}
	}
	else {
		$hook=$wp_filter;
		ksort($hook);
	}
	
	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>';
	return;
}


بدون هیچ استدلالی مورد استفاده قرار می گیرد، شما یک لیست خوب از تمام توابع هوک شده را دریافت خواهید کرد. این کار کمی طولانی خواهد بود، بنابراین می توانید برای کمی محدود کردن لیست یک قلاب مشخص کنید. این امر به طور ویژه در هنگام رفع مشکل و یا در زمان اولویت بندی قلاب ها، مورد استفاده قرار میگیرد. دانستن اینکه چه چیزی و چگونه به wp_head() قلاب شده است، مهم است، و این تابع یک دارایی بزرگ است!

8. اضافه کردن تگ های پاراگرافی به هر چیزی به طور خودکار

وردپرس این کار را به طور خودکار در مورد محتوا و گزیده ها انجام می دهد، اما هیچ دلیلی وجود ندارد که آن را در جاهای دیگری استفاده نکنیم. تابعی که مسئول تبدیل کردن دو خطی به پاراگراف است، wpautop() است.

$my_text = 'خوش آمدید!
در همیار وردپرس یک عالمه وقت و فرصت برای یادگیری وردپرس دارید';

echo wpautop( $my_text );


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

remove_filter( 'the_content', 'wpautop' );
remove_filter( 'the_excerpt', 'wpautop' );

9. ارسال ایمیل با استفاده از وردپرس

کمی قبل، من یک مقاله طولانی در باره ی “ایجاد ایمیل های عالی برای وب سایت وردپرس شما” نوشتم که بخشی از آن باید با تابع wp_mail() کار کند. این توابع به شما اجازه می دهد که از سازه ها برای ارسال ایمیل به کاربران استفاده کنید.

$message = 'سلام ! باتشکر از اینکه خواننده پست من بودی , امیدوارم باز هم به ما سر بزنی.';
wp_mail( 'someonesemail@example.com', 'تشکر بابت خواندن پست!', $message);

شما همچنین می توانید محتوای HTML را با استفاده از یک فیلتر ارسال کنید:

add_filter ("wp_mail_content_type", "smashing_mail_content_type");
function smashing_mail_content_type() {
	return "text/html";
}

10. لینک های صفحه گذاری بومی

در حدود شش ماه پیش بود که متعجبانه متوجه شدم که برای انجام صفحه بندی مناسب به هیچ افزونه ای نیاز نداریم (یعنی، نه فقط برای لینک های “Previous” و “Next”)، می توانید این کار را با یک تابع بومی انجام دهید. تابع paginate_links() نه فقط یک حلقه ی وردپرس است بلکه یک تابع کوچک و مفید است که به شما اجازه می دهد تا برای هر نوع محتوایی صفحه بندی نشان دهید.

// Pagination for a WordPress loop
$list = new WP_Query( $query_args );
$pagination = array(
	'base'       => str_replace( 99999, '%#%', get_pagenum_link( 99999 ) ),
	'format'     => '?paged=%#%',
	'current'    => max( 1, get_query_var( 'paged' ) ),
	'total'      => $list->max_num_pages,
	'next_text'  => 'next',
	'prev_text'  => 'previous'
);
echo '<div class="pagination primary-links">' . paginate_links( $pagination ) . '</div>';

// Pagination for anything
$list = range(1, 100);
$items_per_page = 12;
$pagination = array(
	'base'       => get_bloginfo( 'url' ) . '/mypage/%_%',
	'format'     => '?paged=%#%',
	'current'    => $_GET['current_page'],
	'total'      => ceil( max($list) / $items_per_page ),
	'next_text'  => 'go forth',
	'prev_text'  => 'go back'
);
echo '<div class="pagination primary-links">' . paginate_links( $pagination ) . '</div>';

11. بارگذاری آسان فایل ها

وردپرس برای همه چیز، گرفته از چک کردن نوع فایل تا پیدا کردن فهرست بارگذاری، تعدادی توابع بارگذاری بسیار عالی دارد. نا مفهوم ترین تابع، تابع wp_upload_bits() است، که می توانید برای بارگذاری یک فایل در فهرست بارگذاری استفاده کنید.

$upload = wp_upload_bits( $_FILES['myfile']['name'], null, file_get_contents( $_FILES['myfile']['tmp_name'] ) );
echo 'به خوبی آپلود شد! مسیر فایل ' . $upload['file'] . ' و آدرس فایل ' . $upload['url'];

12. نمایش زمان Twitter-Like

این هم شوک دیگری بود که چند وقت پیش به من وارد شد، به ویژه اینکه این توانایی از نسخه ی 1.5 در وردپرس بوده است! اگر می خواهید به بینندگان تاریخ روز را در یک فرمت قابل خواندن توسط آدمیزاد نشان دهید، مثل “5 دقیقه پیش” یا “یک ماه پیش،” تابع human_timed_diff() را امتحان کنید.

$diff = human_time_diff( '2012-05-05 12:05:00', '2012-05-05 12:10:00' );
echo 'این توییت ارسال شده در  ' . $diff . 'پیش';

// Output: این توییت در 5 دقیقه پیش ارسال شده

13. ورود به عنوان هر کاربری

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

$user_id = 4;
	wp_set_auth_cookie( $user_id );

در هنگام استفاده از این تابع بسیار باشید که بدون تیک خوردن باقی بماند، زیرا که می تواند هر کاربری را به عنوان کاربر شماره 4 وارد سیستم کند. حتی در هنگام آزمایش، من هدف آن را مخصوصا به سمت IP خودم قرار دادم، و شاید حتی برای اطمینان بیشتر به یک رشته ی URL خاص. این بخش می گوید که با یک ایمنی مناسب، این می تواند به عنوان بخشی از اسکریپت سفارشی ورود به سیستم استفاده شود.

  رفع خطای اتصال پایگاه داده یا establishing a database connection در وردپرس

14. اضافه کردن زمینه های پروفایل های سفارشی در بخش مدیریت

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

<?php
add_action( 'show_user_profile', 'smashing_profile_fields' );
add_action( 'edit_user_profile', 'smashing_profile_fields' );

function smashing_profile_fields( $user ) { 
?>

	<h3>سایت های اجتماعی</h3>

	<table class="form-table">

		<tr>
			<th><label for="twitter">توییتر</label></th>

			<td>
				<input type="text" name="twitter" id="twitter" value="<?php echo esc_attr( get_the_author_meta( 'twitter', $user->ID ) ); ?>" /><br />
				<span class="description">نام کاربری شما در توییتر</span>
			</td>
		</tr>

		<tr>
			<th><label for="twitter">فیس بوک</label></th>

			<td>
				<input type="text" name="facebook" id="facebook" value="<?php echo esc_attr( get_the_author_meta( 'facebook', $user->ID ) ); ?>" /><br />
				<span class="description">آرس پروفایل فیس بوک</span>
			</td>
		</tr>
		
		<tr>
			<th><label for="twitter">لینک دن</label></th>

			<td>
				<input type="text" name="linkedin" id="linkedin" value="<?php echo esc_attr( get_the_author_meta( 'linkedin', $user->ID ) ); ?>" /><br />
				<span class="description">آدرس پروفایل کاربری در لینک دن</span>
			</td>
		</tr>

	</table>

<?php
}
add_action( 'personal_options_update', 'smashing_save_profile_fields' );
add_action( 'edit_user_profile_update', 'smashing_save_profile_fields' );

function smashing_save_profile_fields( $user_id ) {
	if ( !current_user_can( 'edit_user', $user_id ) )
		return false;

	update_user_meta( $user_id, 'twitter', $_POST['twitter'] );
	update_user_meta( $user_id, 'facebook', $_POST['facebook'] );
	update_user_meta( $user_id, 'linkedin', $_POST['linkedin'] );
}

15. با سهولت پاکسازی کردن URL ها

در هنگام کار با URL ها، همیشه مطمئن شوید که آنها به درستی شکل گرفته اند و هیچ گونه کاراکتر نامعتبر و یا خطرناکی را شامل نمی شوند. تابع esc_url() به شما اجازه می دهد که دقیقا این کار را انجام دهید.

$my_url = 'http://mypage.com/?awesome=true';
	$url = esc_url( $my_url );

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

16. توانمند سازی ابزارک های متنی

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

add_filter( 'widget_text', 'do_shortcode' );

17. اضافه کردن انواع Custom Post در خوراک RSS

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

add_filter('request', 'smashing_custom_feed');
function smashing_custom_feed( $vars ) {
	if ( isset( $vars['feed'] ) ) {
		$vars['post_type'] = get_post_types();
	}
	return $vars;
}

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

add_filter('request', 'smashing_custom_feed');

$post_type_list = array( 'post', 'products' );
function smashing_custom_feed( $vars ) {
	if ( isset( $vars['feed'] ) AND !isset( $vars['post_type'] ) ) {
		$vars['post_type'] = $post_type_list;
	}
	return $vars;
}

18. حلقه های وردپرس را نشکنید

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

$tmp_query = $wp_query;
query_posts('cat=5&order=ASC');
while( have_posts() ) : the_post() 
?>
	<a href="<?php the_permalink() ?>'><?php the_title() ?></a><br />
<?php
$wp_query = $tmp_query;


19. کوئری های منبع داده های سفارشی

اگر چیزی بیشتر از آنچه که پیش فرض توابع وردپرس به شما می دهد، نیاز دارید، می توانید از $wpdb ، طبقه ی پایگاه داده های وردپرس برای کوئری کردن پایگاه داده ها به طور مستقیم، استفاده کنید.

$recent_users = $wpdb->get_results( "SELECT display_name, user_registered FROM $wpdb->users ORDER BY user_registered DESC LIMIT 0,10" );

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

20. سفارشی کردن باز بینی پست وردپرس

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

// To remove revisions
define( 'WP_POST_REVISIONS', FALSE );

// To limit them
define( 'WP_POST_REVISIONS', 5 );

21. طراحی کردن نظر نویسنده

اگر می خواهید که نظر نویسنده هم ظاهر شود، به سادگی ار طبقه ی bypostauthor در CSS خود، استفاده کنید.

li.bypostauthor {
	background:#fafafa;
	color:#555;
}

22. ذخیره کردن کل صفحه ی شما در یک متغیر

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

add_action('wp_head', 'smashing_buffer_start');
add_action('wp_footer', 'smashing_buffer_end');

function smashing_buffer_start() {
	ob_start( 'smashing_callback' );
}

function buffer_end() {
	ob_end_flush();
}

function smashing_callback( $content ) {
	// Feel free to do things to the content here
	$content = str_replace( 'great', 'awesome', $content );
	echo $content;
}

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

آیا این مقاله برای شما مفید بود؟
تقریبا
خیر

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

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

دیدگاه‌های این نوشته جدید ترین ها شاخص

  1. سلام

    مفید و جالب

  2. سلام . من حسن ده دار 16 سالمه . طراح وبم . تازه وردپرس رو شروع کردم . میشه بگید چجوری میتونم از فایل جاوا اسکریپت تو وردپرس استفاده کنم ؟ طریقه فراخوانی رو بلد نیستم . میشه راهنمایی کنین . ممنون

  3. یک مشکل عجیب
    با سلام و خسته نباشید.
    من بعد اینکه یه قالب جدید نصب کردم صفحه اول قالبام بهم ریخت…الان دوباره میخوام قالب قبلیم رو داشته باشم ولی صفحه اصلی فقط مینویسه home
    لطفا کمکم کنید

  4. باید یه بار دیگه دقیق بخونمش

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

    • عالی بوووووووووود
      موفق باشید

  6. ادامه رو هم یه مقدار خوندم. راستش.. ترجمه خوبی نیست. یه سری عبارات تخصصی کاملاً عمومی و سرسری ترجمه شده. مثلاً‌ Built-In سازه ترجمه شده که اشتباهه. موارد دیگه ای هم هست که خب… خودتون پیدا کنید. : )