campaign-Ghorban-to-Ghadir

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



visibility  
mode_comment   ۵۶

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

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

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

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

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

comment دیدگاه کاربران
مصطفی فدائی replyپاسخ

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

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

سلام چشم حتما. در جلسه های بعدی مورد بررسی قرار میدیم.

majid zare replyپاسخ

با عرض پوزش فایل سالم بود

Ali Reza Bayani replyپاسخ

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

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

سلام ممنون از تذکر شما. حتما.

حمید رضا مصطفی زاده replyپاسخ

سلام استاد
تا اینجای کار که نیاز چندانی به php نبود که شما زمان ثبت نام به دوستان توصیه میکردید پیشنیاز هست.به بعدش هم غالب وردپرس در همین حد نیاز به php داره؟
یه سوال دیگه قسمت های main-content این جلسه رو بهتر نبود به علت تکراری بودن همش رو در داخل حلقه بگذاریم؟
تشکر

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

سلام بهتره عجله نکنید. فعلا دوره مونده و مطالب زیادی هست که به php نیاز داره. جلسه 25 ام از فایل های loop استفاده کردیم.

reza_yki replyپاسخ

سلام میشه بگید برای یک custom post type مثلا قالب میشه زیر دسته هم داشت مثل تجاری و رایگان

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

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

reza_yki

ممنون
واقعا با استادی مثل شما برخورد کردن موهبتی بود که نصیب من شد
بازم سپاس

darin replyپاسخ

سلام و خسته نباشید خدمت استاد گرامی
استاد در هنگام اضافه کردن یک custom post type چگونه میتوان به custom post type قابلیت دسته بندی را افزود؟
یعنی محتوای کاستوم پست تایپ را دسته بندی کرد

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

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

'taxonomies' => array('category')

darin

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

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

بله شما جلسه custom taxonomy رو مشاهده کنید جواب سوالتون رو پیدا می کنید.

mehdi karimi replyپاسخ

استاد چه جوری میشه یک مطلب که پست تایپ مثلا دانلود داره رو به نوشته های معمولی یا یک پست تایپ دیگه منتقل کرد ؟

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

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

Keivan Shalileh replyپاسخ

استاد میخام یک custom post type علاوه بر این داشته باشم مثلا با عنوان بسته های آموزشی . به کدوم کد اضافه کنمش؟
به add_action یک پارامتر جدید باید بدم یا اینکه یک add_action جدید باید بنوسیم تو فایل custom post type؟

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

سلام می تونید توی همون تابع اصلی که باهاش دانلود و ایجاد کردیم کدهاش رو کپی کنید و فقط پارامتر های رو تغییر بدین.

هادی مصلی نژاد replyپاسخ

سلام استاد
چطوری میشه در custom post type ها به جز باکس های پیش فرضی که در فایل custom _post _type.php در قسمت support تعیین شده است باکس های دیگری مثل برچسب ها و … اضافه کرد؟

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

سلام با استفاده از meta box ها که در دروه آموزش کامل این مورد رو قرار دادیم.

هادی مصلی نژاد replyپاسخ

سلام ، شما در در آموزشتون یک متاباکس اختصاصی برای اسلایدر طراحی کردید ، درست ، من منظورم اینه که آیا در قسمت ‘ supports’ => array( ‘title’, ‘editor’, ‘author’, ‘thumbnail’, ‘excerpt’, ‘comments’ )
به جز این پارامترها ، پارامتر پیش فرض دیگری هم وجود داره که با اضافه کردن در همین قسمت در post type ها نمایش داده شود نه اینکه به صورت اختصاصی طراحی کنیم ، مثلا من میخوام برچسب ها که یک متاباکس پیش فرض در وردپرس هست و در نوشته ها نمایش داده میشود در قسمت دانلودها هم داشته باشم.

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

سلام این موارد به صورت سفارشی قابل پیاده سازی نیستن و در واقع supports یک alias برای تابع add_post_type_support هستش. در این لینک می تونید تمام موارد قابل استفاده رو ببینید. برای اضافه کردن taxonomy های سفارشی باید در بخش taxonomies اسم اونارو اضافه کنید تا به پست تایپ جدید اضافه بشن.

هادی مصلی نژاد replyپاسخ

سلام استاد ، آیا میشه برای قسمت رسانه ها در ورپرس یک custom post سفارشی ایجاد کرد برای دسته بندی کردن تصاویر و …؟

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

سلام ب این شکل نه نمیشه این کارو کرد. می تونید یک کاستوم پست بسازید و کاستوم باکس هایی براش قرار بدید که از uploader وردپرس استفاده شده.

mostafash replyپاسخ

استاد سلام و خسته نباشید.
استاد من یک custom post بنام education ایجاد کردم و میخام مطالبی که در این custom post منتشر کردم رو صفحه بندی کنم.راهنمایی میفرمایید به چه صورت انجام بدم.لازم به ذکر هست که من همین الان post ها رو براحتی صفحه بندی کردم ولی custom post رو نمیتونم دسته بندی کنم.اگه کدی برای آن دارین ممنون میشم در اختیارم قرار بدین.باتشکر

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

سلام با تابع wp_paginate_links می تونید هر نوع محتوایی رو صفحه بندی کنید.

amir baragy replyپاسخ

با سلام خدمت استاد محترم
مگر برای معرفی style ها و script ها از تابع get_template_directory_uri استفاده نمیکردیم ؟ نمی شد برای معرفی style اسلایدر هم از همین تابع برای معرفی استفاده می کردیم؟
این پرسش مربوط به قسمت 22 میباشد.
با تشکر

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

این تابع فقط آدرس http پوشه قالب رو میگردونه و ما ازش برای مشخص کردن آدرس اون فایل ها استفاده می کنیم. برای ثبت و نمایش استایل ها و script ها باید از wp_register_* و wp_enqueue_* استفاده کرد.

amir baragy

ممنونم استاد.

amir baragy replyپاسخ

سلام خدمت استاد گرامی
چه طور وردپرس متوجه میشه که UL , li و های ما را نمایش بدهد درحالی که ما آنها را کامنت و پاک کرده ایم؟
آیا توسط تابعwp_nav_menu هست که این کار رو انجام میده؟ اگر جواب بله هست. یه کم راهنماییم کنین.
………………………………………………………………………………………………………
استاد یه سوال دیگه!
نمیشه همون موقع که داریم style سایت رو می نویسیم زیر منو هم براش قرار بدیم که دیگه در وردپرس براش زیر منو تعریف نکنیم، فقط اون زیر منو ها رو به وردپرس بشناسونیم.
آخه من یه جا شنیدم که اگر طراح زیرمنو تعریف نکرده باشه نمیتونیم در وردپرس زیرمنو داشته باشیم.
………………………………………………………………………………………………………
thank you

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

منظورتون از کامنت کردن رو متوجه نمیشم.

حمید حسینی تبار replyپاسخ

سلام کد زیر رو نوشتم توی قالب ولی مقدار src رو با کد php بهش میدم

<source src="” type=”audio/mp3″ />

لینک رو هم بخوبی میاره ولی چرا پخش نمیکنه؟
همون لینک رو از inspect المنت میارم توی ی مرورگر میذارم و جواب میده
آیا نکته خاصی داره ؟

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

سلام لینکتون به صورت آدرس کامل هست؟ خروجی کد رو همین جا قرار بدین.

Hoom@n replyپاسخ

سلام به جناب مهندس علی محمدی

من در ایجاد custom post type به مشکلی بر خوردم که دیروز براتون شرح اون رو بصورت کامل ایمیل کردم. اگه امکان داره چک کنید و پاسخ من رو بدید چون مربوط به یک سفارشه که باید تحویل بدم و داره از موعدش میگذره.
ضمناً چیزی که من بعد همه جور بررسی فهمیدم اینه که مشکل مربوط به تنظیماتی هست که phpstorm بصورت خودکار ایجاد میکنه رو پروژه ها. چون من قالب شما رو بصورت تستی در یک وردپرس دیگه باز کردم و پست تایپ دانلود به خوبی کار میکرد و مشکلی نبود. اما به محض اینکه قالب شما رو برای تست به پروژه خودم در phpstorm اضافه کردم برای قالب شما هم همین مشکل به وجود اومد و تمامی فایلهایی که در Functions خودتون Include کرده بودین به همین مشکل دچار شدن. نمیدونم چه تغییراتی در فایلهای پروژه من انجام داده که پروژه رو به وردپرس جدید هم منتقل میکنم فایده نداره و حتی اگه وردپرس جدید رو با phpstorm هم باز نکنم همین مشکل توش وجود داره.
ممنون میشم اگه زودتر راهنمایی کنید. ضمناً لازم به ذکر هست که من هیچ تغییری در تنظیمات phpstorm انجام ندادم و با همون تنظیمات اولیه که از زمان نصب روش بوده داره کار میکنه.

Hoom@n replyپاسخ

سلام مجدد به جناب مهندس علی محمدی
من phpstorm رو در یه سیستم دیگه نصب کردم و پروژه جدیدی در اون تعریف کردم و ابتدا یک سری فایلهای مشابه پروژه اول رو بصورت خالی (بدون محتوای کد) درون اون ساختم و بعد کدهای تک تک فایلها رو از پروژه اول Copy کردم و درون فایلهای مشابه در پروژه جدید Paste کردم و مشکل برطرف شد. بعد phpstorm سیستم اولم رو که مشکل از اون بود uninstall کردم و مجدداً install کردم و بعد برای تست پروژه رو به سیستم قبلی برگردوندم و با phpstorm جدید پروژه رو باز کردم و بعد در مرورگر اجرا گرفتم و هیچ مشکلی وجود نداشت و همه چیز درست شد.
اما بالاخره نفهمیدم مشکل از چه چیزی بود و phpstorm قبلی چه تنظیماتی روی پروژه اعمال کرده بود که این مشکل به وجود اومده بود.
به هر حال مشکل برطرف شد و خواستم بهتون اطلاع بدم که به زحمت نیفتید.

سلامت، سربلند و پیروز باشید.

neda replyپاسخ

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

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

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

mohfp replyپاسخ

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

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

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

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

mohfp replyپاسخ

استاد من یک 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

boyit replyپاسخ

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

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

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

boyit

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

Mehdi Soli replyپاسخ

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

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

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

Mehdi Soli

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

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

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

Pcphoenix replyپاسخ

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

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

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

kayvan rahat replyپاسخ

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

Masoud Azimi replyپاسخ

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

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

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

محمدسجاد دباغ replyپاسخ

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

// 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 مقادیر مورد نظر به درستی وجود داره یا نه.

ارسال نظرات

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