Dokumentacja
Spis treści:
Wprowadzenie
Dokumentacja jest w trakcie opracowywania. Jeżeli masz jakieś pytania o wdrożenie funkcjonalności – napisz do nas lub zadzwoń.
Wygląd → Dostosuj
Większa część ustawień motywu G44.THEME znajduje się właśnie w tym miejscu: Wygląd → Dostosuj:
Motyw potomny G44 THEME CHILD
To miejsce do bardziej zaawansowanych modyfikacji. Wprowadzanie zmian na stronie poprzez motyw potomny pozwala zachować możliwość aktualizacji głównego motywu G44 THEME. Znajdziesz w nim m.in. takie podstawowe pliki jak:
Dzięki temu motywowi możesz bezpiecznie rozwijać stronę – wszystkie zmiany są odseparowane od motywu głównego i nie zostaną nadpisane podczas jego aktualizacji.
Tutaj znajdziesz przykładowe, gotowe funkcje do wykorzystania w motywie potomnym.
theme.json
Możesz pobrać plik theme.json z katalogu motywu głównego /g44/ i następnie umieścić go w katalogu motywu potomnego /g44-child/.
Pozwoli to na swobodne modyfikowanie niektórych ustawień stylistycznych jak np. domyślne szerokości kontenerów treści na stronie.
Dostępne shortcode
Banery kontaktowe email oraz phone
Możesz je wstawić np. w pozycji nawigacji, w miejscu „Etykieta nawigacji”.
[email icon="envelope" text1="Wsparcie techniczne" text2="Napisz do nas" url="#modal-808" target="_self"]
[phone icon="phone" text1="<b>Jan Kowalski</b><br>Doradca techniczny" text2="+48 123 456 789" url="tel:+48123456789"]
Wyświetlanie linku do podstrony
W miejscu ID możesz wpisać ID strony, privacy lub terms (privacy i terms to odnośniki do polityki prywatności oraz regulaminu, zadziała jeżeli zostały ustalone te strony).
URL ma większy priorytet niż ID.
[url id="privacy" url="" target="_blank" class=""]polityka prywatności[/url]
Ikona social media z przekierowaniem
Kod pobiera domyślny link do profilu z ustawień, które znajdziesz w Wygląd > Dostosuj > G44 THEME > Linki zewnętrzne.
Uzupełniając URL, link domyślny zostanie zastąpiony podanym adresem.
[social page="facebook" url=""]
[social page="instagram"]
[social page="linkedin"]
[social page="youtube"]
[social page="tiktok"]
[social page="x"]
Baner graficzny w nawigacji
Możesz go wstawić np. w pozycji nawigacji, w miejscu „Etykieta nawigacji”.
W miejscu IMG możesz podać ID lub URL do obrazu.
W miejscu SIZE możesz wpisać rozmiar jaki ma zostać wczytany (thumb / medium / large / full) domyślnie: medium
[banner img="123" size="medium" title="Opcjonalny tytuł" button="Czytaj więcej" class=""]
Przykładowe, gotowe funkcje
Pamiętaj, aby modyfikować tylko motyw potomny, czyli /wp-content/themes/g44-child/.
Modyfikacja motywu głównego g44 uniemożliwi w przyszłości jego aktualizacje.
Dodawanie własnej czcionki
Poza samym dodaniem kodu musisz odpowiednio przygotować katalog z dodawanym fontem i umieścić go w katalogu motywu potomnego g44-child/
Kliknij i pobierz przykładową paczkę.
Najpierw jednak sprawdź czy font, który chcesz zastosować nie został już przygotowany do użycia na stronie. Sprawdzisz to tutaj: Wygląd → Dostosuj → G44 THEME → Typografia
Po prawidłowym dodaniu fontu, będzie on dostępny do ustawienia w karcie Typografia.
// Filtr dodający możliwość wyboru własnego fontu w Customizerze
add_filter('g44_typography_choices', function($choices) {
$choices['"Roboto", serif'] = 'Roboto';
return $choices;
});
// Filtr dodający własny font do dostępnych fontów (dla motywu potomnego)
add_filter('g44_available_fonts', function($fonts) {
$fonts['"Roboto", serif'] = get_stylesheet_directory_uri() . '/fonts/roboto/roboto.css'; // Ścieżka do Twojego fontu
return $fonts;
});
Preload głównych plików czcionki (optymalizacja)
Aby zoptymalizować wczytywanie fontów warto skonfigurować precyzyjny preload plików .woff2 wybranej czcionki.
// Preload fontów
add_action('wp_head', function () {
if (is_admin()) return;
// Konfiguracja
// base: 'parent' | 'child' - motyw główny lub potomny
// uri: ścieżka względna od katalogu motywu
// files: lista .woff2
$fonts = [
'dm-sans' => [
'base' => 'parent',
'uri' => '/assets/fonts/dm-sans/',
'files' => [
'rP2Hp2ywxg089UriCZ2IHTWEBlwu8Q.woff2',
'rP2Hp2ywxg089UriCZOIHTWEBlw.woff2',
],
],
'custom-font' => [
'base' => 'child',
'uri' => '/fonts/custom-font/',
'files' => [
'custom-font-file1.woff2',
'custom-font-file2.woff2',
],
],
];
foreach ($fonts as $cfg) {
$base = ($cfg['base'] === 'child') ? get_stylesheet_directory_uri() : get_template_directory_uri();
foreach ($cfg['files'] as $file) {
echo '<link rel="preload" href="' . esc_url($base . $cfg['uri'] . $file) . '" as="font" type="font/woff2" crossorigin>' . "\n";
}
}
}, 1);
Konfiguracja wysyłki maili przez SMTP
Zamiast instalować dodatkową wtyczkę do tego zadania możesz skonfigurować SMTP poniższym kodem. Pamiętaj wprowadzić tam dokładne dane Twojej skrzynki pocztowej i serwera.
// Konfiguracja wysyłki maili przez SMTP
add_action('phpmailer_init', function($phpmailer) {
$phpmailer->isSMTP();
$phpmailer->Host = 'smtp.twojadomena.com'; // Adres serwera SMTP
$phpmailer->SMTPAuth = true; // Wymagane uwierzytelnianie
$phpmailer->Username = 'user@twojadomena.com'; // Login SMTP
$phpmailer->Password = 'haslo'; // Hasło SMTP
$phpmailer->SMTPSecure = 'tls'; // 'tls' (port 587) lub 'ssl' (port 465)
$phpmailer->Port = 587; // Port SMTP (587 dla TLS, 465 dla SSL)
// Nadawca (nagłówki)
$phpmailer->setFrom('user@twojadomena.com', 'Twoja Nazwa', false); // Adres nadawcy
// Envelope sender / Return-Path
$phpmailer->Sender = 'user@twojadomena.com';
// HELO/EHLO
$phpmailer->Helo = 'twojadomena.com';
$phpmailer->Hostname = 'twojadomena.com';
}, 20);
/*
// Opcjonalne wymuszenie nadawcy
add_filter('wp_mail_from', function() {
return 'user@twojadomena.com';
});
add_filter('wp_mail_from_name', function() {
return 'Twoja Nazwa';
});
*/
Pozostałe kody
Poniżej nieopisany jeszcze zbiór kodów, które można już wykorzystywać.
// POST NAV CUSTOM
add_filter( 'g44_post_navigation_labels', function( $labels, $post_type ) {
if ( $post_type === 'g44_offers' ) {
$labels['all'] = 'Wszystkie produkty';
//$labels['all'] = esc_html__( 'All products', 'g44' );
$labels['prev'] = 'Poprzedni produkt';
$labels['next'] = 'Następny produkt';
}
return $labels;
}, 10, 2 );
// g44_offers ARCHIVE CUSTOM
add_filter('g44_offers_archive_args', function ($args) {
$args['type'] = '';
$args['tax'] = '';
$args['cat'] = '';
$args['orderby'] = 'date';
$args['order'] = 'DESC';
$args['ppp'] = -1; // post per page
$args['paged'] = true;
$args['core'] = 'isotope-grid'; // g44-grid, g44-slider-post, isotope-grid
$args['isotopelayout'] = 'fitRows'; // masonry, fitRows
$args['style'] = 1;
$args['maxcol'] = 3;
$args['gap'] = 2;
$args['filter'] = true;
$args['image'] = true;
$args['aspect_ratio'] = false; // square
$args['titleicon'] = false;
$args['meta'] = false;
$args['date'] = false;
$args['excerpt'] = false;
$args['readmore'] = __('See more', 'g44'); // false
return $args;
});
// CPT LOOP ITEM - BEFORE EXCERPT
add_action('g44_loop_item_before_excerpt', function ($post_id, $post_type) {
if ($post_type !== 'g44_offers') {
return; // ograniczenie do konkretnego CPT
}
// Twój kod
echo 'Hello World!';
}, 10, 2);
// CPT LOOP ITEM - AFTER EXCERPT
add_action('g44_loop_item_after_excerpt', function ($post_id, $post_type) {
if ($post_type !== 'g44_offers') {
return; // ograniczenie do konkretnego CPT
}
// Twój kod
echo 'Hello World!';
}, 10, 2);
// PAGE TITLE: DODATKOWE TREŚCI
add_action('g44_before_page_title_wrapper', function ($id) {
if ( is_tax('offers_cat') ) {
echo '<div class="offers-cat-intro">Własny HTML dla kategorii ofert. Miejsca możesz dowolnie określać.</div>';
}
}, 10, 1);
// Zmiana statusu zamówienia na completed gdy są produkty wirtualne
add_action('woocommerce_order_status_changed', 'g44_auto_complete_virtual');
function g44_auto_complete_virtual($order_id) {
if ( ! $order_id ) {
return;
}
$order = wc_get_order( $order_id );
if ( $order && $order->get_status() === 'processing' ) {
$virtual_order = true;
foreach ( $order->get_items() as $item ) {
if ( $item->get_type() === 'line_item' ) {
$product = $item->get_product();
if ( $product && ! $product->is_virtual() ) {
$virtual_order = false;
break;
}
}
}
if ( $virtual_order ) {
$order->update_status( 'completed' );
}
}
}
// Dodatkowy checkbox w formularzu zamówienia
// Opcjonalna faktura na firmę
// Zaznaczenie pokaże pola: NIP (dodany przez Fakturownię) i Nazwa firmy)
// Działa z ustawieniem Fakturowni: Wystawianie faktur - Zawsze, automatycznie
add_filter( 'woocommerce_checkout_fields', 'g44_add_billing_faktura_checkbox', 20 );
function g44_add_billing_faktura_checkbox( $fields ) {
$fields['billing']['billing_faktura'] = array(
'type' => 'checkbox',
'label' => 'Chcę otrzymać fakturę na firmę',
'required' => false,
'class' => array( 'form-row-wide', 'g44-company-invoice' ),
'priority' => 25,
);
return $fields;
}
// Dodanie [button] w CF7
add_action( 'wpcf7_init', function() {
wpcf7_add_form_tag( 'button', 'g44_cf7_button_handler' );
});
function g44_cf7_button_handler( $tag ) {
$tag = new WPCF7_FormTag( $tag );
$label = $tag->values[0] ?? __( 'Wyślij', 'contact-form-7' );
$class = wpcf7_form_controls_class( $tag->type );
if ( $tag->has_option( 'class' ) ) {
$user_classes = (array) $tag->get_class_option();
$class .= ' ' . implode( ' ', $user_classes );
}
$atts = [];
if ( $tag->has_option( 'id' ) ) {
$atts[] = 'id="' . esc_attr( $tag->get_id_option() ) . '"';
}
if ( $tag->has_option( 'name' ) ) {
$atts[] = 'name="' . esc_attr( $tag->name ) . '"';
}
$button = sprintf(
'<button type="submit" class="button %s" %s>%s</button>',
esc_attr( trim( $class ) ),
implode( ' ', $atts ),
esc_html( $label )
);
$loader = '<span class="wpcf7-spinner"></span>';
return sprintf(
'<span class="wpcf7-form-control-wrap %s">%s%s</span>',
esc_attr( $tag->name ),
$button,
$loader
);
}
// Obsługa strzałek klawiatury w portfolio
document.addEventListener('DOMContentLoaded', function () {
document.addEventListener('keydown', function (event) {
let url = false;
if (event.key === 'j' || event.key === 'ArrowLeft') {
const prevLink = document.querySelector('.nav-post a.prev');
if (prevLink) {
url = prevLink.getAttribute('href');
}
}
if (event.key === 'k' || event.key === 'ArrowRight') {
const nextLink = document.querySelector('.nav-post a.next');
if (nextLink) {
url = nextLink.getAttribute('href');
}
}
if (url) {
window.location.href = url;
}
});
});