دوره مجازی قالب وردپرس (جلسه 23): custom post type

دسته بندی: وردپرس
زمان مطالعه: 1 دقیقه
۱۲ آبان ۱۳۹۴

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

در این جلسه خواهیم دید :

  • معرفی custom post type
  • معرفی نمونه کد وردپرس
  • پیاده سازی custom post type در قالب
:: توجه

این مطلب یک جلسه از آموزش طراحی قالب وردپرس می باشد و برای مشاهده آن باید در دوره ثبت نام کنید.

ثبت نام در آموزش طراحی قالب وردپرس

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

جلسات دوره

نظرات کاربران

محمدسجاد دباغ

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

// meta box for side in team members
function teams_prices_metabox() {
    add_meta_box(‘teams_prices_metabox’,’Enter the Side’,’teams_prices_metabox_callback’,’team’,’normal’,’high’);
}
add_action( ‘add_meta_boxes’, ‘teams_prices_metabox’ );

function teams_prices_metabox_callback( $post ) {

    wp_nonce_field( ‘teams_prices_metabox_nonce’, ‘teams_prices_nonce’ ); ?>

    <form action="" method="post">

        <?php
        $side      = get_post_meta( $post->ID, ‘teams-Side’, true );
        ?>

        <p>
            <input type="text" name="teams_Side" value="<?php echo $side ?>" />
            <label for="teams_Side"><?php _e(‘Side’ ); ?></label><br/>
        </p>

    </form>

<?php }


function teams_prices_save_meta( $post_id ) {

    if( !isset( $_POST[‘teams_prices_nonce’] ) || !wp_verify_nonce( $_POST[‘teams_prices_nonce’],’teams_prices_metabox_nonce’) )
        return;

    if ( !current_user_can( ‘edit_post’, $post_id ))
        return;


    if ( isset($_POST[‘teams_Side’]) ) {
        update_post_meta($post_id, ‘teams-Side’, sanitize_text_field($_POST[‘teams_Side’]));
    }

}
add_action(‘save_post’, ‘teams_prices_save_meta’);


// meta box for links team members
function teams_links_prices_metabox() {
    add_meta_box(‘teams_links_prices_metabox’,’Enter the Links’,’teams_links_prices_metabox_callback’,’team’,’normal’,’high’);
}
add_action( ‘add_meta_boxes’, ‘teams_links_prices_metabox’ );

function teams_links_prices_metabox_callback( $post ) {

    wp_nonce_field( ‘teams_links_prices_metabox_nonce’, ‘teams_links_prices_nonce’ ); ?>

    <form action="" method="post">

        <?php
        $link_facebook      = get_post_meta( $post->ID, ‘link-facebook’, true );
        ?>

        <p>
            <input type="text" name="link_facebook" value="<?php echo $link_facebook ?>" />
            <label for="link_facebook"><?php _e(‘Side’ ); ?></label><br/>
        </p>

    </form>

<?php }


function teams_links_prices_save_meta( $post_id ) {

    if( !isset( $_POST[‘teams_links_prices_nonce’] ) || !wp_verify_nonce( $_POST[‘teams_links_prices_nonce’],’teams_links_prices_metabox_nonce’) )
        return;

    if ( !current_user_can( ‘edit_post’, $post_id ))
        return;


    if ( isset($_POST[‘link_facebook’]) ) {
        update_post_meta($post_id, ‘link-facebook’, sanitize_text_field($_POST[‘link_facebook’]));
    }

}
add_action(‘save_post’, ‘teams_links_prices_save_meta’);
کیوان علی محمدی

سلام. حتما این موارد رو بررسی کنید که نام فیلد ها با نام متادیتا و مقادیر ارسالی فرم صحیح باشه و بعد از اون هم ببینید آیا قبل از تابع update_post_meta مقادیر مورد نظر به درستی وجود داره یا نه.

Masoud Azimi

در مورد Custom postها یک سوال داشتم . برا توضیح سوالم خود سایت سون لرن رو مثال میزنم.
فرض کنیم دو نوع custom post داریم : به نام tutorials و course – من چطور میتونم دروسی رو که مربوط به پست سفارسی tutorials هستند رو زیر پست سفارسی course نشون بدم؟ با تشکر.

کیوان علی محمدی

سلام می تونید با استفاده از متاباکس های سفارشی این کارو انجام بدید.کافیه در زمان نمایش مطالب tutorials در در داخل اون متاباکس سفارشی یه کوئری بزنید و لیست courses رو دریافت کنید و نمایش بدید.

kayvan rahat

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

Pcphoenix

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

کیوان علی محمدی

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

Mehdi Soli

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

کیوان علی محمدی

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

Mehdi Soli

استاد عزیز، از پاسخ شما بسیار ممنونم. می تونم بپرسم که این مبحث page template رو در کدوم جلسه بطور کامل توضیح داده اید؟ می خواستم اگه امکان داره اون رو زودتر نگاه کنم

کیوان علی محمدی

عذرخواهی میکنم باید از سرفصل ها نگاه کنید. الان حضور ذهن ندارنم.

boyit

سلام آقای علی محمدی در درون کاستوم پست تایپ ها تابع the_tags قابل استفاده نیست وقتی مستندات رو هم چک میکردم گفته بود باید از ترم ها استفاده کرد ولی نتونستم به خواسته ام برسم ممنون میشم راهنمایی کنید

کیوان علی محمدی

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

boyit

اشتباه از جانب بنده بود taxonomy ای که تعریف کرده بود از نوع (شبیه به تگ) بود بهمین خاطر به اشتباه از تابع the_tags برای دسترسی به آنها استفاده میکردم که به اشتباه خودم پی بردم ، و تونستم خود تگ های کاستوم پست مورد نظرم رو فعال کنم و استفاده ببرم

mohfp

استاد من یک custom post type ساختم وقتی مطلب منتشر می کنم از اون post type با ارور Not Found بر می خورم دلیلش چیه؟؟؟
http://s6.uplod.ir/i/00828/bl04s8ox5oxb.jpg
http://s6.uplod.ir/i/00828/8w2mvpns6hx8.jpg

کیوان علی محمدی

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

mohfp

kheyli mamnoon az rahnamayitoon moshkelam hal shod

mohfp

با سلام و خسته نباشید

استاد می خواستم بدونم چرا برای include فایل coustom-post-type از get_template_directory استفاده کردید ? مگه به غیر از اول آدرسشون که get_template_directory_uri که با http شروع می شه و get_template_directory که آدرس درایو و می ده اولش تفاوتی هم هست ؟؟

کیوان علی محمدی

سلام.برای include کردن فایل های php حتما باید از مسیر استفاده بشه نه از آدرس وب. get_template_directory آدرس قالب فعال رو برای ما برمیگردونه.

کیوان علی محمدی

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

پایان زمان پشتیبانی

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

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

نیاز به لاگین

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