🪝

Hooklar ve Filterlar

8 makaleler Fatih ÇELEBİ Fuat POYRAZ Tarafından Fatih ÇELEBİ and Fuat POYRAZ

WooCommerce Değişken Verilerin Çevrilmesi

Bilgilendirme: Bu döküman geliştiriciler için uygundur. Yardım için bizlerle iletişime geçebilirsiniz. POS Entegratör ile WooCommerce ödeme sayfanızda Ödeme butonu, ödeme yöntem adı ve açıklama gibi değişken verilerin diğer diller çevrilmesi için aşağıdaki hookları kullanarak manipüle edebilirsiniz. $this->title = apply_filters( 'gpos_woocommerce_gateway_title_text', $this->woocommerce_settings->get_setting_by_key( 'title' ) ); $this->description = apply_filters( 'gpos_woocommerce_gateway_description_text', $this->woocommerce_settings->get_setting_by_key( 'description' ) ); $this->order_button_text = apply_filters( 'gpos_woocommerce_gateway_button_text', $this->woocommerce_settings->get_setting_by_key( 'button_text' ) ); Örnek add_filter( 'gpos_woocommerce_gateway_title_text', function( $title ) { return __( 'Kredi/Banka Kartı', 'tema_adi' ); } ); Filter ile gerekli hooklara müdehale edildekten sonra domain olarak tema adınızı girebilirsiniz. Sonrasında loco translate ile temanızın üzerinden çevirileri yapabilirsiniz.

Eklentilerden Gelen Başarılı Ödemeler

Elementor, Ninja Forms ve benzeri eklentilerde başarılı ödeme geçildiğinde “gpos_success_transaction” hook’una tutunabilirsiniz. Bu hook, başarılı ödeme işlemlerini yakalayarak belirlediğiniz eylemleri gerçekleştirebilmenizi sağlar. Örneğin; başarılı işlem sonrasında mail gönderimi için bu bağlantıyı ziyaret edebilirsiniz.

Kullanıcı Rollerine Göre POS Entegratör Erişimi

POS Entegratör eklentisine belirli kullanıcı rollerinin erişimini sağlamak için gpos_menu_capability filtresini kullanabilirsiniz. Bu filtre, POS Entegratör menüsüne hangi kullanıcı rolünün erişebileceğini belirlemenizi sağlar. Filtre Kullanımı: add_filter('gpos_menu_capability', fn() => 'edit_posts'); Yukarıdaki örnekte, “edit_posts” yetkisine sahip kullanıcıların (genellikle editör ve üzeri) POS Entegratör menüsüne erişebilmesi sağlanmıştır. Kendi kullanıcı rolünüze uygun yetkiyi belirlemek için gpos_menu_capability filtresini kullanabilirsiniz.

İptal ve iade edilen işlemlerin WooCommerce durumunu değiştirme

POS Entegratör eklentimizin 3.7.60 sürümüyle birlikte, iptal edilen veya iade edilen siparişler WooCommerce tarafında otomatik olarak “İade Edildi” (refunded) durumuna geçirilmektedir. Bu güncelleme, e-ticaret süreçlerinizde iade ve iptal işlemlerini daha düzenli ve standart hale getirmeyi hedeflemektedir. Ancak, bazı kullanıcılarımız bu varsayılan durumu kendi iş süreçlerine göre değiştirmek isteyebilir. İşte tam da bu noktada yeni filter hook’ları devreye giriyor. Kullanıcılar bu hook’ları kullanarak sipariş iptali ve iadesi için istedikleri WooCommerce durumlarına geçiş yapabilirler. İptal Edilen Siparişler için Durum Değişikliği: İptal edilen siparişlerin varsayılan olarak “İade Edildi” statüsüne geçirilmesi yerine başka bir duruma (örneğin “İptal Edildi” – cancelled) geçirmek isterseniz, aşağıdaki filter hook’u kullanabilirsiniz: apply_filters( 'gpos_wc_cancelled_status', 'refunded' ) Bu hook, iptal edilen siparişlerin hangi duruma geçirileceğini kontrol etmenizi sağlar. Örneğin, ‘refunded’ yerine ‘cancelled’ gibi başka bir WooCommerce sipariş durumunu belirleyebilirsiniz. İade Edilen Siparişler için Durum Değişikliği: Benzer şekilde, iade edilen siparişlerin de varsayılan olarak “İade Edildi” statüsünden farklı bir duruma geçirilmesini istiyorsanız aşağıdaki hook’u kullanabilirsiniz: apply_filters( 'gpos_wc_refunded_status', 'refunded' ) Bu hook ile iade işlemlerinin durumunu istediğiniz şekilde özelleştirebilirsiniz.

Vakıfbank İstek Adresi Değiştirme

Bazı VakıfBank sanal POS kullanıcılarına bankadan gelen bilgilendirme doğrultusunda, varsayılan API adresi yerine aşağıdaki yeni endpoint’in kullanılması istenmektedir: https://apigw.vakifbank.com.tr:8443/virtualPos/Vposreq POS Entegratör, bu tür özel durumlar için geliştirici düzeyinde özelleştirmeye imkan tanımaktadır. Aşağıdaki kod parçacığını sitenizin functions.php dosyasına ekleyerek, yalnızca VakıfBank POS entegrasyonu için API URL’sini güncelleyebilirsiniz. add_filter( 'gpos_payflex_live_api_url', function ( $url, $gateway ) { // Yalnızca VakıfBank gateway sınıfı için özel URL döndür if ( $gateway instanceof GPOSPRO_VakifBank_Gateway ) { return 'https://apigw.vakifbank.com.tr:8443/virtualPos/Vposreq'; } return $url; }, 10, 2 ); Açıklama: Bu filtre sayesinde: - Sadece VakıfBank POS entegrasyonu özelinde geçerli olacak şekilde API URL’si değiştirilebilir. - Diğer banka ve ödeme kuruluşlarının bağlantı ayarları etkilenmeden kalır. Not: Banka tarafından herhangi bir teknik doküman sağlanmadıysa, bu işlem tamamen bankanın yönlendirmesiyle yapılmalıdır. İleride bir güncelleme olması durumunda entegrasyonun tekrar kontrol edilmesi önerilir.

3D ve iFrame Ödeme Sayfalarını Özelleştirme

POS Entegratör 3D ve ödeme sayfalarında standart olarak web sitenizden aykırı bir görüntü olmaması için temanızın header ve footer dosyalarını dahil eder ancak bunu değiştirmek veya özelleştirmek isteyebilirsiniz. 1. Gurmepos/views/redirect-render.php dosyasını kopyalayın. 2. Temanızın altına “gurmepos” adında bir klasör oluşturun ve dizine kopyaladığınız dosyayı yapıştırın. Bu düzenlemeleri yaptığınızda POS Entegratör oluşturduğunuz klasördeki yapıyı okuyarak iFrame sayfaları oluşturur burada HTML, CSS düzenlemeleri yaparak sayfayı dilediğiniz gibi özelleştirebilirsiniz. Redirect.render.php dosyası: <?php /** * GurmePOS 3D Yönlendirme ve iFrame ödemeler için sayfayı render etmeye yarayan kod parçacağı. Temanıza göre özelleştirmek için lütfen bu dosyayı kopyalayın ve temanızın * altında gurmepos klasörü oluşturarak yapıştırın. Ardından dosyada özelleştirmeler yapabilirsiniz. * * @package GurmeHub * @var array $args Redirect fonksiyonundan gelen parametreler. */ if ( $args['content'] ) { if ( $args['is_iframe'] ) { get_header(); echo $args['content']; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped get_footer(); } else { echo $args['content']; //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } } else { ?> <center style="font-family:Roboto;"> <div style="font-size:36px; margin:20px 0;"> <?php esc_html_e( 'Incorrect transaction, please refresh the payment page and try again.', 'gurmepos' ); ?> </div> <button style="background-color:#1c64f2; color:#fff; border-color:#1c64f2; border-radius:999px; padding:10px 20px;" onclick="window.history.back()"> <?php esc_html_e( 'Back to payment page', 'gurmepos' ); ?> </button> </center> <?php } exit; Dikkat : Güncellemeler ile birlikte bu kod parçacığı değişiklik gösterebilir

Tahsilat Formunu Özelleştirme

Uygulamanızda, kullanıcıların ödeme alım bilgilerini yazdırmak için kullanılan tahsilat formunu ihtiyaçlarınıza göre özelleştirebilirsiniz. Aşağıdaki adımları izleyerek tahsilat formunu kolayca düzenleyebilirsiniz. 1. Child Tema Oluşturma Tahsilat formunu düzenlemeye başlamadan önce, kullandığınız aktif temanın bir child temasını oluşturmanız gerekmektedir. Child tema oluşturma işlemi, ana temada yapılan güncellemeler sırasında yaptığınız özelleştirmelerin kaybolmamasını sağlar. 2. Yeni Dosya Oluşturma Child temayı oluşturduktan sonra, child temanın altında bir gurmepos-form/collection-receipt.php dosyası oluşturmanız gerekmektedir. Örnek dosya yolu şu şekilde olmalıdır: wp-content/themes/child-theme/gurmepos-form/collection-receipt.php 3. Şablon Dosyasını Kopyalama Şimdi, ödeme alım bilgilerinin mevcut şablon dosyasını child temaya kopyalamanız gerekiyor. Bunun için şu adımları izleyin: - wp-content/plugins/gurmepos-form/templates/collection-receipt.php dosyasına gidin. - Bu dosyanın içindeki tüm kodları kopyalayın. - Kopyaladığınız kodları, child tema altında oluşturduğunuz gurmepos-form/collection-receipt.php dosyasına yapıştırın. 4. Tahsilat Formunu Özelleştirme Artık collection-receipt.php dosyasını dilediğiniz gibi düzenleyebilirsiniz. Ödeme bilgilerini, müşteri detaylarını veya formun genel yapısını ihtiyaçlarınıza göre değiştirebilirsiniz. <?php /** * Tahsilat Makbuzu * * @package Gurmehub * * @var GPOS_Transaction $transaction */ $transaction = $args['transaction']; $titles = [ 'full_name' => __( 'Name', 'gurmepos' ), 'email' => __( 'E-Mail', 'gurmepos' ), 'phone' => __( 'Phone', 'gurmepos' ), 'address' => __( 'Address', 'gurmepos' ), 'state' => __( 'State', 'gurmepos' ), 'city' => __( 'City', 'gurmepos' ), ]; $site_logo = wp_get_attachment_image_src( get_theme_mod( 'custom_logo' ), 'full' )[0]; $site_desc = get_bloginfo( 'description' ); $site_title = get_bloginfo( 'title' ); ?> <!DOCTYPE html> <html lang="tr"> <head> <meta charset="utf-8"> <meta name="x-apple-disable-message-reformatting"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="format-detection" content="telephone=no, date=no, address=no, email=no, url=no"> <meta name="color-scheme" content="light dark"> <meta name="supported-color-schemes" content="light dark"> <style> *{ -webkit-print-color-adjust: exact; font-family: "Roboto","Arial",sans-serif; word-break: break-all; } </style> </head> <body style="margin: 0; width: 100%; padding: 0; -webkit-font-smoothing: antialiased; word-break: break-word" onload="window.print()"> <div role="article" aria-label lang="tr"> <div style="display: flex; flex-direction: column; gap: 24px; background-color: #fff; padding: 24px; color: #000"> <div style="display: flex; justify-content: space-between"> <div style="display: flex; width: 66.66666%; flex-direction: column; padding: 24px; border: 1px solid #64748b"> <?php foreach ( [ 'full_name', 'email', 'phone', 'address', 'state', 'city' ] as $prop ) : ?> <?php $fnc = "get_customer_{$prop}"; ?> <?php if ( method_exists( $transaction, $fnc ) && $transaction->$fnc() ) : ?> <div style="display: flex; padding: 4px;"> <div style="width: 20%;"> <?php echo esc_html( $titles[ $prop ] ); ?> </div> <div style="width: 80%; font-weight: bold;"> : <?php echo esc_html( $transaction->$fnc() ); ?> </div> </div> <?php endif; ?> <?php endforeach; ?> </div> <div style="display: flex; width: 33.333333%; flex-direction: column; align-items: center; justify-content: space-between;"> <div style="font-weight: bold;"><?php echo esc_html( $site_title ); ?></div> <div><img src="<?php echo esc_url( $site_logo ); ?>" alt=""></div> <div style="font-size: 12px;"><?php echo esc_html( $site_desc ); ?></div> </div> </div> <div style="width: 100%; text-align: right;"> <?php echo esc_html_e( 'Date', 'gurmepos' ); ?>: <span style="font-weight: bold;"> <?php echo esc_html( $transaction->get_date() ); ?> </span> </div> <div style="display: flex; flex-direction: column; padding: 24px; border: 1px solid #64748b;"> <?php foreach ( $transaction->get_lines() as $key => $line ) : ?> <div style="display: flex; padding: 8px; <?php echo esc_attr( 0 === $key % 2 ? ' background-color: #e2e8f0;' : '' ); ?> "> <div style="width: 75%"><?php echo esc_html( $line->get_name() ); ?></div> <div style="width: 25%; text-align: right; font-weight: bold;"><?php echo esc_html( number_format( $line->get_total(), 2, ',', '.' ) ); ?>&nbsp;<?php echo esc_html( $transaction->get_currency() ); ?></div> </div> <?php endforeach; ?> </div> <div style="display: flex;"> <div style="width: 75%; font-size: 8px;"><?php esc_html_e( 'It is not an official document, it is produced for informational purposes only.', 'gurmepos' ); ?></div> <div style="width: 25%; text-align: right;"> <?php echo esc_html_e( 'Total', 'gurmepos' ); ?>: <span style="font-weight: bold;"> <?php echo esc_html( number_format( $transaction->get_total(), 2, ',', '.' ) ); ?>&nbsp;<?php echo esc_html( $transaction->get_currency() ); ?> </span> </div> </div> </div> </div> </body> </html>

Özel Tahsilat Formlarının E-Postlarını Düzenleme

Tahsilat E-postasını Özelleştirme POS Entegratör ile oluşturduğunuz Özel Tahsilat Formu üzerinden gönderilen e-postanın şablonunu ve gönderen bilgilerini aşağıdaki yöntemlerle özelleştirebilirsiniz. 1. E-posta Şablonunun Özelleştirilmesi Şablon dosyasını temanız üzerinden ezmek (override) için aşağıdaki dizin yapısını kullanarak dosyayı kopyalayıp düzenleyebilirsiniz: gurmepos-form/templates/collection-success.php ↓ themes/tema_isminiz/gurmepos-form/collection-success.php Eklenti öncelikle temanızdaki bu dosyayı kontrol eder. Tema içerisinde ilgili şablon bulunmazsa, otomatik olarak eklenti içerisindeki varsayılan şablon kullanılmaya devam eder. Şablonu doğrudan eklenti klasöründe düzenlemeyiniz. Eklenti güncellemelerinde yaptığınız değişiklikler kaybolacaktır. 2. Gönderen Adı ve E-posta Adresinin Değiştirilmesi Gönderen adı ve e-posta adresi, WordPress'in wp_mail() fonksiyonunun varsayılan değerleri ile gönderilmektedir. Kullanmakta olduğunuz bir SMTP eklentisi varsa, çoğunda ayarlar bölümünden wp_mail() için From Name (Gönderen Adı) ve From Email (Gönderen E-posta Adresi) bilgilerini değiştirebilirsiniz. Öncelikle SMTP eklentinizin ayarlarını kontrol etmenizi öneririz. Örnek SMTP eklentisi kullanmıyorsanız, gönderen bilgilerini aşağıdaki filtreler ile değiştirebilirsiniz: add_filter( 'wp_mail_from', function( $email ) { return 'info@siteniz.com'; } ); add_filter( 'wp_mail_from_name', function( $name ) { return 'Site Adınız'; } ); Bu kodları temanızın functions.php dosyasına veya tercihen bir site eklentisine (mu-plugin) ekleyebilirsiniz. Not: Bu filtreler site genelinde çalışır ve WordPress'in gönderdiği tüm e-postaları etkiler. Yalnızca tahsilat e-postasında geçerli olmasını istiyorsanız, filtreleri e-posta gönderiminden hemen önce ekleyip sonrasında remove_filter() ile kaldırmanız gerekir.