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

מודיפיקציה לתגית ה title בעמודים ממוספרים (Pagination)

אם תתנו מבט בקוד המקור של העמודים הממוספרים (pagination) בבלוג שלכם, תגלו כי לכולם אותה תגית title. מכיוון ואנו רוצים להמנע מתגיות <title כפולות נכון יהיה להוסיף את מספר העמוד בסוף התגית. ניתן לבצע זאת (בהנחה ואתם משתמשים בתוסף WordPress SEO by Yoast) על ידי הוספת הקוד הבא לקובץ functions.php:

function change_yoast_title($title) {
	$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
	if ( is_paged() ) {
		return $title . ' - עמוד ' . $paged;
	}
	else {
		// first page of pagination
		return $title;
	}
}
add_filter('wpseo_title','change_yoast_title');

ביטול כתובות קנוניות בעמודי החיפוש

אם ברצונכם להסיר את הכתובות הקנוניות מתוצאות החיפוש (עמודי התוצאות) בוורדפרס, ובהנחה ואתם משתמשים ב WordPress SEO by Yoast, הוסיפו את ההוק (פילטר) הבא לקובץ functions.php בתבנית הבת שלכם.

function yoast_remove_canonical_search( $canonical ) {
	if( is_search() ) {
		return false;
	} else {
		return $canonical;
	}
}
add_filter('wpseo_canonical', 'yoast_remove_canonical_search');

עוד מידע על מהו קנוניקל תג ומהן כתובות קנוניות תמצאו בפוסט מה זה קנוניקל תג (Canonical Tag) וכיצד להשתמש בו?

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

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

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

function wcr_remove_intermediate_image_sizes($sizes, $metadata) {
    $disabled_sizes = array(
        'thumbnail', // 150x150 image
        'medium', // max 300x300 image
        'large'   // max 1024x1024 image
    );

    // unset disabled sizes
    foreach ($disabled_sizes as $size) {
        if (!isset($sizes[$size])) {
            continue;
        }
    
        unset($sizes[$size]);
    }

    return $sizes;
}

add_filter('intermediate_image_sizes_advanced', 'wcr_remove_intermediate_image_sizes', 10, 2);

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

הסרת השדה ״אתר״ מטופס התגובות

ישנם מצבים בהם השדה ״אתר״ (באנגלית נקרא לפעמים Website או URL) אינו נחוץ בטופס התגובות באתרים מסויימים. במצבים אלו, יהיה נכון להסיר את השדה מהטופס על ידי הוספת הקוד הבא לקובץ functions.php:

/**
 * Remove the URL field
 *
 * @param array $fields
 *
 * @return array
 */
function sv_comment_form_default_fields( $fields ) {
	if ( isset( $fields['url'] ) ) {
		unset( $fields['url'] );
	}

	return $fields;
}

add_filter( 'comment_form_default_fields', 'sv_comment_form_default_fields' );

כמובן, אם אתם משתמשים בתבנית בת הוסיפו קוד זה ל functions.php בתבנית הבת שלכם.

שינוי יחס הכיווץ ואיכות התמונות בוורדפרס

וורדפרס מייצרת מספר גדלי תמונות בהתאם להגדרות התבנית שלכם. תמונות אלו מיוצרות באיכות 90 בסקאלה של 1 – 100 כברירת מחדל. תוכלו לחסוך רוחב פס על אם תשנו הגדרה זו ל 75 כך שיתבצע כיווץ אינטנסיבי יותר לתמונות.

/**
 * Snippet Name: Change jpg compression level
 */
function sv_jpeg_quality() {
	return 75;
}
add_filter( 'jpeg_quality', 'sv_jpeg_quality' );

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

הסרה של פוסטים דביקים (sticky posts) מהלולאה הראשית

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

/**
 * Snippet Name: Remove sticky posts from the main query
 */
function sv_ignore_sticky( $query ) {
	if ( ! is_admin() && $query->is_home() && $query->is_main_query() ) {
		$query->set( 'ignore_sticky_posts', true );
		$query->set( 'post__not_in', get_option( 'sticky_posts' ) );
	}
}

add_action( 'pre_get_posts', 'sv_ignore_sticky' );

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

הוספת תכונה לתמונות באמצעות the_post_thumbnail

לפעמים יש צורך להוסיף תכונה מסויימת לתמונה. ניתן לעשות זאת במהירות באמצעות הפונקציה the_post_thumbnail. הסניפט הבא יוסיף את התכונה 'itemprop'="image" לתמונות אך אתם יכולים להשתמש בזה גם בכדי להוסיף class, alt, title וכדומה.

the_post_thumbnail( 'thumbnail', array('itemprop'=>'image') );

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

איך להגביל את גודל התמונות שניתן להעלות לספריית המדיה בוורדפרס

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

/* 
 * Check image resolution (px) before crunching
 */
function savvy_validate_image_size( $file ) {
    $image = getimagesize($file['tmp_name']);
    $minimum = array(
        'width' => '460',
        'height' => '460'
    );
    $maximum = array(
        'width' => '1280',
        'height' => '1280'
    );
    $image_width = $image[0];
    $image_height = $image[1];

    $too_small = "Image dimensions are too small. Minimum size is {$minimum['width']} by {$minimum['height']} pixels. Uploaded image is $image_width by $image_height pixels.";
    $too_large = "Image dimensions are too large. Maximum size is {$maximum['width']} by {$maximum['height']} pixels. Uploaded image is $image_width by $image_height pixels.";

    if ( $image_width < $minimum['width'] || $image_height < $minimum['height'] ) {
        // add in the field 'error' of the $file array the message 
        $file['error'] = $too_small;
        return $file;
    }
    elseif ( $image_width > $maximum['width'] || $image_height > $maximum['height'] ) {
        //add in the field 'error' of the $file array the message
        $file['error'] = $too_large;
        return $file;
    }
    else
        return $file;
}
add_filter('wp_handle_upload_prefilter','savvy_validate_image_size');

באפשרותכם לשנות את גובה ורוחב המינימום והמקסימום של התמונה (פיקסלים) בשורות 6-12. אתם מוזמנים אגב לתת מבט על פוסט רחב יותר המדבר על גודל התמונות בוורדפרס.

שנו את משך זמן השמירה האוטומטית של פוסטים

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

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

שינוי משך הזמן בין שמירות אוטומטיות

הוסיפו את השורה הבאה לקובץ wp-config.php, מעל השורה /* That's all, stop editing! */. הערך הוא בשניות.

define( 'AUTOSAVE_INTERVAL', 120 );

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

כיצד השמירה האוטומטית עובדת בכל עורך

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

  • עורך הבלוקים: מעביר את AUTOSAVE_INTERVAL להגדרות העורך ושומר דרך ה-endpoint בשם autosaves של ה-REST API.
  • העורך הקלאסי: שולח את השמירות האוטומטיות באמצעות ה-Heartbeat API. אם תבטלו את ה-Heartbeat במסך עריכת הפוסט כדי להפחית את העומס על השרת, גם השמירה האוטומטית בעורך הקלאסי תפסיק לעבוד.

עורך הבלוקים שומר בנוסף גיבוי ב-sessionStorage של הדפדפן כל 15 שניות. העותק המקומי הזה נפרד מ-AUTOSAVE_INTERVAL ולעולם לא מגיע לשרת.

שמירות אוטומטיות לעומת רוויזיות

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

  • טיוטה שלכם: השמירה האוטומטית דורסת את הטיוטה עצמה. לא נוצרת שורה נוספת (במסד הנתונים).
  • פוסט שפורסם, או טיוטה של משתמש אחר: השמירה האוטומטית נשמרת בטבלה wp_posts כרוויזיה בשם {post_ID}-autosave-v1. יש אחת כזו לכל משתמש בכל פוסט, והיא נדרסת בכל שמירה.

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

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

בחירת ערך

ברירת המחדל של 60 שניות מתאימה לרוב האתרים. יש כמה מקרים שמצדיקים שינוי:

  • כמה עורכים שעובדים במקביל באחסון משותף: ערך של 120 עד 300 שניות יפחית את מספר השמירות האוטומטיות. בעורך הקלאסי, בקשות ה-Heartbeat ממשיכות לפי התזמון שלהן.
  • כתיבת תוכן ארוך שבו כל פסקה חשובה: 30 שניות. כל שמירה אוטומטית מחליפה את הקודמת, כך שמסד הנתונים לא גדל.

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

שאלות נפוצות

הנה כמה שאלות נפוצות על השמירה האוטומטית בוורדפרס:

האם וורדפרס שומרת פוסטים אוטומטית?
כן. כשיש שינויים שלא נשמרו, וורדפרס שומרת אוטומטית כל 60 שניות כברירת מחדל. תוכלו לשנות את משך הזמן עם הקבוע AUTOSAVE_INTERVAL בקובץ wp-config.php.
היכן וורדפרס שומרת את השמירות האוטומטיות?
בטבלה wp_posts. טיוטות שלכם נדרסות במקומן, ואילו שמירות אוטומטיות של פוסטים שפורסמו נשמרות כפוסט מסוג revision בשם {post_ID}-autosave-v1, אחת לכל משתמש.
האם אפשר לבטל את השמירה האוטומטית לגמרי?
אין לכך הגדרה בליבה. ערך גבוה מאוד ל-AUTOSAVE_INTERVAL, כמו 86400, מפסיק בפועל את השמירות האוטומטיות לשרת, אך הגיבוי המקומי של עורך הבלוקים בדפדפן ממשיך לפעול. איבוד עבודה שלא נשמרה הוא בדרך כלל בעיה גדולה יותר מהשמירות הנוספות.
האם AUTOSAVE_INTERVAL משפיע על ה-Customizer?
כן. ה-Customizer (מסך ״התאמה אישית״) משתמש באותו קבוע בכדי לקבוע באיזו תדירות לשמור אוטומטית שינויים שטרם פורסמו ב-changeset הנוכחי.

הצגת המחיר בווקומרס למשתמשים מחוברים בלבד

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

add_filter( 'woocommerce_get_price_html', function( $price ) {
	if ( is_user_logged_in() ) return $price;
	return '';
} );

בקוד מעלה (אותו יש להוסיף ל functions.php) השתמשנו בתנאי הקובע כי אם המשתמש אינו מחובר למערכת המחירים לא יוצגו עבורו בחנות. כמובן שאתם יכולים להשתמש בכל תנאי שתבחרו.

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