ComGate platobná brána pre WooCommerce

Získať plugin

Manuál – úprava zobrazenia

Náš plugin umožňuje nastaviť niektoré možnosti zobrazenia, ako napríklad separátne zobrazenie jednotlivých platobných metód. V prípade, že máte záujem o inú, špecifickú úpravu zobrazenia, plugin poskytuje možnosť upraviť ho podľa svojich požiadaviek. Takýto zásah však vyžaduje aspoň základné programátorské zručnosti.

Plugin pre zobrazovanie využíva šablónovací systém WooCommerce a WordPress a umožňuje teda jednoduché preťaženie šablóny.

Pre zmenu šablóny postačuje presunúť šablónu z pluginu /wp-content/plugins/wf-woo-comgate/templates/wf_woo_comgate/payment-method.php do vašej témy do wf_woo_comgate/payment-method.php. V prípade zakúpenej témy odporúčame vytvoriť child tému.

Príklad – Zobrazenie platobných metód na hlavnej úrovni

Plugin štandardne poskytuje zobrazenie jednotlivých platobných zvlášť. Po kliknutí na platobnú bránu sa zobrazí blok s jednotlivými možnosťami.

Štandardné zobrazenie platobných možností pluginu

V niektorých prípadoch však môžete mať záujem zobraziť platobné metódy priamo na prvej úrovni bez toho, aby boli zaobalené pod platobnú bránu Comgate. Príklad:

Priame zobrazenie platobných metód

Takéto zobrazenie vyžaduje úpravu šablóny platobnej brány a šablóny témy (príp. WooCommerce). Úprava sa bude týkať dvoch šablónových súborov:

  • /wp-content/plugins/wf-woo-comgate/templates/wf_woo_comgate/payment-method.php – šablóna pluginu pre zobrazenie platobných možností.
  • /wp-content/plugins/woocommerce/templates/checkout/payment-method.php – šablóna WooCommerce pre zobrazenie platobných metód. V prípade použitia témy je potrebné skontrolovať, či téma túto šablónu už nepreťažuje.

Ako prvú je potrebné upraviť šablónu WooCommerce. Pre jej preťaženie je potrebné:

  1. skopírovať súbor šablóny do Vašej témy do /woocommerce/checkout/payment-method.php
  2. upraviť kód tak, aby v prípade zobrazenia danej platobnej brány sa rovno zobrazili platobné metódy a nepoužil sa žiadny iný kód.

Výsledný kód (hrubým vyznačená dôležitá, pridaná časť):

<?php
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

if ($gateway->id == 'wf-woo-comgate') {
	$gateway->payment_fields();
} else {
	?>
	<li class="wc_payment_method payment_method_<?php echo esc_attr( $gateway->id ); ?>">
		<input id="payment_method_<?php echo esc_attr( $gateway->id ); ?>" type="radio" class="input-radio" name="payment_method" value="<?php echo esc_attr( $gateway->id ); ?>" <?php checked( $gateway->chosen, true ); ?> data-order_button_text="<?php echo esc_attr( $gateway->order_button_text ); ?>" />

		<label for="payment_method_<?php echo esc_attr( $gateway->id ); ?>">
			<?php echo $gateway->get_title(); /* phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped */ ?> <?php echo $gateway->get_icon(); /* phpcs:ignore WordPress.XSS.EscapeOutput.OutputNotEscaped */ ?>
		</label>
		<?php if ( $gateway->has_fields() || $gateway->get_description() ) : ?>
			<div class="payment_box payment_method_<?php echo esc_attr( $gateway->id ); ?>" <?php if ( ! $gateway->chosen ) : /* phpcs:ignore Squiz.ControlStructures.ControlSignature.NewlineAfterOpenBrace */ ?>style="display:none;"<?php endif; /* phpcs:ignore Squiz.ControlStructures.ControlSignature.NewlineAfterOpenBrace */ ?>>
				<?php $gateway->payment_fields(); ?>
			</div>
		<?php endif; ?>
	</li>
<?php } ?>

Teraz je potrebné upraviť šablónu pluginu pre zobrazenie platobných metód. Je potrebné:

  1. skopírovať súbor šablóny do Vašej témy do /wf_woo_comgate/payment-method.php
  2. upraviť generovaný HTML kód tak, aby zodpovedal HTML kódu šablóny WooCommerce pre zobrazenie platobných brán. Je však potrebné dodržať správne identifikátory tagu <input>, inak nebude výber platobnej metódy správne fungovať.
  3. pridať <input> tag, ktorý bude zodpovedať zvoleniu našej platobnej brány. (v prípade potreby môžete použiť CSS nastavenie display:none;)
  4. zabezpečiť, aby pri zvolení platobnej metódy bola aj automaticky zmenená platobná brána. V ukážke kódu je toto zabezpečené pomocou JavaScript.

Výsledný kód:

<?php
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

function getSelectedMethod() {
    $data = [];

    if (isset( $_POST['post_data'] )) {
        $data = wp_parse_args( wp_unslash( $_POST['post_data'] ) );
    }

    return isset($data['comgate_channel_method']) ? $data['comgate_channel_method'] : '';
}

?>
<input id="payment_method_<?php echo esc_attr( $gateway->id ); ?>" type="radio" style="display: none;" name="payment_method" value="<?php echo esc_attr( $gateway->id ); ?>" <?php checked( $gateway->chosen, true ); ?> data-order_button_text="<?php echo esc_attr( $gateway->order_button_text ); ?>" />
<?php

    $viewData = $paymentGateway->paymentViewData(get_woocommerce_currency(), WC()->session->get('customer')['shipping_country'], $paymentGatewaySettings);

    $selectedMethod = getSelectedMethod();
    
    foreach ($viewData['availablePaymentMethods'] as $key => $paymentMethod) {
        ?>
	<li class="wc_payment_method payment_method_<?php echo esc_attr( $gateway->id ); ?>">
		<input class="comgate_select_input" name="comgate_channel_method" type="radio" id="payment_method_<?php echo esc_attr( $gateway->id ); ?>_method_<?=$key ?>" value="<?=$key ?>" <?php if ($selectedMethod == $key): ?> checked<?php endif; ?> />

		<label for="payment_method_<?php echo esc_attr( $gateway->id ); ?>_method_<?=$key ?>">
			<?=$paymentMethod['name'] ?>
			<img src="<?=$pluginBaseUrl . $paymentMethod['icon']; ?>" /> 
		</label>
	</li>
		<?php
    }

    wp_add_inline_script('wc-checkout', "jQuery( function( $ ) {
		$('.comgate_select_input').on('change', function() {
			$('#payment_method_" . esc_attr( $gateway->id ) . "').prop('checked', true);
			$('#payment_method_" . esc_attr( $gateway->id ) . "').trigger('click');
		});

		$('input[name=payment_method]').on('change', function(){
			if($(this).val() != '".esc_attr( $gateway->id )."'){
				$('.comgate_select_input').prop('checked', false);
			}
		});

		$( document ).on('updated_checkout', function() {
			$('.comgate_select_input').on('change', function() {
				$('#payment_method_" . esc_attr( $gateway->id ) . "').prop('checked', true);
				$('#payment_method_" . esc_attr( $gateway->id ) . "').trigger('click');
			});
			
			$('input[name=payment_method]').on('change', function(){
				if($(this).val() != '".esc_attr( $gateway->id )."'){
					$('.comgate_select_input').prop('checked', false);
				}
			});
		});
	});");
?>