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

הפעלת HPOS בווקומרס

HPOS (High-Performance Order Storage) משפר ביצועי הזמנות בווקומרס. ניתן להפעיל דרך קוד. לעוד על האפשרות HPOS באתרי ווקומרס.

add_action( 'before_woocommerce_init', function() {
	if ( class_exists( AutomatticWooCommerceUtilitiesFeaturesUtil::class ) ) {
		AutomatticWooCommerceUtilitiesFeaturesUtil::declare_compatibility( 'custom_order_tables', __FILE__, true );
	}
} );

לאחר מכן הפעילו ב-WooCommerce > Settings > Advanced > Features.

הסרת סקריפטי oEmbed של וורדפרס

וורדפרס טוענת סקריפטי oEmbed להטמעת תוכן מ-YouTube, Twitter וכו'. אם אינכם משתמשים בהטמעות, הסירו אותם. לעוד טיפים על אופטימיזציית ביצועים.

remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
remove_action( 'wp_head', 'wp_oembed_add_host_js' );
remove_action( 'rest_api_init', 'wp_oembed_register_route' );
add_filter( 'embed_oembed_discover', '__return_false' );
add_filter( 'oembed_dataparse', '__return_false' );

ביטול XML-RPC בוורדפרס

XML-RPC מאפשר חיבורים מרחוק לאתר הוורדפרס (למשל מהאפליקציה או Pingback). רוב האתרים לא צריכים אותו, והוא יכול לשמש להתקפות. לביטול, הוסיפו לקובץ functions.php. לעוד טיפים על אבטחת אתר וורדפרס.

add_filter( 'xmlrpc_enabled', '__return_false' );

ביטול WordPress Heartbeat API

ה-Heartbeat API של וורדפרס שולח בקשות AJAX לשרת כל 15-60 שניות (תלוי בהקשר – עורך, דשבורד וכו'). זה שימושי לשמירה אוטומטית ולניהול סשנים, אך על שרתי אחסון משותף יכול לגרום לעומס CPU גבוה. לעוד דרכים לשיפור מהירות האתר, תנו מבט במדריך Google PageSpeed למשתמשי וורדפרס.

אם אתם רוצים להאט את תדירות ה-Heartbeat או לבטל אותו לגמרי, הוסיפו את הקוד הבא לקובץ functions.php:

/**
 * Disable or slow down WordPress Heartbeat API
 */
add_action( 'init', function() {
	// Option 1: Disable Heartbeat completely
	wp_deregister_script( 'heartbeat' );

	// Option 2: Slow down Heartbeat to 60 seconds (uncomment and remove Option 1)
	// add_filter( 'heartbeat_settings', function( $settings ) {
	//     $settings['interval'] = 60;
	//     return $settings;
	// } );
}, 1 );

שימו לב: ביטול מלא של Heartbeat עלול להשפיע על שמירה אוטומטית בעורך הפוסטים. אם אתם צריכים את השמירה האוטומטית, השתמשו באופציה 2 (האטה ל-60 שניות) במקום ביטול מלא.

ביטול סקריפטי האימוג'י של וורדפרס

וורדפרס טוענת כברירת מחדל סקריפטים להצגת אימוג'י (wp-emoji-release.min.js וכו') בכל עמוד. רוב האתרים לא צריכים את זה, והסקריפטים מוסיפים בקשות HTTP מיותרות ומעט עומס.

כדי להסיר את סקריפטי האימוג'י, הוסיפו את הקוד הבא לקובץ functions.php:

/**
 * Remove WordPress emoji scripts
 */
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
remove_action( 'wp_print_styles', 'print_emoji_styles' );
remove_action( 'admin_print_styles', 'print_emoji_styles' );
remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );
remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );

add_filter( 'tiny_mce_plugins', function( $plugins ) {
	return is_array( $plugins ) ? array_diff( $plugins, array( 'wpemoji' ) ) : array();
} );

התוצאה: פחות בקשות HTTP ועמודים קלים יותר. לעוד טיפים לשיפור ביצועים, תנו מבט במדריך Google PageSpeed למשתמשי וורדפרס.

החרגת סוג תוכן (Post Type) מסוים ממפת האתר ב Rank Math

Rank Math מאפשר לכם לבחור אילו סוגי תוכן ייכללו במפת האתר (XML Sitemap) באמצעות ההגדרה Include in Sitemap, שתמצאו תחת ״Rank Math SEO > Sitemap Settings > Post Types״.

כדי להחריג סוג תוכן ממפת האתר של Rank Math באמצעות קוד, השתמשו בפילטר rank_math/sitemap/exclude_post_type.

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

אם אתם מעוניינים להעביר את מפת האתר עצמה לכתובת אחרת, עיינו בשינוי בסיס כתובת ה-URL של מפת האתר ב-Rank Math.

הקוד

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

/**
 * Filter decision if post type is excluded from the XML sitemap.
 *
 * @param bool   $exclude Default false.
 * @param string $type    Post type name.
 */
add_filter( 'rank_math/sitemap/exclude_post_type', function( $exclude, $type ){
	if ( 'snippet' === $type ) {
		return true;
	}
	return $exclude;
}, 10, 2 );

כיצד זה עובד

Rank Math מריץ את הפילטר עבור כל סוג תוכן שבו ההגדרה Include in Sitemap פעילה. הפילטר מקבל שני ארגומנטים: $exclude (ברירת מחדל false) ו-$type, כלומר שם סוג התוכן.

אם תחזירו true, קובץ מפת האתר של אותו סוג תוכן (למשל snippet-sitemap.xml) לא ייווצר עוד ולא יופיע באינדקס מפות האתר. עבור כל סוג תוכן אחר, החזירו את $exclude ללא שינוי, כדי שלא תדרסו קוד אחר שמשתמש באותו פילטר.

החליפו את 'snippet' בשם סוג התוכן שלכם. שימו לב, מדובר במזהה שמועבר ל-register_post_type(), ולא בשם (label) שמוצג בתפריט הניהול.

הפילטר יכול רק להסיר סוגי תוכן. הוא לא יכול להחזיר סוג תוכן שההגדרה Include in Sitemap שלו כבויה, מכיוון ש-Rank Math בודק את ההגדרה לפני שהוא מריץ את הפילטר.

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

add_filter( 'rank_math/sitemap/exclude_post_type', function( $exclude, $type ) {
	$excluded = array( 'snippet', 'portfolio', 'testimonial' );

	return in_array( $type, $excluded, true ) ? true : $exclude;
}, 10, 2 );

החרגת עמוד בודד במקום זאת

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

  • הגדירו את ה-Robots Meta של העמוד ל-No Index בהגדרות Rank Math של אותו עמוד. כברירת מחדל, Rank Math משאיר תוכן noindex מחוץ למפת האתר.
  • הוסיפו את ה-ID לשדה ״Sitemap Settings > General > Exclude Posts״ (מופרדים בפסיקים). זו אפשרות מתקדמת, כך שאם אינכם רואים את השדה, העבירו את Rank Math למצב Advanced Mode.
  • השתמשו בפילטר rank_math/sitemap/entry והחזירו false עבור אותה כתובת.

הנה גרסת הקוד, שמסירה את הפוסטים 42 ו-108 מכל מפת אתר שאליה הם שייכים:

add_filter( 'rank_math/sitemap/entry', function( $url, $type, $object ) {
	if ( 'post' === $type && in_array( (int) $object->ID, array( 42, 108 ), true ) ) {
		return false;
	}
	return $url;
}, 10, 3 );

הערך של $type הוא post עבור כל סוגי התוכן (כולל עמודים), term עבור מונחים של טקסונומיות ו-user עבור כותבים. המירו את ה-ID למספר שלם: Rank Math קורא את השורות ישירות ממסד הנתונים, כך שה-ID מגיע כמחרוזת, והשוואה קפדנית (strict) לעולם לא תחזיר התאמה.

שני הפילטרים מופיעים ברשימת הפילטרים וההוקים של Rank Math.

כיצד לוודא שזה עבד

Rank Math שומר את מפות האתר שנוצרו ב-cache, כך שייתכן שתראו את הגרסה הישנה גם לאחר הוספת הפילטר. אם יש לכם WP-CLI, הפקודה הבאה מנקה את ה-cache ובונה את מפת האתר מחדש:

wp rankmath sitemap generate

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

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

שאלות נפוצות

הנה כמה שאלות נפוצות על החרגת תוכן ממפת האתר של Rank Math:

האם קיים פילטר rank_math/sitemap/post_types?
לא. ב-Rank Math אין פילטר בשם זה. השתמשו ב-rank_math/sitemap/exclude_post_type בכדי להסיר סוג תוכן, או בהגדרה Include in Sitemap תחת ״Sitemap Settings > Post Types״.
האם החרגת סוג תוכן ממפת האתר מונעת מגוגל לאנדקס אותו?
לא. הפוסטים נשארים ניתנים לאינדוקס, וגוגל עדיין יכול למצוא אותם דרך קישורים. אם אתם רוצים להוציא אותם מתוצאות החיפוש, הגדירו את סוג התוכן כ-noindex תחת ״Rank Math SEO > Titles & Meta״.
כיצד להחריג טקסונומיה ממפת האתר של Rank Math?
השתמשו בפילטר rank_math/sitemap/exclude_taxonomy. הוא עובד באותה צורה: הוא מקבל את $exclude ואת שם הטקסונומיה, והחזרת true מסירה את מפת האתר של אותה טקסונומיה.
הוספתי את הפילטר אבל סוג התוכן עדיין מופיע במפת האתר. למה?
בדרך כלל האשם הוא ה-cache של מפת האתר או cache של עמודים. הריצו wp rankmath sitemap generate, נקו את תוסף ה-cache או את ה-CDN, וודאו שהשם בקוד תואם בדיוק למזהה הרשום של סוג התוכן.

פילטר לשינוי בסיס כתובת ה־URL של מפת האתר ב- Rank Math

כתובת ברירת המחדל של מפת האתר ב-Rank Math היא https://example.com/sitemap_index.xml. הפילטר rank_math/sitemap/base_url מוסיף לפניה נתיב תיקייה, כך שהאינדקס וכל מפות האתר המשניות עוברים לנתיב כמו /search-sitemaps/sitemap_index.xml.

ייתכן שתרצו לעשות זאת כדי שמפות האתר לא יהיו בשורש האתר, כדי למנוע התנגשות עם כלי אחר שמצפה ל-sitemap_index.xml, או כדי לשמור על מבנה הכתובות של אתר שהעברתם ל-Rank Math.

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

הקוד

הוסיפו את הפילטר לקובץ functions.php של תבנית הבת שלכם או לתוסף ייעודי. הדוגמה הבאה מעבירה את מפות האתר ל-search-sitemaps/:

/**
 * Filter to change the Sitemap URL Base
 *
 * @param string $base New URL Base
 */
add_filter( 'rank_math/sitemap/base_url', function( $base ){
	return 'search-sitemaps/';
}, 10, 1 );

לאחר שמירת הקובץ, גשו ל״הגדרות > קישורים קבועים״ ולחצו על שמירת שינויים. פעולה זו מרעננת (flush) את כללי ה-rewrite, וכל עוד לא תעשו זאת הכתובת החדשה תחזיר שגיאת 404.

כיצד זה עובד

Rank Math בונה כל כתובת של מפת אתר כ-home_url( $base . $file ). כברירת מחדל, $base היא מחרוזת ריקה, או index.php/ אם מבנה הקישורים הקבועים שלכם כולל index.php.

הפילטר מתועד ברשימת הפילטרים וההוקים של Rank Math.

אותו ערך משמש גם לכללי ה-rewrite שמגישים את מפות האתר וגם לקישורים ש-Rank Math מדפיס: הרשומות בתוך אינדקס מפות האתר, שורת ה-Sitemap: בקובץ robots.txt הווירטואלי, והכתובת המוצגת בהגדרות התוסף.

יש שני פרטים שנוטים להכשיל:

  • השאירו את הלוכסן בסוף. Rank Math מצמיד את שם הקובץ ישירות, כך ש-search-sitemaps ללא לוכסן ייתן לכם search-sitemapssitemap_index.xml.
  • אל תוסיפו לוכסן בהתחלה. אותה מחרוזת נכנסת גם לכלל ה-rewrite, והכללים בוורדפרס מושווים מול הנתיב ללא הלוכסן שבהתחלה, כך שמפת האתר תחזיר 404.

כיצד למצוא את כתובת מפת האתר ב-Rank Math

הכתובת המדויקת, כולל בסיס מותאם אם הגדרתם כזה, מוצגת בראש המסך ״Rank Math SEO > Sitemap Settings > General״, ליד הטקסט ״Your sitemap index can be found here״. בנוסף, Rank Math מפנה את /sitemap.xml אל /sitemap_index.xml בשורש האתר.

אם האתר שלכם עדיין משתמש בקישורים קבועים פשוטים (?p=123), אין כתובות ״יפות״ למפות האתר. במקרה כזה האינדקס מוגש בכתובת ?sitemap=1.

כדי לקבל את הכתובת ב-PHP, השתמשו ב-template tag של Rank Math. התוסף לא רושם אובייקט sitemap על rank_math(), כך ש-rank_math()->sitemap מחזיר null.

if ( function_exists( 'rank_math_get_sitemap_url' ) ) {
	$sitemap_url = rank_math_get_sitemap_url(); // Includes the filtered base.
}

לאחר ששיניתם את הבסיס

העברת מפת האתר שוברת כל מקום שבו שמורה הכתובת הישנה. עברו על הרשימה הבאה:

  • הגישו את כתובת האינדקס החדשה ב-Google Search Console והסירו את הישנה. המדריך ליצירה ושליחה של מפת אתר מסביר כיצד לעשות זאת.
  • אם בקובץ robots.txt יש שורת Sitemap: שנכתבה ידנית, עדכנו אותה בעצמכם. Rank Math לא מוסיף שורה משלו כאשר כבר קיימת כזו.
  • בשרתי Nginx, Rank Math מציג כללי rewrite במסך Sitemap Settings. הכללים כוללים את הבסיס, אז העתיקו את הכללים המעודכנים להגדרות השרת.
  • ההפניה המובנית של /sitemap.xml עדיין מצביעה אל /sitemap_index.xml בשורש האתר, אז אל תסתמכו עליה לאחר שינוי הבסיס.

שאלות נפוצות

הנה כמה שאלות נפוצות על כתובת מפת האתר ב-Rank Math:

מהי כתובת ברירת המחדל של מפת האתר ב-Rank Math?
הכתובת היא /sitemap_index.xml תחת כתובת הבית של האתר, למשל https://example.com/sitemap_index.xml. כל סוג תוכן וכל טקסונומיה מקבלים מפת אתר משנית משלהם, כמו post-sitemap.xml ו-category-sitemap.xml.
האם אפשר לשנות את השם של sitemap_index.xml עצמו?
כן, באמצעות הפילטר rank_math/sitemap/index/slug. החזירו את השם החדש ללא .xml, ולאחר מכן שמרו את הקישורים הקבועים. פילטר הבסיס משנה את התיקייה, ופילטר ה-slug משנה את שם הקובץ.
מה עושה הפילטר rank_math/sitemap/index?
הוא אינו משנה את הכתובת. הוא מוסיף XML גולמי לסוף אינדקס מפות האתר, כך שתוכלו להוסיף רשומות <sitemap> נוספות, למשל מפת אתר שנוצרה ע"י תוסף אחר.
למה כתובת מפת האתר החדשה מחזירה 404?
חוקי ה-rewrite לא רועננו, או שחסר לבסיס הלוכסן בסוף או שיש בו לוכסן בהתחלה. שמרו פעם אחת את ״הגדרות > קישורים קבועים״, ובשרתי Nginx עדכנו גם את חוקי ה-rewrite בשרת.

פילטר לשינוי ה־Author base (כתובת המחבר) ב Rank Math

השתמשו בפילטר rank_math/author_base כדי לשנות את בסיס כתובת ה-URL לארכיון מחברים ב-Rank Math.

כאשר מגדירים את בסיס המחבר באמצעות הפילטר הזה, ההגדרה של Author Base שבוצעה על ידי המשתמשים תחת Rank Math SEO → Titles & Meta → Authors לא תשפיע כלל.

בדוגמה הבאה, בסיס כתובת המחבר ישתנה ל-writers (כלומר /writers/username/ במקום /author/username/).

/**
 * Allow developers to change the author base.
 *
 * @param string $base The author base.
 */
add_filter( 'rank_math/author_base', function( $base ) {
	return 'writers';
});