نقطه ویرگول;

هر از گاهی از هر چیزی

هر از گاهی از هر چیزی

نوشته های مرتبط در وردپرس بدون افزونه

چهارشنبه, ۳ فروردين ۱۳۹۰، ۰۲:۰۷ ق.ظ
یکی از کاربران سایت درخواست این آموزش رو کرده بودند که به دلیل سادگی و کمی وقت اضافه این آموزش رو آماده کردم تا دوستانی که نیاز دارن استفاده کنن و در ضمن می تونه یه تمرین خوب باشه برای سر و کله زدن با قالب های وردپرس. امیدوارم به دردتون بخوره. در این آموزش قصد داریم مطالب مرتبط با هر پست رو به صورت لینک در زیر پست ها به نمایش بگذاریم. برای این کار باید این آگاهی رو داشته باشید که وقتی در حال دیدن یک پست هستید در واقع فایل single.php رو فراخوانی کردید. حالا قصد دارید کجا پست های مرتبط رو نشون بدید؟
بستگی به سلیقه و قالبتون داره. من در اینجا قرار می دم:

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

ابتدا یه div با آی دی my-related-post ایجاد می کنید به این صورت:

//محل نمایش پست های مرتبط

div دومی که گذاشتیم برای اینه که تداخلی در نمایش div ها نباشه. دقت کنید که کلاس این div هم clear هستش. می ریم به فایل style.css و این کدها رو اضافه می کنیم:
#my-related-post{
border: 1px solid #ccc;
padding: 10px;
background: #eee;
}
.clear{
clear: both;
margin-bottom: 30px;
}
مرحله ی دوم:

ابتدا باید دسته بندی پست رو پیدا کنیم. برای این کار می تونید از تابع :
get_the_category()
استفاده کنید. به این صورت:
$categories = get_the_category($post->ID);
یه شرط برای دسته ها قرار می دیم و کار رو ادامه می دیم:
if ($categories) {
#ادامه ی کد
}
حالا داخل این شرط ID های دسته ها رو داخل یک آرایه قرار می دیم به این صورت:
 $category_ids = array();
داخل یک حلقه تمامی ID های دسته ها رو جایگزین می کنیم:
 foreach($categories as $category) $category_ids[] = $category->term_id;
حالا نوبت نوشتن کوئری مونه که از پایگاه داده پست هایی رو که در دسته هامون قرار دارن نشون بدیم. برای همین باید یه سری شروط رو تعریف کنیم:

 $args=array(
'category__in' => $category_ids, //پست هایی که در این دسته ها قرار دارن
'post__not_in' => array($post->ID), // این بخش برای اینه که خود پست فعلی نمایش داده نشه
'showposts'=>5, // این بخش هم تعداد پست های مرتبط رو نشون می ده
'caller_get_posts'=>1 //این بخش هم برای اینه که پست هایی رو که سنجاق شدن نشون نده
);
?>
حالا باید کوئری رو ارسال کنیم و نتیجه رو بگیریم. به این صورت:
 $my_query = new wp_query($args);
دوباره یه شرط قرار می دیم که اگه پستی با این شرایط وجود داشت...:
 if( $my_query->have_posts() ) {
// اگر پستی وجود داشت بقیه ی کارها رو انجام می دیم
}
فرض کنید ۴ تا مطلب مرتبط پیدا شد. حالا باید یه تگ ul چاپ کنیم:
 echo '
    ';
    // هر پست مرتبط رو به عنوان یه لیست چاپ می کنیم.
    // یعنی از li استفاده می کنیم
    echo '
'; حالا لیست رو چطوری چاپ کنیم؟ خیلی راحت :)
یه حلقه ی while کارمون رو راه می ندازه :
 while ($my_query->have_posts()) {
$my_query->the_post();
?>

  • //لینک به آدرس هر پست



  • } کارمون تموم شد. به همین راحتی :)
    در کل کد شما باید شبیه به این باشه:
     


    محل نمایش پست های مرتبط


    $categories = get_the_category($post->ID);
    if ($categories) {
    $category_ids = array();
    foreach($categories as $category) $category_ids[] = $category->term_id;

    $args=array(
    'category__in' => $category_ids,
    'post__not_in' => array($post->ID),
    'showposts'=>5, // Number of related posts that will be shown.
    'caller_get_posts'=>1
    );

    $my_query = new wp_query($args);
    if( $my_query->have_posts() ) {
    echo '

      ';
      while ($my_query->have_posts()) {
      $my_query->the_post();
      ?>

    • }
      echo '
    ';
    }
    }
    ?>

    استفاده از وردپرس به این صورت و ایجاد تغییرات به صورتی دستی و بدون استفاده از پلاگین ها باعث می شه بیشتر با قابلیت های وردپرس آشنا بشید و باهاش درگیر بشید.
    این کار خیلی کمک می کنه که وردپرس رو بشناسید.
    می تونید به راحتی براش قالب طراحی کنید و تقریبن هر ایده ای رو که بخواید روی وردپرس پیاده کنید.
    امیدوارم به دردتون خورده باشه
    ------------------------------
    پ.ن:
    در این آموزش ما از دسته ها برای نمایش پست های مرتبط استفاده کردیم. شما می تونید از برچسب ها هم استفاده کنید. برای این کار فقط کافیه بخش اول آموزش رو به این صورت تغییر بدید:
    
    $tags = wp_get_post_tags($post->ID);
    if ($tags) {
    $tag_ids = array();
    foreach($tags as $tag) $tag_ids[] = $tag->term_id;
    $args=array(
    'tag__in' => $tag_ids,
    'post__not_in' => array($post->ID),
    'showposts'=>5,
    'caller_get_posts'=>1
    );
    //ادامه ی کد ها
    ?>
    موفق باشید

    نظرات  (۱۶)

    ممنون ! جالب بود حتما به دردم خواهد خورد !
    بسیار کاربردی بود و استفاده کردم. اما یه دخواست داشتم اونم اینکه در برخی از سایت ها دیدم از یه نوع کد جاوا برای لود عکس ها و افزایش سرعت سایت استفاده می کنند. یعنی تا عکسی نمایش داده نشه و در محدوده ی نمایش مانیتور قرار نگرفته لود نمی شه . اگر میشه آموزشی هم برای این موضوع قرار بدین.
    ممنونم.
    ۰۳ فروردين ۹۰ ، ۱۵:۳۰ سایت موبایل اسکای
    اینکه شما می گین یک جکوری هست که این کار رو انجام می ده
    برای این کار افزونه وجود داره
    در ضمن اگه به نظر من حجم عکس هاتون پایین باشه و کم تعداد باشه نیازی به این مسائل ندارید چون خود این افزونه سنگین هست البته فایلش
    خیلی عالی بود
    ممنون که زحمت کشید این اموزش رو هر چه ساده تر و کامل توضیح دادین
    میشه افزونه را معرفی کنید؟ ممنون میشم ;)
    من یه مشکل دیگه هم دارم. از وقتی که این کدها را اضافه کردم دیگه کامنت ها را نمایش نمیده. وقتی کدها را حذف میکنم دوباره نمایش میده. لطفا راهنمایی کنید که دلیلش چیه ؟
    
    این تیکه کد مربوط به نمایش کامنت هاست
    اگر حذفش نکرده باشید نشون می ده کامنت ها رو
    خواهش می کنم
    کدی را که گفتید چک کردم سرجاشه. اما بازم کامنت ها نمایش داده نمی شه :( مشکل دیگه از کجا می تونه باشه ؟
    فکر نمی کنم جایی مشکلی باشه
    اگه می تونید فایل single.php رو برام ایمیل کنید تا چک کنم
    ۰۵ فروردين ۹۰ ، ۱۲:۱۶ سایت موبایل اسکای
    jQuery Image Lazy Load WP
    سلام...مثل اینکه صفحه اول سایت تون هک شده..... :)
    سپاس از تذکری که دادید
    صفحه ی اول سایت اصلاح شد
    سلام...
    از اینکه در سال جدید با وب سایت ورزین (با ارزش) شما آشنا شدم... بی نهایت خوشحالم. ;)
    پی گیر مطالب شما به خصوصی در زمینه "وردپرس" هستم.
    چطوری می تونم برای فقط زیرمجموعه بذارم ؟
    مثلا اگه دسته آموزش>فتوشاپ داشته باشیم فقط برای فتوشاپ باشه برای کل دسته نباشه .
    ممنون .
    ۰۶ آذر ۹۰ ، ۱۰:۴۷ نوشته های مرتبط در وردپرس
    [...] این کدی که در این سایت نوشته شده؟ این سایت را پیدا کردم: نوشته های مرتبط در وردپرس بدون افزونه | PHPDevelopers.ir پاسخ با نقل قول پاسخ به موضوع « [...]

    ارسال نظر

    ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
    شما میتوانید از این تگهای html استفاده کنید:
    <b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
    تجدید کد امنیتی