Categories
וורדפרס

ווקומרס

ובחזרה לעתיד.

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

לעריכת הטקסט של לחצן התפריט במובייל בתבנית Storefront:

add_filter( 'storefront_menu_toggle_text', 'condless_storefront_menu_toggle_text' );
function condless_storefront_menu_toggle_text( $text ) {
	$text = __( 'תפריט' );
	return $text;
}

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

ייצוא וייבוא מוצרים באתר בעברית: ליצור מוצר בווקומרס, לייצא את המוצרים לקובץ CSV, להוסיף בקובץ מוצרים, לקודד ל-UTF-8 (ניתן על ידי ייבוא וייצוא מגוגל שיטס), לייבא לווקומרס.

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

add_action( 'woocommerce_thankyou', 'condless_woocommerce_auto_processing_orders');
function condless_woocommerce_auto_processing_orders( $order_id ) {
    if ( ! $order_id )
        return;
    $order = wc_get_order( $order_id );
    if( $order->has_status( 'on-hold' ) ) {
        $order->update_status( 'processing' );
    }
}

שינוי סדר הופעת התיבות בדף התשלום:

add_filter( "woocommerce_checkout_fields", "condless_reordering_checkout_fields", 15, 1 );
function condless_reordering_checkout_fields( $fields ) {
    $billing_order = array(
        'billing_first_name',
        'billing_last_name',
        'billing_email',
        'billing_phone',
        'billing_company',
        'billing_address_1',
        'billing_address_2',
        'billing_postcode',
        'billing_city',
        'billing_state',
        'billing_country'
    );
    $count = 0;
    $priority = 10;
    foreach($billing_order as $field_name){
        $count++;
        $fields['billing'][$field_name]['priority'] = $count * $priority;
    }
    $fields['billing']['billing_email']['class'] = array('form-row-first');
    $fields['billing']['billing_phone']['class'] = array('form-row-last');
    $fields['billing']['billing_postcode']['class'] = array('form-row-first');
    $fields['billing']['billing_city']['class'] = array('form-row-last');
    return $fields;
}

הסתרה של וריאציות מסוימות במוצר:

add_filter( 'woocommerce_dropdown_variation_attribute_options_args', 'condless_hide_dropdown_variation_args', 10, 1 );
function condless_hide_dropdown_variation_args( $args ) {
    $args['show_option_none'] = false;
    foreach( $args['options'] as $key => $option ){
        if( $option === "2,5 kg" ) {
            unset($args['options'][$key]);
        }
    }
    return $args;
}

הוספת ולדיציות לשדות בדף התשלום. לדוגמא, כדי לאפשר תווי ASCII בלבד (כמו גם לא לאפשר אותיות שלא באנגלית):

add_action( 'woocommerce_after_checkout_validation', 'condless_ascii_validate_checkout', 10, 2);
function condless_ascii_validate_checkout( $fields, $errors ){
if (preg_match( '/[^[:ascii:]]/', $fields[ 'billing_first_name' ] ))
$errors->add( 'validation', '<strong>Billing First name</strong> contains non-English letters.' );
if (preg_match( '/[^[:ascii:]]/', $fields[ 'billing_last_name' ] ))
$errors->add( 'validation', '<strong>Billing Last name</strong> contains non-English letters.' );
if (preg_match( '/[^[:ascii:]]/', $fields[ 'billing_company' ] ))
$errors->add( 'validation', '<strong>Billing Company</strong> contains non-English letters.' );
if (preg_match( '/[^[:ascii:]]/', $fields[ 'billing_address_1' ] ))
$errors->add( 'validation', '<strong>Billing Address</strong> contains non-English letters.' );
if (preg_match( '/[^[:ascii:]]/', $fields[ 'billing_address_2' ] ))
$errors->add( 'validation', '<strong>Billing Address details</strong> contains non-English letters.' );
if (preg_match( '/[^[:ascii:]]/', $fields[ 'billing_city' ] ))
$errors->add( 'validation', '<strong>Billing City</strong> contains non-English letters.' );
if (preg_match( '/[^[:ascii:]]/', $fields[ 'shipping_first_name' ] ))
$errors->add( 'validation', '<strong>Shipping First name</strong> contains non-English letters.' );
if (preg_match( '/[^[:ascii:]]/', $fields[ 'shipping_last_name' ] ))
$errors->add( 'validation', '<strong>Shipping Last name</strong> contains non-English letters.' );
if (preg_match( '/[^[:ascii:]]/', $fields[ 'shipping_company' ] ))
$errors->add( 'validation', '<strong>Shipping Company</strong> contains non-English letters.' );
if (preg_match( '/[^[:ascii:]]/', $fields[ 'shipping_address_1' ] ))
$errors->add( 'validation', '<strong>Shipping Address</strong> contains non-English letters.' );
if (preg_match( '/[^[:ascii:]]/', $fields[ 'shipping_address_2' ] ))
$errors->add( 'validation', '<strong>Shipping Address details</strong> contains non-English letters.' );
if (preg_match( '/[^[:ascii:]]/', $fields[ 'shipping_city' ] ))
$errors->add( 'validation', '<strong>Shipping City</strong> contains non-English letters.' );
}

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

add_filter( 'woocommerce_get_price_html', 'condless_simple_product_price_format', 10, 2 );
function condless_simple_product_price_format( $price, $product ) {
   if ( $product->is_on_sale() && $product->is_type('simple') ) {
      $price = sprintf( __( '<div class="was-now-save"><div class="was">היה %1$s</div><div class="now">עכשיו %2$s</div><div class="save">חסוך %3$s</div></div>', 'woocommerce' ), wc_price ( $product->get_regular_price() ), wc_price( $product->get_sale_price() ), wc_price( $product->get_regular_price() - $product->get_sale_price() )  );      
   }
   return $price;
}

הצגת מחיר המוצר כולל ולא כולל מע"מ ואת סכום המע"מ:

add_filter( 'woocommerce_get_price_suffix', 'condless_price_vat_suffix', 10, 4 );
function condless_price_vat_suffix( $html, $instance, $price, $qty ) {
if ( is_product() ) {
        $html .=  ' + ' . wc_price(wc_get_price_including_tax($instance) - wc_get_price_excluding_tax($instance)) . ' מע"מ =  ' . wc_price(wc_get_price_including_tax($instance)); }
        return $html;
}

הסרת ההודעות על מוצר שנוסף/הוסר:

add_filter( 'wc_add_to_cart_message_html', '__return_null');
add_filter('woocommerce_cart_item_removed_notice_type', '__return_null');

פגישות והזמנות.

סיטונאות.

התאמה אישית של המוצרים.

שחזור תוכן של עגלות שננטשו.

אפשרויות למשלוח חינם.

יישום אוטומטי של קופון בעגלה.

מעקב משלוחים (כולל דואר ישראל).

הוספת שיטות תשלום לאפליקציות תשלום חסרות API (כמו ביט (Bit), פפר פיי (PepperPay) ופייבוקס (PayBox)).

עמלות והנחות לפי שיטת תשלום.

הנחות מורכבות.

קביעת שיטת תשלום פר מוצר.

הוספת צורת תשלום של "בקשה להצעת מחיר".

איסוף כספים.

עריכה קבוצתית למוצרים עם וריאציות.

סינון מוצרים.

ריבוי ספקים.

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

add_action('admin_head', 'condless_admin_custom_css');
function condless_admin_custom_css() {
	echo '<style>.chosen-container .chosen-drop { left: 9999px; } </style>'; 
}

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

Categories
וורדפרס

וורדפרס

ואמני הג'אז.

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

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

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

לשיפור אבטחת המערכת ברמת השרת: עדכנו באופן תדיר, בחרו סיסמאות ארוכות וייחודיות, ודאו כי קיימת חומת אש, התאימו מערכת למניעת חדירות, והשביתו את פונקציית ה-XML-RPC ואת אופציית הדפדוף בתיקיות (directory browsing) ע"י הוספת הפקודות לקובץ htaccess.:

<Files "xmlrpc.php">
Order Allow,Deny
Deny from all
</Files>

Options -Indexes

להרצת אתר וורדפרס עם SSL מאחורי רברס פרוקסי יש לערוך את הפקודות בקובץ wp-config.php כך שיופיעו בסדר הנ"ל:

$_SERVER['HTTPS'] = 'on';
require_once(ABSPATH . 'wp-settings.php');

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

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

define('AUTOSAVE_INTERVAL', 300 );
define('WP_POST_REVISIONS', false );

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

.htaccess, php.ini, user.ini, wp-config.php, functions.php.

לביצוע שינויים בקבצי התבנית בוורדפרס יש ליצור לה תבנית בת. לשינוי הפונקציונליות בוורדפרס יש להשתמש בהוקים המובנים (המחולקים לפעולות ולפילטרים), את ההוקים יש להוסיף לקובץ functions.php בתבנית הבת. לשינוי הסגנונות בוורדפרס יש להוסיף את הקוד בלוח בקרה -> עיצוב -> התאמה אישית -> CSS מותאם, ובמטרה לשנות את הסגנונות של לוח הבקרה עצמו:

add_action('admin_head', 'condless_admin_custom_css');
function condless_admin_custom_css() { echo '<style>your_custom_css</style>'; }

להתאמת ההדר בתבנית Twenty Twenty, היעזרו ב-CSS:

.cover-header-inner-wrapper { min-height: 60vh !importent; }
.home .entry-header { display: none; }

לשימוש בבלוק של קוד בשפות הנכתבות מימין לשמאל ולהגבלת אורכו, היעזרו ב-CSS:

pre.wp-block-code {
	text-align: left;
	direction: ltr;
	max-height: 30vh;
}

לאפשר שימוש במשתני session:

add_action('init', 'condless_activate_session', 1);
function condless_activate_session() {
    if(!session_id()) {
        session_start();
    }
}

מסחר אלקטרוני.

תגיות לשיתוף יעיל של פוסטים ברשתות החברתיות.

טפסי יצירת קשר. לעיצוב בהתאמה אישית, היעזרו ב-CSS:

.wpcf7-form {
	background: #dcc8a5;
	padding: 10px 20px;
	border: 2px solid #f6efdf;
	border-radius: 7px;
	max-width: 300px;
}
 
.wpcf7-form p {
	color: #4f2a0f;
	margin-bottom: 5px;
}
 
.wpcf7-form input,
.wpcf7-form textarea {
	background: #f6efdf;
	padding: 5px 7px;
	margin: 4px 0 8px 0;
	border: 3px solid #ccb58c;
	color: #4f4f4f;
	border-radius: 7px;
}
 
.wpcf7-form .wpcf7-submit {
	background: #4f2a0f;
	padding: 5px 15px;
	color: #fff;
	min-width: 100px;
}
 
.wpcf7-form input[type="submit"]:hover {
 	background: #000;
}

ריבוי שפות.

פורומים עם אפשרויות ניהול מגוונות.

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

לוח מודעות.

חיפוש והחלפה בבסיס הנתונים.

סליידר. להתאמה לשפות הנכתבות מימין לשמאל וליצירת וידאו במסך מלא, היעזרו ב-CSS:

.owl-carousel,
.bx-wrapper { direction: ltr; }
.owl-carousel .owl-item { direction: rtl; }

.wp-video, video.wp-video-shortcode, .mejs-container, .mejs-overlay.load {
	width: 100% !important;
	height: 100% !important;
}
.mejs-container {
	padding-top: 56.25%;
}
.wp-video, video.wp-video-shortcode {
	max-width: 100% !important;
}
video.wp-video-shortcode {
	position: relative;
}
.mejs-mediaelement {
	position: absolute;
	top: 0;
	right: 0;
	bottom: 0;
	left: 0;
}
.mejs-controls {
	display: none;
}
.mejs-overlay-play {
	top: 0;
	right: 0;
	bottom: 0;
	left: 0;
	width: auto !important;
	height: auto !important;
}

אפקטי ריחוף על תמונות.

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

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

Categories
אבטחה

אימות דו-שלבי

וקים דוטקום.

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

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

אימות דו שלבי הוא חלק ממערך אבטחת המידע הנדרש בכל עסק. מרבית השירותים ש-Condless מספקת מאפשרים אימות דו-שלבי.

להגדרת TOTP כשלב אימות שני בוורדפרס:

  • התקינו והפעילו את התוסף (באחסון של Condless מגיע מובנה)
  • סרקו את קוד ה-QR דרך אפליקציית ה-OTP שלכם
  • לחצו עדכן פרופיל

להגדרת TOTP כשלב אימות שני בממשק ניהול השרתים:

  • לחצו על כפתור ה-TFA בהגדרות משתמש
  • צרו קוד סודי רנדומלי (אופציונלי)
  • קבעו שם מנפיק (אופציונלי)
  • סרקו את קוד ה-QR דרך אפליקציית ה-OTP שלכם
  • הכניסו את הסיסמא
  • הכניסו את ערך ה-TOTP שהאפליקציה שלכם יצרה
  • לחצו החל

כפי שבוודאי שמתם לב- קים דוטקום איים לתבוע את כל שירותי הרשת המרכזיים המציעים צורת אימות זו, על בסיס פטנט שרשם בשנת 2000. לעת עתה הפטנט שלו בוטל על ידי משרד הפטנטים האירופי, בשל פטנט דומה הנרשם ע"י AT&T כבר בשנת 1998.

Categories
לינוקס

דביאן

וצעצוע של סיפור.

דביאן "באסטר" 10 שוחררה, ו-Condless כמובן מאפשרת לכם להתנסות בהפצה החדשה עם שרת וירטואלי מוכן לשימוש, אז למה אתם מחכים?

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

להגדרת סוגי אימות ב-SSH יש לערוך את הקובץ sshd_config. במטרה להגדיר אילו לוגים ישמרו והיכן, יש לערוך את הקובץ rsyslog.conf לפי ההוראות.

לשיפור שיעורי השליחה המוצלחת של דוא"ל מהשרת, יש להגדיר לשמות המתחם: DMARC ,DKIM ,SPF ולוודא ששם השרת קיים בערכים: A record ,rDNS, ממשק ניהול השרת, בתצורת ה-MTA (כולל mailname), וה-Content filter שבשימוש.

להגדרת רברס פרוקסי השומר על כתובת המבקש המקורי ולא מעביר בקשות לתעודות SSL בשרת אפאצ'י, השתמשו בהוראות:

ProxyPreserveHost On
ProxyPass /.well-known/acme-challenge !
ProxyPass /$PATH http://$LAN-IP:$PORT/$PATH
ProxyPassReverse /$PATH http://$LAN-IP:$PORT/$PATH
ProxyPass / http://$LAN-IP:$PORT/
ProxyPassReverse / http://$LAN-IP:$PORT/

להגדרת חוקי NAT ו-port forwarding ב-iptables השתמשו בהוראות:

post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '$LAN-IP-SUBNET' -o eno1 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '$LAN-IP-SUBNET' -o eno1 -j MASQUERADE
post-up iptables -t nat -A PREROUTING -i eno1 -p tcp -m multiport --dports $PORTS -j DNAT --to $DESTINATION-LAN-IP
post-down iptables -t nat -D PREROUTING -i eno1 -p tcp -m multiport --dports $PORTS -j DNAT --to $DESTINATION-LAN-IP

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