10 هک و کد کاربردی برای حرفه ای کردن خوراک rss وردپرس

۱۰ هک و کد کاربردی برای حرفه ای کردن خوراک rss وردپرس

rss, feed یا به عبارتی خوراک سایت ابزاری برای دنبال کردن مطالب سایت ها و وبلاگ ها می باشد. قبل از اینکه google reader از بین برود کاربران زیادی از طریق rss محتوای جدید سایت ها را دنبال می کردند اما پس از نابودی گودر کاربران به سرویس های دیگری مثل feedly پناه آوردند که تا حدودی شبیه به گودر بودند. به هر حال rss سایت ها هنوز هم طرف داران خاص خودش را دارد که تعدادشان نیز کم نیست به همین دلیل با اهمیت دادن به خوراک سایت خود می توانید کاربران بیشتری را جذب کنید. در ادامه این مطلب از سری مطالب هک و کد وردپرس سایت روکش با ما همراه باشید تا با ۱۰ هک و نکته کاربردی که می توانند خوراک rss سایت شما را متحول کنند آشنا شوید.

۱. افزودن تصویر شاخص به خوراک RSS وردپرس

در حالت پیشفرض خوراک اکثر سایت ها به صورت متنی می باشند. وجود متن تنها می تواند کاربر را از خواندن تمامی محتوای آن مطلب منصرف کند. اما اگر تصویری برای هر مطلب در نظر گرفته شود, باعث می شود تا کاربر سریعتر با مطلب ارتباط برقرار کند و تشویق به خواندن ادامه مطلب شود. RSS پیشفرض سیستم مدیریت محتوای وردپرس نیز به صورت متنی می باشد, برای اینکه در feed وردپرس نوشته ها دارای تصویر شوند ما می توانیم از تصاویر شاخص استفاده کنیم. به این صورت که تصاویر شاخصی که برای مطالب قرار می دهیم را در rss نیز درج نماییم. برای این کار تنها کافی است تا کد زیر را در فایل فانکشن قالب فعلی یا افزونه اختصاصی سایت خود قرار دهید.

function rokesh_post_thumbnail_feeds($content) {
    global $post;
    if(has_post_thumbnail($post->ID)) {
        $content = '<div>' . get_the_post_thumbnail($post->ID) . '</div>' . $content;
    }
    return $content;
}
add_filter('the_excerpt_rss', 'rokesh_post_thumbnail_feeds');
add_filter('the_content_feed', 'rokesh_post_thumbnail_feeds'); 

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

۲. ایجاد تاخیر در انتشار مطالب در خوراک RSS وردپرس

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

* /**
* * puplish the content in the feed later
* * $where ist default-var in WordPress (wp-includes/query.php)
* * This function an a SQL-syntax
* */
* function publish_later_on_feed($where) {
* global $wpdb;
*
* if ( is_feed() ) {
* // timestamp in WP-format
* $now = gmdate('Y-m-d H:i:s');
*
* // value for wait; + device
* $wait = '5'; // integer
*
* // http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_timestampdiff
* $device = 'MINUTE'; //MINUTE, HOUR, DAY, WEEK, MONTH, YEAR
*
* // add SQL-sytax to default $where
* $where .= " AND TIMESTAMPDIFF($device, $wpdb->posts.post_date_gmt, '$now') > $wait ";
* }
* return $where;
* }
*
* add_filter('posts_where', 'publish_later_on_feed');

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

۳. افزودن المان های مختلف به خوراک RSS

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

<?php
function insertAds($content) {
    $content = $content.'<hr /><a href="http://www.rokesh.ir">به روکش بازگردید</a><hr />';
    return $content;
}
add_filter('the_excerpt_rss', 'insertAds');
add_filter('the_content_rss', 'insertAds');
?>

برای مثال ما در اینجا کد html زیر را قرار دادیم که شما می توانید آن را به هرچیزی که دوست داشتید تغییر دهید.

<hr /><a href="http://www.rokesh.ir">به روکش بازگردید</a><hr />

۴. محروم کردن انتشار مطالب یک دسته در rss وردپرس

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

function myFilter($query) {
    if ($query->is_feed) {
        $query->set('cat','10'); //Don't forget to change the category ID =^o^=
    }
return $query;
}

add_filter('pre_get_posts','myFilter');

کد بالا را باید در فایل فانکشن قرار دهید. برای تعیین دسته یا دسته هایی که می خواهید از rss حذف شوند هم باید ID آن دسته را به جای عدد ۱۰ وارد کنید. برای تعیین چند دسته هم می توانید از کاما در بین آنها استفاده کنید.

۵. ساخت پست هایی اختصاصی برای مشترکین rss وردپرس

اگر دوست دارید برخی از مطالب را تنها به مشترکین rss سایت خود نشان دهید (مثلا برای افزایش تعداد مشترکین یا اطلاع دادن خبری به آنها) نیاز به ساخت یک دسته دارید که آن مطالب را در آن دسته منتشر کنید و ID آن دسته را در کد زیر قرار دهید.

// show post thumbnails in feeds
function diw_post_thumbnail_feeds($content) {
	global $post;
	if(has_post_thumbnail($post->ID)) {
		$content = '<div>' . get_the_post_thumbnail($post->ID) . '</div>' . $content;
	}
	return $content;
}
add_filter('the_excerpt_rss', 'diw_post_thumbnail_feeds');
add_filter('the_content_feed', 'diw_post_thumbnail_feeds');

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

۶. استفاده از فید سایت های دیگر

این تکه کد سودمند از تجزه کننده فید وردپرس برای نمایش فید یک سایت دیگر در فید سایت شما استفاده می کند.

http://www.wprecipes.com/how-to-display-any-rss-feed-on-your-wordpress-blog

۷. نمایش میانگین خوانندگان خوراک وردپرس توسط Feedburner

اگر شما هم از Feedburner برای خوراک rss سایت خود استفاده می کنید باید به این نکته توجه داشته باشید که در آیکن قیدبرنر تعداد خوانندگان یک روز قبل خوراک سایت شما نشان داده می شود, اما اگر می خواهید میانگین خوانندگان در ۷ روز گذشته را نشان دهید این هک می تواند به شما کمک کند. کد زیر را در فایل functions.php قالب قرار دهید.

function get_average_readers($feed_id,$interval = 7){
	$today = date('Y-m-d', strtotime("now"));
	$ago = date('Y-m-d', strtotime("-".$interval." days"));
	$feed_url="https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=".$feed_id."&dates=".$ago.",".$today;
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_URL, $feed_url);
	$data = curl_exec($ch);
	curl_close($ch);
	$xml = new SimpleXMLElement($data);
	$fb = $xml->feed->entry['circulation'];

	$nb = 0;
	foreach($xml->feed->children() as $circ){
		$nb += $circ['circulation'];
	}

	return round($nb/$interval);
}

حال کد زیر را در هر جایی که می خواهید میانگین خوانندگان rss نشان داده شوند قرار دهید. توجه داشته باشید که به جای rokesh اسم feed سایت خود را وارد کنید.

<?php
$nb = get_average_readers('rokesh');
echo "I have ".$nb." RSS readers";
?>

۸. جداسازی خوراک وردپرس برای پست های سفارشی

اگر می خواهید به فید اختصاصی یک پست سفارشی لینک دهید می توانید از ساختار زیر استفاده کنید:

http://www.yoursite.com/feed/?post_type=book

همچنین می توانید خروجی فید را از یک پست سفارشی و یک دسته به شکل زیر بگیرید

http://www.yoursite.com/feed/?post_type=book&genre=romance

۹. غیر فعال کردن کامل خوراک های RSS وردپرس

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

/**
* disable RSS feed
*/
function wp_disable_feed() {
   wp_die( __('Sorry, no feeds available, return to <a href="'. get_bloginfo('url') .'">homepage</a>') );
}

add_action('do_feed', 'wp_disable_feed', 1);
add_action('do_feed_rdf', 'wp_disable_feed', 1);
add_action('do_feed_rss', 'wp_disable_feed', 1);
add_action('do_feed_rss2', 'wp_disable_feed', 1);
add_action('do_feed_atom', 'wp_disable_feed', 1);

۱۰. ساخت خوراک RSS تعریف شده

اگر شما به یک خوراک RSS دلخواه نیاز دارید, برای مثال, یک فید که فقط شامل مطالب یک سری دسته و برچسب خاص شود یا اگر تمامی خوراک های Rss را به Feedburner انتقال داده اید و می خواهید هنوز فید یک دسته بندی خاص را داشته باشید, راه کار استفاده از قالب برگه های وردپرس می باشد. کد زیر را در یک فایل به نام custom-feed.php ذخیره و آن را در فولدر قالب سایت خود قرار دهید. سپس از طریق بخش مدیریت وردپرس یک برگه جدید ایجاد کنید و آن را بدون درج محتوا ذخیره کنید, سپس custom-feed.php را به عنوان قالب آن برگه انتخاب نمایید.

<?php
/*
Template Name: Custom Feed
*/

$numposts = 5;

function rokesh_rss_date( $timestamp = null ) {
  $timestamp = ($timestamp==null) ? time() : $timestamp;
  echo date(DATE_RSS, $timestamp);
}

function rokesh_rss_text_limit($string, $length, $replacer = '...') {
  $string = strip_tags($string);
  if(strlen($string) > $length)
    return (preg_match('/^(.*)\W.*$/', substr($string, 0, $length+1), $matches) ? $matches[1] : substr($string, 0, $length)) . $replacer;
  return $string;
}

$posts = query_posts('showposts='.$numposts);

$lastpost = $numposts - 1;

header("Content-Type: application/rss+xml; charset=UTF-8");
echo '<?xml version="1.0"?>';
?><rss version="2.0">
<channel>
  <title>مطالب جدید روکش</title>
  <link>http://rokesh.ir/</link>
  <description>جدیدترین مطالب منتشر شده در وبلاگ روکش</description>
  <language>en-us</language>
  <pubDate><?php rokesh_rss_date( strtotime($ps[$lastpost]->post_date_gmt) ); ?></pubDate>
  <lastBuildDate><?php rokesh_rss_date( strtotime($ps[$lastpost]->post_date_gmt) ); ?></lastBuildDate>
  <managingEditor>info@rokesh.ir</managingEditor>
<?php foreach ($posts as $post) { ?>
  <item>
    <title><?php echo get_the_title($post->ID); ?></title>
    <link><?php echo get_permalink($post->ID); ?></link>
    <description><?php echo '<![CDATA['.rokesh_rss_text_limit($post->post_content, 500).'<br/><br/>ادامه مطلب: <a href="'.get_permalink($post->ID).'">'.get_the_title($post->ID).'</a>'.']]>';  ?></description>
    <pubDate><?php rokesh_rss_date( strtotime($post->post_date_gmt) ); ?></pubDate>
    <guid><?php echo get_permalink($post->ID); ?></guid>
  </item>
<?php } ?>
</channel>
</rss>

دیدگاه کاربران

  1. آگر امکان داره یک آموزش جامعی درباره ی این سیستم بزارید من چند بار سعی کردم اما یکم انگار پیچیده هست چند تا آموزشم بود ولی برای نسخه های قدیمی ترش بود بزارید خیلی ممنون میشم! mailchimp.com

  2. خب اگه میشه سریعتر بزارید چون من خیلی لازم دارم!

  3. مصطفی

    سلام.
    راه حلی برای آدرس فید سراغ ندارید؟ مثلا:
    site.com/myfeed
    ممنون

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

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

  6. saeedbeygi

    سلام چطور میتونم غید سایتمو بخ
    http://www.mysite.mydomin/feed
    تبدیل کنم پلاگین خاصی هست؟؟

  7. hamidp30

    ممنون بخاطر مطالب خوبتون، فقط راهی هست که با کد آخری بشه مطالب یک دسته یا برگه خاص رو نمایش داد؟

  8. mohamadjalal

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

کاربر گرامی برای ارسال دیدگاه اگر عضو روکش هستید باید سایت شوید در غیر اینصورت باید عضو شوید.