פוסט טייפ בוורספרס
וורדפרס מאפשרת לנו ליצור סוגים שונים של תוכן בהתאמה אישית, זה נקרא פוסט טייפ, למה זה טוב לדוגמא אם יש לי אתר למכוניות ואני רוצה להוסיף חוץ מהפוסטים הרגילים שיש לי גם מכוניות ושיחולקו לקטגוריות : סובארו מאזדה ושיהיה גם לכל מכונית קטגורית צבע וכו.. אז אני יוצר פוסט טייפ ומוסיף לו טקסונוניות שהם צבע וסוג מכונית, דוגמא נפוצה לזה היא החנות ווקומרס שבעצם יש לנו מוצרים קטגוריות וכו…
טוב נתחיל ללמוד איך יוצרים פוסט טייפ חדש.
יש לדעת שאחרי הוספת הפוסט טייפ יש צורך לדאוג גם לתצוגת המידע באתר .
נתחיל עם קוד דוגמא ונסביר:
add_action( 'init', 'create_post_type' );
function create_post_type() {
register_post_type( 'acme_product',
array(
'labels' => array(
'name' => __( 'Products' ),
'singular_name' => __( 'Product' )
),
'public' => true,
'has_archive' => true,
)
);
}
מה יש לנו פה :
שורה ראשונה אקשיין שפועל באיתחול ומפעיל את הפונקציה create_post_type
בתוך הפונקציה יש לנו
register_post_type
שבעצם יוצר פוסט טייפ
בשורה הראשונה אני נותן לפוסט טייפ שם, השם חשוב כדי שאחר כך נוכל בתצוגה לסנן על פיו, אם שחכתם את השם לא צריך לחפש בקוד פשוט תכנסו ללוח בקרה ותראו בכתובת את השם
/wp-admin/edit.php?post_type=acme_product
אחר כך יש שם מערך array שבו נמצאות כל מיני הגדרות:
שחקו עם ההגדרות תבינו מה כל אחד עושה.
תצוגת המידע : בלולאה הידועה של וורדפרס
$args = array( 'post_type' => 'acme_product', 'posts_per_page' => 10 ); $loop = new WP_Query( $args ); while ( $loop->have_posts() ) : $loop->the_post(); the_title(); echo '<div class="entry-content">'; the_content(); echo '</div>'; endwhile;
אפשר להציג גם דברים אחרים ולא רק את התוכן content
אם למשל יצרנו עוד טקסונומיות לפוסט טייפ ניתן להציג מידע עליהם עם הפוקנציה הזאת :
get_custom_terms
menu_position
מאפשר לקבוע איפה יוצג התפריט .
- 5 – below Posts
- 10 – below Media
- 15 – below Links
- 20 – below Pages
- 25 – below comments
- 60 – below first separator
- 65 – below Plugins
- 70 – below Users
- 75 – below Tools
- 80 – below Settings
- 100 – below second separator
אני אוהב את הדוגמא של הספרים בקודקס
כיתוב מותאם אישית לפוסט טייפ
'labels' => array(
'name' => 'אירועים',
'singular_name' => 'אירוע',
'add_new' => 'הוסף אירוע חדש',
'add_new_item' => 'הוסף אירוע חדש',
'edit' => 'ערוך אירוע',
'edit_item' => 'ערוך פרטי אירוע',
'new_item' => 'אירוע חדש',
'view' => 'ראה',
'view_item' => 'ראה אירוע',
'search_items' => 'חפש אירוע',
'not_found' => 'אין תוצאות',
'not_found_in_trash' => 'אין תוצאות בפח',
'parent' => 'Parent avto'
),
בארגומנטים מוסיפים את זה משנים שם את השמות לפי מה שמתאים
הוספת טקסונומיות ( קטגוריות וכו…)
register_taxonomy(
'place',
'event',
array(
'label' => __( 'place' ),
'rewrite' => array( 'slug' => 'place' ),
'hierarchical' => true,
)
);
הוספתי לפוסט טייפ שנקרא event טקסונומיה בשם place
יצירת עמוד מותאם לפוסט טייפ
יוצרים עמוד שהשם שלו הוא בסגנון הזה
single-{your post type}.php
במקום your post type כותבים כמובן את שם הפוסט טייפ שלכם והוורדפרס ידע לכוון לעמוד הזה במקום עמוד הפוסטים הרגיל.
הוספת שדות נוספים לטקסונומיות
טוב אז הבנו ( מקווה שהבנתם) מזה טקסונומיה ומזה פוסט טייפ, ואיך יוצרים אותם ע"י קוד, עכשיו אנחנו רוצים להוסיף לטקסונומיות ( בתוך הטקסונומיות) עוד שדות אפשר לעשות את זה עם ההוק
do_action( "{$taxonomy}_edit_form_fields", object $tag, string $taxonomy )
ההוק הזה מופעל כשהטקסונומיה מוצגת
במקום {$taxonomy} רושמים את השם של הטקסונומיה שאתם רוצים שהוא יופעל בה.
דוגמא:
למשל יש לי טקסונומיה שנקראת makers_cars
add_action('makers_cars_edit_form_fields', 'makers_cars_fields_form');
ובפונקציה אני יכול לרשום את זה למשל:
<?php
function makers_cars_fields_form($tag){
$t_id = $tag->term_id;
$cat_meta = get_option("$t_id");
?>
<tr class="form-field">
<th scope="row" valign="top"><label for="extra1">מדינת יצרן</label></th>
<td>
<input type="text" name="ManufacturCountry[cat_title]" id="ManufacturCountry[cat_title]" size="25" style="width:60%;" value="<?php echo
$cat_meta['cat_title'] ? $cat_meta['cat_title'] : ''; ?>"><br />
<span class="description"><span class="description">שם מדינת יצרן</span></span>
</td>
</tr>
<?php
}
לוקח מידע מטבלה options אם קיים ומציג
שמירת תוכן השדות הנוספים של הטקסונומיה ב DB
כמובן שאחרי הצגה צריך לשמור את השדות ב DB בדוגמא השתמשנו בטבלה option שיש פונקציות מובנות לגביה, כדי לשמור את השדות אז ניתן להשתמש בעוד הוק
do_action( "edited_{$taxonomy}", int $term_id, int $tt_id )
בדוגמא שלנו
add_action('edited_makers_cars', 'makers_cars_fields_save');
ורושמים פונקציה ששומרת את השדות.
— ניתן גם להיעזר בפלאגין acf Advanced Custom Fields
סרטון ביוטיוב על פוסט טייפ למפתחים
באגים ותיקונם
בנסיון כניסה לפוסט טייפ מקבלים דף לא קיים
להכניס את הקוד הזה ביצירת הפוסט טייפ
flush_rewrite_rules( false );
אי אפשר להשתמש בשמות לפוסט טייפ הבאים כי הם כבר תפוסים
- post
- page
- attachment
- revision
- nav_menu_item
- custom_css
- customize_changeset
איך לאפשר למשתמש ( או לכל דרגה subscriber ) לערוך את הפוסט טייפ
https://stackoverflow.com/questions/41788112/how-to-allow-custom-post-type-add-edit-delete-for-subscriber-users-in-wordpr