افزودن پست تایپ به حلقه مطالب وردپرس

افزودن پست تایپ به حلقه مطالب وردپرس

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

کل عملیات این هک، در قطعه کد کوتاه زیر خلاصه شده و باید اون رو در فایل توابع پوسته (functions.php) قرار بدید. این قطعه کد، میتونه مطالب پست تایپی با نام downloads (مربوط به افزونه EDD) رو به صفحه اصلی سایت اضافه کنه:

add_filter( 'pre_get_posts', 'my_get_posts' );
function my_get_posts( $query ) {
	if ( is_home() && $query->is_main_query() )
	  $query->set( 'post_type', array( 'post', 'download') );
	return $query;
}

حالا اگه شما این پست تایپ رو ندارید و یا اینکه میخواید پست تایپ های دیگه و یا برگه های سایت رو هم به صفحه اصلی اضافه کنید، کافیه که نام (slug) اونها رو در خط query->set قرار بدید. مثلا:

$query->set( 'post_type', array( 'post', 'page','page','gallery','movie') );

اما این هم کل ماجرا نیست! شما میتونید با اضافه کردن دستورات شرطی جدید، پست تایپ ها رو در هر جای دیگه ای هم که خواستید، نمایش بدید. مثلا: برای اضافه کردن پست تایپ ها به خوراک اصلی (feed)، باید دستور شرطی بالا رو به صورت زیر تغییر بدید:

if ( ( is_home() && $query->is_main_query() ) || is_feed() )

دیدگاه کاربران در مورد این نوشته

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

    $paged = (get_query_var('paged')) ? get_query_var('paged') : '1' ;
    $args = array(
        'post_type' => array( 'post', 'download' ),
        'paged' => $paged
         
    );
    query_posts($args);

    توسط جلیل پاسخ

  2. سلام
    خواهشا کمک کنید
    من یک پست تایپ ساختم:

    add_action('init', 'artists');
    function artists() 
    {
    	$artist_labels = array(
    		'name' => _x('Artists', 'post type general name'),
    		'all_items' => __('All Artists'),
    		'add_new' => _x('Add new artist', 'artists'),
    		'add_new_item' => __('Add new artist'),
    		'edit_item' => __('Edit artist'),
    		'new_item' => __('New artist'),
    		'view_item' => __('View artist'),
    		'search_items' => __('Search in artists'),
    		'not_found' =>  __('No artists found'),
    		'not_found_in_trash' => __('No artists found in trash'), 
    		'parent_item_colon' => ''
    	);
    	
    	$args = array(
    		'labels' => $artist_labels,
    		'singular_label' => __('Artist'),
    		'public' => true,
    		'publicly_queryable' => true,
    		'show_ui' => true, 
    		'query_var' => true,
    		'rewrite' => true,
    		'capability_type' => 'post',
    		'hierarchical' => false,
    		'menu_position' => null,
    		'supports' => array('title','editor','comments','custom-fields')
    	); 
    	register_post_type('artists',$args);
    }

    حالا چه کدی و چیکار کنم مطالبی که در این پست تایپ منتشر میشه توی سایت وردپرسی نشون میده؟

    توسط hassan پاسخ

    1. سلام. برای نمایش دادن پست تایپ ها، باید در حلقه مطالب (WP Query) پارامتر post_type رو مطابق با نوع نوشته (مثلا artists) تنظیم کنیم. مستندات بیشتر در لینک زیر:
      http://tiny.alimir.ir/B5H

      توسط علی میرزائی پاسخ

  3. روش جالبیه

    توسط دیزل ژنراتور پاسخ

  4. سلام خسته نباشید
    خیلی ممنون آموزشی خوبی بود، موفق باشید
    خدا قوت 😉

    توسط مرجع پروژه های دانشجویی پاسخ

  5. با سلام
    آیا افزونه یا کد لودینگ هست که تا زمان بارگذاری کامل صفحه محتوای سایت رو نشون نده و فقط درصد بارگذاری رو نشون بده
    من داخل سایتم با استفاده از افزونه لایر اسلایدر یه اسلاید گذاشتم که ی مدت طول میکشه تا کاملا لود بشه برای همین می خوام بعد از لود کامل سایت اونو نمایش بده.
    من از افزونه ی loading page استفاده کردم و تا ی حدی جواب داد ولی باز هم کافی نیست (یعنی لود کامل اسلایدر 5 ثانیه طول میکشه ولی این افزونه تا 3 ثانیه صبر می کنه)البته یه لودینگ تو سایت http://amniran.org دیدم .منم می خوام لویدینگم به همین شکل باشه یعنی بعد از لود شدن کامل سایت صفحه ی لود شدن کنار بره.

    با تشکر

    توسط milad پاسخ

  6. سلام داش علی
    خسته نباشید . واقعا آدم لذت می بره از دیدن همچین سایت پرمحتوا و زیبایی. بهتون تبریک میگم
    فقط اگر فونت قسمت نظرات رو قسمت سایدبار و همچنین توضیحات در مورد خودتون رو از 17px به 18px افزایش بدین چشم من حقیر کمتر خسته میشه. اخه یکم تار دیده میشه
    جسارت بنده رو ببخشید. جهت بهبود سایت جسارت کردم. مانا باشید و ماندگار

    توسط حمید پاسخ

    1. سلام حمید جان. اختیار داری داداش، اینجا سایت خودتون و منم حتما به این مسأله رسیدگی میکنم {گل}

      توسط علی میرزائی پاسخ

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

        توسط حمید داراب پور پاسخ

        1. سلام حمید جان، میبخشی این چند روز یخورده سرم شلوغ بود! همین الآن سایزها رو تغییر دادم، اما تو این فکرم که یه دکمه ساده بذارم که با استفاده از اون کاربران بتونند سایز فونت ها رو خودشون تغییر بدن. نظر مثبتت چطوره؟!؟! 😉
          فونت بی یکان هم خیلی خوبه و من تو وردپرس پرمیوم (premiumwp.ir) از این فونت استفاده کردم، منتها اگه الآن بخوام فونت رو تغییر بدم، باید فونت سایز بخش های زیادی رو تغییر بدم که یخورده وقت گیره! ولی حتما در نسخه های آینده، روی این مورد هم کار میکنم 😉

          توسط علی میرزائی پاسخ

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

            حالا وقت نمیکنی فایلش رو بدی من برات اوکی میکنم. البته اگه جسارت نباشه .

            توسط حمید داراب پور

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