Categories
וורדפרס

וורדפרס SEO

להתאמת וורדפרס למנועי החיפוש:

  • להתאים את האתר והתבנית לגלישה מהמובייל
  • להגדיר שמבנה הקישורים של הפוסטים והמדיה יווצר לפי המזהה שלהם
  • לבחור לקישורים מזהה URL באנגלית
  • לשפר את מהירות האתר
  • להפנות את הגולשים לכתובת המתאימה של האתר (עם\בלי https ו-www)
Categories
וורדפרס

פופאפים בוורדפרס

להתקין את התוסף.

לעדכן את הלקוח בדף מוצר על פספוס הנחה מכיוון שלא רכש ממנו מספיק פריטים, יש להוסיף הטריגר Auto Open ואת התנאים שזה דף המוצר והתנאים המותאמים אישית (יש לעדכן את מזהה המוצר וכמות הפריטים להנחה):

add_filter( 'pum_get_conditions', 'condless_pum_cart_product_quantity_conditions' );
function condless_pum_cart_product_quantity_conditions( $conditions ) {
        return array_merge( $conditions, array(
                'password_page_unlocked' => array(
                        'group'    => __( 'Products', 'woocommerce' ),
                        'name'     => __( 'Products', 'woocommerce' ) . ': ' . __( 'Cart', 'woocommerce' ) . ' ' . __( 'Quantity', 'woocommerce' ),
                        'callback' => 'cart_product_quantity',
                ),
        ) );
}
function cart_product_quantity() {
        foreach ( WC()->cart->get_cart() as $cart_item ) {
                if ( $cart_item['product_id'] == 772 && $cart_item['quantity'] < 3 ) {
                                return true;
                }
        }
        return false;
}
Categories
ווקומרס וורדפרס

יצירה אוטומטית של פוסט בוורדפרס

ליצור עמוד למשתמש ברכישת מוצר מסוים בווקומרס:

add_action( 'woocommerce_order_status_completed', 'condless_create_page' );
function condless_create_page( $order_id ) {
        foreach ( wc_get_order( $order_id )->get_items() as $item ) {
                if ( $item->get_product_id() === 49 ) {
                        $post_details = array(
                                'post_title' => 'My New Page',
                                'post_status' => 'publish',
                                'post_author' => wc_get_order( $order_id )->get_user_id(),
                                'post_type' => 'page',
                        );
                        wp_insert_post( $post_details );
                }
        }
}
Categories
וורדפרס

תבנית וורדפרס Twenty Twenty

והנווד.

ליצור תבנית בת- ליצור את הנתיב wp-content/themes/twentytwenty-child, ובו את הקבצים style.css ו-style-rtl.css עם התוכן:

/*
 Theme Name:   twentytwenty Child
 Template:     twentytwenty
*/

וקובץ functions.php עם התוכן:

<?php
add_action( 'wp_enqueue_scripts', 'condless_theme_enqueue_styles' );
function condless_theme_enqueue_styles() {
        if ( is_rtl() ) {
                wp_enqueue_style( 'parent-style-rtl', get_template_directory_uri() . '/style-rtl.css' );
        }
        else {
                wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
        }
}

לתקן את תצוגת הפונטים עם ה-CSS:


body {
    font-family: "Inter var", -apple-system, BlinkMacSystemFont, "Helvetica Neue", Helvetica, sans-serif;
}

להתאים את מבנה ההדר עם ה-CSS:

.cover-header-inner-wrapper { min-height: 60vh !important; }
.home .entry-header { display: none; }
.home .post-inner { padding: 0; }

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

Categories
וורדפרס

אבטחת וורדפרס

וחדר הסודות.

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

  • לאבטח את השרת
  • להעניק הרשאות: 755 לתיקיות, 644 לקבצים
  • לעדכן באופן תדיר
  • להתקין תוספים מעטים ככל האפשר
  • לדווח על כל פעילות חשודה בחשבון לספק האחסון שלכם
  • להשתמש בכלי המובנה "בריאות אתר"
  • להסיר תבניות שלא בשימוש
  • להתקין תעודת SSL
  • להשתמש במשתמש מסוג "עורך" ולהתחבר לאדמין רק בעת הצורך
  • לבטל את עורך התבניות המובנה בלוח הבקרה- להוסיף לקובץ wp-config.php את ההוראה:
define( 'DISALLOW_FILE_EDIT', true );

למנוע אופציית הדפדוף בתיקיות, למנוע גישה לקבצים ותיקיות חשובים, ולמנוע התקפות XSS- להוסיף לקובץ htaccess. את ההוראות:

Options -Indexes

<FilesMatch "^.*(xmlrpc.php|error_log|wp-config\.php|php.ini|\.[hH][tT][aApP].*)$">
Order deny,allow
Deny from all
</FilesMatch>

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
# Comment the following directive if multisite
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L] 
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>

RewriteCond %{HTTP_USER_AGENT} (libwww-perl|wget|python|nikto|curl|scan|java|winhttp|clshttp|loader) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (<|>|'|%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (;|<|>|'|"|\)|\(|%0A|%0D|%22|%27|%28|%3C|%3E|%00).*(libwww-perl|wget|python|nikto|curl|scan|java|winhttp|HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner) [NC,OR]
RewriteCond %{THE_REQUEST} \?\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} \/\*\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} etc/passwd [NC,OR]
RewriteCond %{THE_REQUEST} cgi-bin [NC,OR]
RewriteCond %{THE_REQUEST} (%0A|%0D) [NC,OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=(\.\.//?)+ [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=/([a-z0-9_.]//?)+ [NC,OR]
RewriteCond %{QUERY_STRING} \=PHP[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} [NC,OR]
RewriteCond %{QUERY_STRING} (\.\./|\.\.) [OR]
RewriteCond %{QUERY_STRING} ftp\: [NC,OR]
RewriteCond %{QUERY_STRING} http\: [NC,OR] 
RewriteCond %{QUERY_STRING} https\: [NC,OR]
RewriteCond %{QUERY_STRING} \=\|w\| [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)/self/(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)cPath=http://(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*iframe.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^i]*i)+frame.*(>|%3E) [NC,OR] 
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [NC,OR]
RewriteCond %{QUERY_STRING} base64_(en|de)code[^(]*\([^)]*\) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} ^.*(\[|\]|\(|\)|<|>).* [NC,OR]
RewriteCond %{QUERY_STRING} (NULL|OUTFILE|LOAD_FILE) [OR]
RewriteCond %{QUERY_STRING} (\./|\../|\.../)+(motd|etc|bin) [NC,OR]
RewriteCond %{QUERY_STRING} (localhost|loopback|127\.0\.0\.1) [NC,OR]
RewriteCond %{QUERY_STRING} (<|>|'|%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
RewriteCond %{QUERY_STRING} concat[^\(]*\( [NC,OR]
RewriteCond %{QUERY_STRING} union([^s]*s)+elect [NC,OR]
RewriteCond %{QUERY_STRING} union([^a]*a)+ll([^s]*s)+elect [NC,OR]
RewriteCond %{QUERY_STRING} (;|<|>|'|"|\)|%0A|%0D|%22|%27|%3C|%3E|%00).*(/\*|union|select|insert|drop|delete|update|cast|create|char|convert|alter|declare|order|script|set|md5|benchmark|encode) [NC,OR]
RewriteCond %{QUERY_STRING} (sp_executesql) [NC]
RewriteRule ^(.*)$ - [F,L]

לבטל אפשרות להרצת PHP- ליצור קובץ htaccess. בתיקיית ההעלאות עם התוכן:

<Files "*.php">
Order Deny,Allow
Deny from All
</Files>

להסתיר גרסת הוורדפרס ושגיאות התחברות- להוסיף לקובץ functions.php שבתבנית הבת:

add_filter( 'the_generator', '__return_false' );
add_filter( 'login_errors', create_function( '$a', "return 'Invalid Input';" ) );

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

find ./ -type f -mtime -15

להסיר נוזקת הפרסומות הקופצות במובייל- למחוק את הקבצים wp-tmp.php ,wp-vcd.php ,wp-feed.php מהתיקיה wp-includes, ואת הקוד שיוצר אותם מהקובץ functions.php שבתבניות.

להסיר נוזקת Japanese Keyword Hack- לנקות את הקוד הזדוני מהקבצים htaccess. ,wp-config.php ,sitemap.xml ומתיקיית ההעלאות.

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