וורדפרס ואתרי אינטרנט

owl-158414_960_720
דורג 5 מתוך 5

באתר תמצאו מדריכים ומאמרים ייחודים בעברית, המדריכים לרוב מנסיון מעשי ומיוחסים לפרוייקטים שאני עובד עליהם באותו הזמן. האתר הוא יותר לשימוש פרטי ולתיעוד דברים, בכדי להשתמש מאוחר יותר, אבל החלטתי לפרסם ניתן לשאול כל שאלה וגם לתרום מדריכים באתר דרך תגובה או דרך צור קשר

פוסט טייפ בוורספרס

וורדפרס מאפשרת לנו ליצור סוגים שונים של תוכן בהתאמה אישית, זה נקרא פוסט טייפ, למה זה טוב לדוגמא אם יש לי אתר למכוניות ואני רוצה להוסיף חוץ מהפוסטים הרגילים שיש לי גם מכוניות ושיחולקו לקטגוריות : סובארו מאזדה ושיהיה גם לכל מכונית קטגורית צבע וכו.. אז אני יוצר פוסט טייפ ומוסיף לו טקסונוניות שהם צבע וסוג מכונית, דוגמא נפוצה לזה היא החנות ווקומרס שבעצם יש לנו מוצרים קטגוריות וכו…

טוב נתחיל ללמוד איך יוצרים פוסט טייפ חדש.

יש לדעת שאחרי הוספת הפוסט טייפ  יש צורך לדאוג גם לתצוגת המידע באתר .

נתחיל עם קוד דוגמא ונסביר:

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

מאפשר לקבוע איפה יוצג התפריט .

 

 

 

אני אוהב את הדוגמא של הספרים בקודקס

כיתוב מותאם אישית לפוסט טייפ

'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 );

 

אי אפשר להשתמש בשמות לפוסט טייפ הבאים כי הם כבר תפוסים

 

איך לאפשר למשתמש ( או לכל דרגה subscriber ) לערוך את הפוסט טייפ

https://stackoverflow.com/questions/41788112/how-to-allow-custom-post-type-add-edit-delete-for-subscriber-users-in-wordpr

תפריט נגישות