Za prvé je třeba říci, že tohle není jediné ani nejlepší řešení. Ale je funkční.
Pro vložení potřebného kódu jsem využil filtr ‘woocommerce_cart_shipping_method_full_label‘, který přidá HTML k názvu dopravy. Obvykle ho používám ke vložení log jednotlivých dopravců – viz. níže. V tomto konkrétním případě je na webu 6 doprav – Zásilkovna, DPD a PPL pro ČR a pro SR.
add_filter('woocommerce_cart_shipping_method_full_label', 'filter_woocommerce_cart_shipping_method_full_label', 10, 2); function filter_woocommerce_cart_shipping_method_full_label($label, $method) { if ($method->id == 'flat_rate:2') { $label = $label . '<br><img class="shipping-logo-img" src="https://insideu.cz/wp-content/uploads/2024/05/zasilkovna.png">'; } else if ($method->id == 'flat_rate:4') { $label = $label . '<br><img class="shipping-logo-img" src="https://insideu.cz/wp-content/uploads/2024/05/zasilkovna.png">'; } else if ($method->id == 'flat_rate:5') { $label = $label . '<br><img class="shipping-logo-img" src="https://insideu.cz/wp-content/uploads/2024/05/dpd.png">'; } else if ($method->id == 'flat_rate:7') { $label = $label . '<br><img class="shipping-logo-img" src="https://insideu.cz/wp-content/uploads/2024/05/dpd.png">'; } else if ($method->id == 'flat_rate:6') { $label = $label . '<br><img class="shipping-logo-img" src="https://insideu.cz/wp-content/uploads/2024/05/ppl.png">'; } else if ($method->id == 'flat_rate:8') { $label = $label . '<br><img class="shipping-logo-img" src="https://insideu.cz/wp-content/uploads/2024/05/ppl.png">'; } return $label; }
Kód pro vložení jednotlivých doprav jsem vložil za jednotlivá loga.
if ($method->id == 'flat_rate:2') { $label = $label . '<br><img class="shipping-logo-img" src="https://insideu.cz/wp-content/uploads/2024/05/zasilkovna.png">[TADY BUDE VLOŽENÝ KÓD]'; }
Zásilkovna
Nejprve něco HTML. Je třeba vytvořit tlačítko, na které zákazník klikne, dále musíme někam vypsat vybrané místo – vypisuje se do div.packetaAddress. Do skrytého pole ‘.packetaAddressID‘ se pak vypisuje ID výdejního místa pro pozdější použití.
<br><div id="packetaButton" class="packetaButton">Vyberte místo vyzvednutí</div> <div id="packetaAddress" class="packetaAddress"></div> <input type="hidden" id="packetaAddressID" class="packetaAddressID">
Vše je samozřejmě potřeba nastylovat.
<style> #packetaButton { padding: 10px 12px; border-radius: 3px; border: 1px solid #cb0000; background-color: #ffffff; color: #cd0000; display: inline-block; } #packetaButton:hover { cursor: pointer; color: #ffffff; background-color: #cd0000; } #packetaAddress { margin: 5px 0; font-weight: 400; } </style>
A nakonec script, který zajistí, aby to celé fungovalo. API key získáte v klientské sekci Zásilkovny.
<script> var packetaSelectorOpen = "#packetaButton"; var packetaSelectorBranchName = "#packetaAddress"; var packetaSelectorBranchId = "#packetaAddressID"; var packetaCountry = "cz"; var packetaWidgetLanguage = "cs"; var packetaPrimaryButtonColor = "#39b54a"; var packetaBackgroundColor = "#ffffff"; var packetaFontColor = "#555555"; var packetaFontFamily = "Arial"; </script> <script src="https://widget.packeta.com/v6/www/js/packetaWidget.js" data-api-key="[váš API key]"></script>
Trochu popisu ke scriptu.
var packetaSelectorOpen = "#packetaButton";
tady určujeme, který html prvek má sloužit, jako tlačítko.
var packetaSelectorBranchName = "#packetaAddress";
v jakém html prvku se bude zobrazovat adresa výdejního místa
var packetaSelectorBranchId = "#packetaAddressID";
kam se uloží ID výdejního místa
var packetaCountry = "cz"; var packetaWidgetLanguage = "cs";
packetaCountry určuje omezení výdejních míst na danou zemi, zde se zobrazí pouze výdejní místa v ČR
packetaWidgetLanguege určuje jazyk widgetu
DPD
Podobně jako Zásilkovnu vložíme i kód pro DPD. Zatímco Zásilkovna se o vše postará sama, u DPD si musíme vytvořit vlastní modální okno a jeho ovládání.
<div id="dpdButton">Místo vyzvednutí</div> <div id="dpdAddress" class="dpdAddress"></div> <input type="hidden" id="dpdAddressID" class="pplAddressID"> <div class="dpd-modal-overlay"></div> <div class="dpd-modal-box"> <div id="dpd-parcelshop-map"> <iframe src="https://api.dpd.cz/widget/latest/index.html?countries=CZ"></iframe> </div> </div>
Opět zde máme tlačítko .dpdButton pro výběr (otevření modálního okna). Div .dpdAddress, kam se vypíše adresa výdejního místa. A skrytý input .dpdAddressID pro uložení ID výdejního místa.
A opět musíme vše nastylovat.
<style> .shipping-logo-img { height: 20px; width: auto; } #dpdButton, #dpd-close-modal-button { padding: 10px 12px; border-radius: 3px; border: 1px solid #dc0031; background-color: #ffffff; color: #dc0031; display: inline-block; } #dpdButton:hover, #dpd-close-modal-button:hover { cursor: pointer; color: #ffffff; background-color: #dc0031; } .dpd-modal-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); display: none; z-index: 995; } .dpd-modal-box { position: fixed; left: 10vw; top: 10vh; margin: 0 auto; height: 80vh; width: 80vw; display: none; z-index: 996; background-color: #fff; } #dpd-close-modal-button { position: absolute; top: 10px; right: 10px; z-index: 20; } .dpd-parcelshop-map { height: 100%; width: 100%; } #dpdAddress { margin: 5px 0; font-weight: 400; } iframe { display: relative; width: 100%; height: 80vh; border: none; } </style>
A nakonec opět script, u DPD nepotřebujete žádný API key.
<script> var dpdModalButton = document.querySelector("#dpdButton"); var dpdModalOverlay = document.querySelector(".dpd-modal-overlay"); var dpdModalBox = document.querySelector(".dpd-modal-box"); var dpdCloseButton = document.querySelector("#dpd-close-modal-button"); var dpdResultAddressInput = document.querySelector("#dpdAddress"); var dpdResultIDInput = document.querySelector("#dpdAddressID"); dpdModalButton.addEventListener("click", function () { dpdModalOverlay.style.display = "block"; dpdModalBox.style.display = "block"; }); window.addEventListener("message", (event) => { if (event.data.dpdWidget) { dpdResultIDInput.value = event.data.dpdWidget.id dpdResultAddressInput.innerHTML = event.data.dpdWidget.pickupPointResult; dpdModalOverlay.style.display = "none"; dpdModalBox.style.display = "none"; } }, false); window.addEventListener("message", (event) => { if (event.data.dpdWidget && event.data.dpdWidget.message === "widgetClose") { dpdModalOverlay.style.display = "none"; dpdModalBox.style.display = "none"; } }, false); </script>
PPL
<div id="pplButton">Místo vyzvednutí</div> <div id="pplAddress" class="pplAddress"></div> <input type="hidden" id="pplAddressID" class="pplAddressID"> <div class="modal-overlay"></div> <div class="ppl-modal-box"> <div id="ppl-close-modal-button">Zavřít okno</div> <div id="ppl-parcelshop-map" data-country="cz"></div> </div>
<style> #pplButton, #ppl-close-modal-button { padding: 10px 12px; border-radius: 3px; border: 1px solid #014b94; background-color: #ffffff; color: #014b94; display: inline-block; } #pplButton:hover, #ppl-close-modal-button:hover { cursor: pointer; color: #ffffff; background-color: #014b94; } .modal-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); display: none; z-index: 995; } .ppl-modal-box { position: fixed; left: 10vw; top: 10vh; margin: 0 auto; height: 80vh; width: 80vw; display: none; z-index: 996; } #ppl-close-modal-button { position: absolute; top: 10px; right: 10px; z-index: 20; } .ppl-parcelshop-map { height: 100%; width: 100%; } #pplAddress { margin: 5px 0; font-weight: 400; } </style>
<script> var modalOverlay = document.querySelector(".modal-overlay"); var modalBox = document.querySelector(".ppl-modal-box"); var closeButton = document.querySelector("#ppl-close-modal-button"); var resultAddressInput = document.querySelector("#pplAddress"); var resultIDInput = document.querySelector("#pplAddressID"); var modalButton = document.querySelector("#pplButton"); modalButton.addEventListener("click", function () { modalOverlay.style.display = "block"; modalBox.style.display = "block"; var link = document.createElement("link"); link.rel = "stylesheet"; link.href = "https://www.ppl.cz/sources/map/main.css"; var script = document.createElement("script"); script.src = "https://www.ppl.cz/sources/map/main.js"; document.head.appendChild(link); document.head.appendChild(script); }); closeButton.addEventListener("click", function () { modalOverlay.style.display = "none"; modalBox.style.display = "none"; }); document.addEventListener( "ppl-parcelshop-map", (event) => { resultAddressInput.innerHTML = event.detail["name"] + ", " + event.detail["street"] + ", " + event.detail["city"]; resultIDInput.value = event.detail["id"]; modalOverlay.style.display = "none"; modalBox.style.display = "none"; } ); </script>