הפילטר הבא מאפשר להסיר את סרגל הכלים של וורדפרס (WordPress Toolbar). הוסיפו את הקוד לקובץ functions.php:
add_filter('show_admin_bar', '__return_false');
קוד זה משתמש בפילטר של וורדפרס. למידע נוסף בהבנת הוקים בוורדפרס.
הפילטר הבא מאפשר להסיר את סרגל הכלים של וורדפרס (WordPress Toolbar). הוסיפו את הקוד לקובץ functions.php:
add_filter('show_admin_bar', '__return_false');
קוד זה משתמש בפילטר של וורדפרס. למידע נוסף בהבנת הוקים בוורדפרס.
אם אתם מעוניינים להציג את התמונה הראשית של הפוסט ב RSS (חיוני אם אתם משתמשים ב RSS עבור Mailchimp למשל), הוסיפו את הקוד הבא לקובץ functions.php:
// Put post thumbnails into rss feed
function savvy_feed_post_thumbnail($content) {
global $post;
if(has_post_thumbnail($post->ID)) {
$content = '' . $content;
}
return $content;
}
add_filter('the_excerpt_rss', 'savvy_feed_post_thumbnail');
add_filter('the_content_feed', 'savvy_feed_post_thumbnail');
בכדי לבצע זאת הוסיפו את הקוד הבא לקובץ functions.php ושנו את ה CSS בהתאם. אגב אם אתם מעוניינים לדעת מהי הדרך הנכונה להוסיף נכסים (קבצי CSS ו JS לממשק הניהול של וורדפרס – תנו מבט בפוסט הדרך הנכונה לטעון סקריפטים בממשק הניהול של וורדפרס.
function my_custom_fonts() {
echo '<style>
body {
font-size: 12px;
}
</style>';
}
add_action('admin_head', 'my_custom_fonts');
הנה דוגמה לכיצד לשנות את האייקון הדיפולטיבי של פייפאל בעמוד התשלום של ווקומרס. הנה דוגמה חיה:
<?php
/**
* Add custom gateway icons
*
* @param string $icon Image HTML.
* @param string $gateway_id Gateway ID.
*
* @return string
*/
function custom_wc_gateway_icons( $icon, $gateway_id ) {
// Example for PayPal:
if ( 'paypal' == $gateway_id ) {
$icon = '<img src="' . WC_HTTPS::force_https_url( 'http://your-site.com/image.png' ) . '" alt="' . __( 'PayPal' ) . '" />'
}
return $icon;
}
add_filter( 'woocommerce_gateway_icon', 'custom_wc_gateway_icons', 10, 2 );
למדריך הקמת חנות ווקומרס מלא, תנו מבט בכיצד ליצור חנות ווירטואלית עם ווקומרס.
בכדי לשנות את מספר הפריטים בעמוד ההזמנות של ווקומרס (ב Front) ניתן להשתמש בקוד הבא כאשר X הוא מספר הפריטים המקסימלי שיוצג (functions.php):
function custom_my_account_orders( $args ) {
$args['posts_per_page'] = X;
return $args;
}
add_filter( 'woocommerce_my_account_my_orders_query', 'custom_my_account_orders', 10, 1 );
עוד על ניהול וטיפול בהזמנות באתרי ווקומרס תמצאו בפוסט טיפול וניהול הזמנות (Orders) באתרי ווקומרס.
הפילטר wpseo_breadcrumb_links מאפשר לכם להוסיף פריטים, להסיר פריטים או לשנות את הסדר שלהם בפירורי הלחם של Yoast SEO. דוגמה נפוצה היא הוספת קישור לבלוג מיד אחרי הקישור לעמוד הבית בעמודי פוסט בודד, כך שהתוצאה תהיה: Home › Blog › Post title.
אם אתם רוצים להסיר את הנתונים המובנים של פירורי הלחם, ראו את הסרת סכמת פירורי הלחם ב-Yoast. כדי לבטל את סכמת Yoast כולה, ראו ביטול סכמת Yoast SEO.
הוסיפו את הקוד לקובץ functions.php בתבנית הבת שלכם או לתוסף ייעודי. עדכנו את הכתובת ואת הטקסט כך שיתאימו לעמוד הבלוג שלכם:
function yoast_seo_breadcrumb_append_link( $links ) {
if ( ! is_singular( 'post' ) ) {
return $links;
}
$breadcrumb[] = array(
'url' => home_url( '/blog/' ),
'text' => 'Blog',
);
array_splice( $links, 1, 0, $breadcrumb );
return $links;
}
add_filter( 'wpseo_breadcrumb_links', 'yoast_seo_breadcrumb_append_link' );
Yoast מעביר את כל מערך פירורי הלחם אל הפילטר wpseo_breadcrumb_links, רגע לפני שהוא מציג אותם. אינדקס 0 הוא הקישור לעמוד הבית, והפריט האחרון הוא העמוד הנוכחי.
כל פריט הוא מערך עם url ו-text. בנוסף, Yoast מוסיף מפתח שמזהה את סוג הפריט: id לפוסטים ולעמודים, term_id ו-taxonomy למונחים, ו-ptarchive לארכיוני סוגי תוכן.
הקריאה array_splice( $links, 1, 0, $breadcrumb ) מכניסה את הפריט החדש במיקום 1, מיד אחרי עמוד הבית, בלי להסיר שום פריט. הארגומנט השלישי חייב להיות 0. כל ערך אחר (למשל -2) ימחק בלי התרעה פריטים מרשימות פירורי לחם ארוכות יותר.
התנאי is_singular( 'post' ) מגביל את השינוי לפוסטים בלבד. בלעדיו, הקישור לבלוג יופיע גם בעמוד הבית, בעמודים רגילים ובארכיונים.
אותו מערך משמש גם לפירורי הלחם הגלויים וגם לסכמת ה-BreadcrumbList של Yoast, כך שהפריט החדש יופיע גם בנתונים המובנים.
אם עמוד הבית שלכם מוגדר כעמוד סטטי והגדרתם ״Posts page״ תחת ״הגדרות > קריאה״, יכול להיות שלא תצטרכו קוד בכלל.
תחת ״Yoast SEO > Settings > Advanced > Breadcrumbs״, ההגדרה Show blog page in breadcrumbs מוסיפה את אותו עמוד לפירורי הלחם בפוסטים בודדים.
השתמשו בפילטר כשאין עמוד פוסטים (למשל, עמוד בלוג שנבנה כתבנית עמוד מותאמת), או כשאתם צריכים קישור שההגדרות אינן מציעות.
הגרסה הבאה מוסיפה עמוד מרכזי (hub) לפני הפריט הנוכחי בסוג תוכן מותאם. היסט (offset) שלילי נספר מהסוף, כך ש--1 ממקם אותו מיד לפני הפריט האחרון:
add_filter( 'wpseo_breadcrumb_links', function( $links ) {
if ( ! is_singular( 'snippet' ) ) {
return $links;
}
$new_crumb = array(
array(
'url' => home_url( '/resources/' ),
'text' => 'Resources',
),
);
array_splice( $links, -1, 0, $new_crumb );
return $links;
} );
הדוגמה הבאה מסירה את פריטי הקטגוריה מפירורי הלחם:
add_filter( 'wpseo_breadcrumb_links', function( $links ) {
foreach ( $links as $i => $link ) {
if ( isset( $link['taxonomy'] ) && 'category' === $link['taxonomy'] ) {
unset( $links[ $i ] );
}
}
return array_values( $links );
} );
כמה כללים לשימוש בטוח בפילטר:
url וגם text. אם אחד מהם חסר, Yoast לא ידפיס את סכמת ה-BreadcrumbList באותו עמוד.text כפי שהוא, לכן עטפו ערכים דינמיים כמו כותרות פוסטים ב-esc_html().לסקירה רחבה יותר על אפשרויות פירורי הלחם, קראו את הפוסט כיצד להוסיף פירורי לחם לאתרי וורדפרס. הפילטר עצמו מוגדר בקובץ ה-breadcrumbs generator בקוד המקור של Yoast.
הנה כמה שאלות נפוצות על הפילטר wpseo_breadcrumb_links:
wpseo_breadcrumb_single_link ו-wpseo_breadcrumb_output משנים רק את ה-HTML.
[wpseo_breadcrumb]. בקבצי תבנית PHP השתמשו ב-yoast_breadcrumb( '<p id="breadcrumbs">', '</p>' ), שמדפיס רק כאשר ההגדרה ״Enable breadcrumbs for your theme״ פעילה או כאשר התבנית מצהירה על תמיכה בפירורי הלחם. הפילטר חל על כל האפשרויות האלו.
is_singular( 'post' ) לא תרוץ בעמודים), שהפונקציה מחזירה את $links, ונקו את ה-cache של העמודים. כמו כן, ודאו שפירורי הלחם בעמוד אכן מגיעים מ-Yoast ולא מהתבנית או מ-WooCommerce.
אם נתקלתם בהודעה "Maximum execution time of 30 seconds exceeded", פירוש הדבר שסקריפט PHP רץ יותר זמן מהמותר לפי ההגדרה max_execution_time. בוורדפרס זה קורה בדרך כלל בזמן עדכונים, ייבוא תוכן וגיבויים.
בפוסט הזה תמצאו את הדרכים להגדיל את max_execution_time, ואיך לדעת באיזו מהן השרת שלכם תומך. לפתרון מהיר של השגיאה עצמה, הציצו בסניפט תיקון השגיאה Maximum Execution Time Exceeded בוורדפרס.
היכנסו אל כלים > בריאות האתר > מידע ופתחו את החלק שרת (Server).
max_execution_time בשניות.apache2handler הוא Apache mod_php, fpm-fcgi הוא PHP-FPM ו-litespeed הוא LiteSpeed.חזרו למסך הזה אחרי כל שינוי כדי לוודא ש-PHP אכן קלט את הערך החדש.
בחרו את השיטה שמתאימה ל-PHP SAPI שלכם. בדוגמאות נשתמש ב-300 שניות, מגבלה זהה לזו שליבת וורדפרס מגדירה לעצמה בזמן עדכונים.
הוסיפו את הקוד הבא לקובץ wp-config.php, מעל השורה /* That's all, stop editing! */:
if ( function_exists( 'set_time_limit' ) ) {
set_time_limit( 300 );
}
אל תוותרו על הבדיקה function_exists(). החל מ-PHP 8, פונקציה שנחסמה באמצעות disable_functions נחשבת כלא מוגדרת, כך שקריאה ישירה אליה תפיל את האתר אצל חברות אחסון שחוסמות אותה.
ב-PHP-FPM (התצורה הנפוצה ביותר כיום), צרו קובץ .user.ini באותה תיקייה שבה נמצא wp-config.php:
max_execution_time = 300
max_input_time = 300
כברירת מחדל, PHP קורא את הקובץ מחדש כל 5 דקות (user_ini.cache_ttl), כך שייתכן שהשינוי לא ייכנס לתוקף מיד.
גבו קודם את הקובץ .htaccess, ולאחר מכן הוסיפו את השורה הבאה:
php_value max_execution_time 300
השיטה הזו עובדת רק עם Apache mod_php או LiteSpeed. ב-Apache עם PHP-FPM ההנחיה php_value אינה מוכרת, והאתר יחזיר שגיאת 500. במקרה כזה הסירו אותה והשתמשו ב-.user.ini.
אם יש לכם שליטה על השרת, הגדירו את הערך ב-php.ini והפעילו מחדש את PHP-FPM או את Apache. באחסון משותף השתמשו במסך הגדרות ה-PHP בלוח הבקרה של חברת האחסון.
max_execution_time = 300
ההנחיה קובעת כמה שניות סקריפט רשאי לרוץ (30 כברירת מחדל). קריאה ל-set_time_limit() משנה את המגבלה בזמן ריצה ומאפסת את המונה.
בלינוקס, גרסאות PHP הסטנדרטיות סופרות רק את זמן הריצה של הסקריפט עצמו. שאילתות למסד הנתונים וקריאות API מרוחקות אינן נספרות, כך שבקשה יכולה לרוץ יותר מ-30 שניות בלי שתופיע השגיאה הזו.
max_input_time היא מגבלה נפרדת לעיבוד הקלט של הבקשה (למשל נתוני POST והעלאת קבצים). ערך ברירת המחדל שלה הוא -1, כלומר היא משתמשת בערך של max_execution_time. לא ניתן לשנות אותה עם set_time_limit() או ini_set(), אלא רק ב-.user.ini, ב-.htaccess או ב-php.ini.
אם בקשות ארוכות עדיין נקטעות גם אחרי שהגדלתם את המגבלה, שכבה אחרת היא שעוצרת אותן, בדרך כלל עם שגיאת 502, 504 או 524.
request_terminate_timeout של PHP-FPM הורגת את ה-worker אחרי זמן מוגדר. היא כבויה כברירת מחדל, אך חברות אחסון רבות מפעילות אותה.fastcgi_read_timeout ב-Nginx הוא 60 שניות.רק חברת האחסון יכולה להגדיל את הערכים האלה. למשימות כבדות חד פעמיות השתמשו ב-WP-CLI: בשורת הפקודה ערך ברירת המחדל של max_execution_time הוא 0, כלומר אין מגבלה כלל.
WP-Cron רץ כבקשת web רגילה, ולכן גם עליו חלות אותן מגבלות. למשימות מתוזמנות ארוכות, בטלו את WP-Cron והשתמשו ב-cron job אמיתי בשרת שמריץ את wp cron event run --due-now.
הציצו גם בפוסט אופטימיזציה לקונפיגורציה של וורדפרס באמצעות wp-config.php ובתיעוד ההנחיה במדריך של PHP.
הנה כמה שאלות נפוצות על מגבלת הזמן של PHP בוורדפרס:
set_time_limit() בזמן עדכונים.
php_value. ב-PHP-FPM היא גורמת לשגיאת 500. בדקו את PHP SAPI במסך בריאות האתר, ואם מופיע שם fpm-fcgi השתמשו ב-.user.ini.
max_input_time = 300 ב-.user.ini או ב-php.ini, או php_value max_input_time 300 ב-.htaccess כאשר השרת עובד עם mod_php. לא ניתן לשנות אותה מתוך wp-config.php מכיוון ש-PHP לא מאפשר זאת בזמן ריצה.
אם אתם מחפשים דרך להסיר את פירורי הלחם (Breadcrumbs) באתרים העובדים עם ווקומרס, תוכלו לעשות זאת בצורה הבאה:
/**
* Remove the breadcrumbs
*/
function savvy_remove_shop_breadcrumbs() {
if (is_shop()) {
remove_action('woocommerce_before_main_content', 'woocommerce_breadcrumb', 20);
}
}
add_action('init', 'savvy_remove_shop_breadcrumbs');
קוד זה יסיר את פירורי הלחם בעמוד החנות הראשי אך אתם יכולים להשתמש בכל תנאי אחר עבור סוגי עמודים אחרים.
הדוגמה הבאה תגביל את אפשרות העלאת הקבצים בספריית המדיה רק עבור קבצי JPG ו GIF. אם אתם מעוניינים לאפשר גם קבצי PNG לצורך העניין הוסיפו את השורה 'png' => 'image/png' לקוד זה:
function savvy_restrict_mime($mimes) {
$mimes = array(
'jpg|jpeg|jpe' => 'image/jpeg',
'gif' => 'image/gif',
);
return $mimes;
}
add_filter('upload_mimes','savvy_restrict_mime');
קצת יותר על הנושא תמצאו בפוסט כיצד לאפשר העלאת סוגי קבצים נוספים בוורדפרס?.
אם אתם מעוניינים להוסיף קישור לפוסט המלא בסוף תקציר (excerpt) הפוסט, ניתן לעשות זאת בצורה הבאה. הוסיפו את הקוד הבא לקובץ functions.php:
function savvy_excerpt_link_post($text) {
return str_replace( '[...]', '<a href="'. get_permalink( get_the_ID() ) . '" title="' . esc_attr( get_the_title( get_the_ID() ) ) . '">' . '[…]' . '</a>', $text );
}
add_filter('the_excerpt', 'savvy_excerpt_link_post');
קוד זה משתמש בפילטר excerpt_more. למידע נוסף בהבנת הוקים בוורדפרס.