ארכיונים: Snippets | עמוד 20

איך לאפשר תגובות בסוגי תוכן מותאמים (custom post types)

כברירת מחדל וורדפרס חוסמת את אפשרות התגובות בסוגי תוכן מותאמים (custom post types). על מנת לאפשר תגובות בפוסט מותאם אישית הוסיפו את האפשרות של comments תחת supports היכן שאתם מגדירים אותו (שורה 32).

function snippet_custom_init() {
      $labels = array(
          'name' => 'סניפט',
          'singular_name' => 'סניפט',
          'add_new' => 'הוסף סניפט חדש',
          'add_new_item' => 'הוסף סניפט חדש',
          'edit_item' => 'ערוך סניפט',
          'new_item' => 'סניפט חדש',
          'all_items' => 'כל הסניפטים',
          'view_item' => 'הצג סניפט',
          'search_items' => 'חפש סניפט',
          'not_found' =>  'לא נמצא סניפט',
          'not_found_in_trash' => 'לא נמצא סניפט בפח',
          'parent_item_colon' => '',
          'menu_name' => 'סניפטס',
          );

      $args = array(
          'labels' => $labels,
          'exclude_from_search' => false,
          'public' => true,
          'publicly_queryable' => true,
          'show_ui' => true,
          'show_in_menu' => true,
          'query_var' => true,
          'rewrite' => array( 'slug' => 'סניפט' ),
          'capability_type' => 'post',
          'has_archive' => true,
          'hierarchical' => false,
          'taxonomies' => array('category'),
          'menu_position' => null,
          'supports' => array( 'title', 'author', 'thumbnail', 'excerpt', 'comments', 'editor' )
          );

        register_post_type( 'snippet', $args );
    }
add_action( 'init', 'snippet_custom_init', 0);

כיצד להפוך את סדר התגובות בוורדפרס?

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

אסביר פה כיצד להפוך את סדר התגובות בוורדפרס.

אופציה ראשונה

גשו להגדרות > דיון. תחת הגדרות תגובות נוספות מצאו את ״ההגדרות הישנות יותר תוצגנה בתחילת העמוד״ ושנו את ההגדרה בהתאם.

להפוך את סדר התגובות בוורדפרס

אופציה שנייה

הוסיפו את הקוד הבא לקובץ functions.php של התבנית שלכם:

function wpb_reverse_comments($comments) {
		return array_reverse($comments);
	}	
add_filter ('comments_array', 'wpb_reverse_comments');

אנו משתמשים פה בפילטר comments_array בכדי להפוך את סדר התגובות.

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

לעוד התאמות לתגובות בוורדפרס, תנו מבט בהצגת מספר התגובות הכולל באתרי וורדפרס.

שינוי מיקום כפתור הוסף לעגלה ב Woocommerce

כדי לשנות את מיקום כפתור ״הוסף לעגלה״ ב-WooCommerce, העבירו את woocommerce_template_single_add_to_cart לעדיפות (priority) אחרת באקשן woocommerce_single_product_summary. כברירת מחדל הוא נמצא בעדיפות 30, אחרי התיאור הקצר ולפני נתוני המוצר (meta).

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

הזזת כפתור הוסף לעגלה

הוסיפו את הקוד הבא לקובץ functions.php של תבנית הבת שלכם. הקוד מעביר את הכפתור מעדיפות 30 לעדיפות 15, בין המחיר לתיאור הקצר:

remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 15 );

remove_action() עובדת רק כשהעדיפות זהה לזו שבה נרשמה הפונקציה, ולכן בשורה הראשונה חייב להופיע 30.

סדר העדיפויות של woocommerce_single_product_summary

האקשן רץ בתוך ה-div בעל המחלקה .summary שבקובץ templates/content-single-product.php. אלה הפונקציות ש-WooCommerce רושם בקובץ includes/wc-template-hooks.php:

עדיפות פונקציה פלט
5 woocommerce_template_single_title שם המוצר
10 woocommerce_template_single_rating דירוג כוכבים
10 woocommerce_template_single_price מחיר
20 woocommerce_template_single_excerpt תיאור קצר
30 woocommerce_template_single_add_to_cart טופס ההוספה לעגלה
40 woocommerce_template_single_meta מק״ט, קטגוריות ותגיות
50 woocommerce_template_single_sharing תבנית השיתוף
60 WC_Structured_Data::generate_product_data נתוני Schema של המוצר, ללא פלט גלוי

הדירוג והמחיר חולקים את עדיפות 10. פונקציות עם אותה עדיפות רצות לפי סדר ההוספה שלהן, והדירוג נוסף ראשון.

איך זה עובד?

וורדפרס מריצה את הפונקציות שמחוברות ל-אקשן מהעדיפות הנמוכה ביותר לגבוהה ביותר. בחרו מספר שנמצא בין שני ״שכנים״ כדי למקם את הכפתור ביניהם:

  • מעל שם המוצר: עדיפות 1 עד 4.
  • מיד אחרי המחיר: 11 עד 19.
  • אחרי נתוני המוצר: 41 עד 49.

woocommerce_template_single_add_to_cart() לא מדפיסה את הכפתור בעצמה. היא מפעילה את woocommerce_{product_type}_add_to_cart, ולאקשן הזה WooCommerce מחבר פונקציה לכל סוג מוצר מובנה, כמו woocommerce_simple_add_to_cart ו-woocommerce_variable_add_to_cart. הפונקציות האלה טוענות את התבניות שבתיקייה single-product/add-to-cart/.

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

עמוד החנות ועמודי ארכיון

לולאות המוצרים בעמוד החנות ובעמודי הקטגוריות משתמשות באקשן אחר. בלולאות האלה הכפתור מגיע מ-woocommerce_template_loop_add_to_cart על woocommerce_after_shop_loop_item בעדיפות 10. הקוד הבא מעביר אותו אל מעל תמונת המוצר:

remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
add_action( 'woocommerce_before_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 5 );

בחרו את המיקום בלולאה בזהירות. הקישור למוצר נפתח ב-woocommerce_before_shop_loop_item בעדיפות 10 ונסגר ב-woocommerce_after_shop_loop_item בעדיפות 5, וכל מה שמחובר ביניהם יוצא בתוך אותו קישור. הכפתור הוא גם קישור, וקישורים מקוננים הם HTML לא תקין.

תבניות בלוקים ו-page builders

ההוקים האלה רלוונטיים לתבניות הקלאסיות. בתבנית בלוקים, התבנית Single Product בנויה מבלוקים, ולכן במקום זאת גררו את הבלוק Add to Cart with Options למיקום חדש ב-Site Editor.

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

גם page builders כמו Elementor משתמשים בווידג'טים משלהם, אז בדקו קודם איזו מערכת מרנדרת את עמוד המוצר שלכם.

שאלות נפוצות

שאלות נפוצות על מיקום כפתור הוסף לעגלה וההוק שלו:

באיזו עדיפות רצה woocommerce_template_single_add_to_cart?
בעדיפות 30 על האקשן woocommerce_single_product_summary. היא רצה אחרי התיאור הקצר (20) ולפני נתוני המוצר (40).
למה remove_action לא מסירה את הכפתור?
העדיפות חייבת להיות זהה בדיוק, ולכן השתמשו ב-30. בדקו גם שהתבנית שלכם לא העבירה כבר את הפונקציה לעדיפות אחרת, ושהעמוד אינו תבנית בלוקים או layout של page builder.
האם אפשר להעביר את הכפתור אל מתחת לטאבים של המוצר?
כן. חברו את woocommerce_template_single_add_to_cart ל-woocommerce_after_single_product_summary. הטאבים של המוצר רצים שם בעדיפות 10, כך שעדיפות 5 תציב את הכפתור מעל הטאבים ועדיפות 11 מתחתם.
האם זה משנה את הכפתור גם במוצרים עם וריאציות?
כן. הפונקציה שאתם מזיזים מציגה את הטופס כולו עבור כל סוגי המוצרים, כולל התפריטים הנפתחים של הווריאציות במוצרים עם וריאציות.

איך להסיר או להוסיף עמודים מתוצאות החיפוש של וורדפרס?

על מנת להסיר עמודים מתוצאות החיפוש הוסיפו את הקוד הבא לקובץ functions.php . ניתן גם להגביל את החיפוש ל Post Type מסויים ע״י שינוי המילה post בשורה 7 למזהה (slug) של ה Post Type שברצונכם להציג.

/* Remove Pages from Search Results */

function filter_pages_from_search($query) {
    if ($query->is_search) {
        $query->set('post_type', 'post');
    }
    return $query;
}

add_filter('pre_get_posts','filter_pages_from_search');

לעומת זאת, בכדי לוודא שוורדפרס מחפשת גם בעמודים ולא רק בפוסטים השתמשו בקוד הבא:

/* Add Pages to Search Results */

function filter_pages_from_search($query) {
    if ($query->is_search) {
        $query->set('post_type', array('post', 'page'));
    }
    return $query;
}

add_filter('pre_get_posts','filter_pages_from_search');

לעוד על שליטה בחשיפת החיפוש בוורדפרס, תנו מבט במניעת אינדוקס של עמודי חיפוש.

שינוי טקסט כפתור הוסף לעגלה ב Woocommerce

לפני מספר שבועות נתקלתי במצב בו לקוח מעוניין כי במקום הטקסט ׳הוסף לעגלה׳ או ׳הוסף לסל׳ הסטנדרטי של ווקומרס, יופיע טקסט אחר/ הנה הקוד אשר צריך להוסיף ב functions.php בכדי לשנות את הטקסט:

add_filter( 'woocommerce_product_single_add_to_cart_text', 'woo_custom_cart_button_text' );    // 2.1 +
 
function woo_custom_cart_button_text() {
         return __( 'My Button Text', 'woocommerce' );
 }

כיצד לתקן Maximum Execution Time Exceeded בוורדפרס?

השבוע ניסיתי לעדכן תבנית באתר וורדפרס ונתקלתי בהודעת שגיאה Fatal Error: Maximum Execution Time Exceeded in WordPress. הפתרון במקרה זה הוא נורא פשוט, אך עשוי להיות מתסכל למתחילים. אראה לכם כיצד לתקן את השגיאה Maximum Execution Time Exceeded בוורדפרס.

error-maximum-execution-time

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

כיצד פותרים זאת?

בכדי לשנות את הגבלת הזמן של הרצת סקריפטים ב php, התחברו ב ftp לשרת שלכם, מצאו את קובץ htaccess שנמצא באותו מיקום בו נמצאות הספריות wp-content ו wp-admin. ערכו את הקובץ והוסיפו את השורה:

<IfModule mod_php7.c>
    php_value max_execution_time 300
</IfModule>

הקוד פשוט מגדיר כי זמן ההרצה יהיה 300 שניות (5 דקות), אתם יכולים לשנות אותו כרצונכם. לצורך העניין, תבנית Avada בגירסת 3.8 דורשת להגדיר לפחות 180 שניות על מנת לעבוד בצורה תקינה.

*עליכם לשים לב לגירסת ה PHP בקוד המצורף

לעוד הגדרות wp-config.php שימושיות, תנו מבט באופטימיזציה לקונפיגורציה של וורדפרס באמצעות wp-config.php.