{"id":743,"date":"2025-09-29T08:39:57","date_gmt":"2025-09-29T08:39:57","guid":{"rendered":"https:\/\/holyhead-dublin.com\/de\/?page_id=743"},"modified":"2026-08-28T12:42:22","modified_gmt":"2026-08-28T12:42:22","slug":"irish-ferries-timetable","status":"publish","type":"page","link":"https:\/\/holyhead-dublin.com\/de\/timetable\/irish-ferries-timetable\/","title":{"rendered":"Irish Ferries Timetable"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"743\" class=\"elementor elementor-743\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-209b6bce e-flex e-con-boxed e-con e-parent\" data-id=\"209b6bce\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5ec88fac elementor-widget elementor-widget-text-editor\" data-id=\"5ec88fac\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Neben Irish Ferries bedient auch Stena Line diese Route. Den kompletten Fahrplan mit allen Abfahrten finden Sie <a href=\"https:\/\/holyhead-dublin.com\/de\/timetable\/\">hier<\/a>.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-78fe777a e-con-full e-flex e-con e-parent\" data-id=\"78fe777a\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-32e058e0 e-con-full e-flex e-con e-child\" data-id=\"32e058e0\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d6feb1e elementor-widget elementor-widget-global elementor-global-3364 elementor-widget-breadcrumbs\" data-id=\"d6feb1e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"breadcrumbs.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<p id=\"breadcrumbs\"><span><span><a href=\"https:\/\/holyhead-dublin.com\/de\/\">Home<\/a><\/span><\/span><\/p>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3beab52a elementor-widget elementor-widget-heading\" data-id=\"3beab52a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Irish Ferries Fahrplan Holyhead-Dublin<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2137cd41 elementor-widget elementor-widget-text-editor\" data-id=\"2137cd41\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Abfahrtszeiten Holyhead &amp; Abfahrtszeiten Dublin<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-28b0c20d e-con-full e-flex e-con e-child\" data-id=\"28b0c20d\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-696a3436 e-flex e-con-boxed e-con e-parent\" data-id=\"696a3436\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-36f5b167 elementor-widget elementor-widget-text-editor\" data-id=\"36f5b167\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"color: #ff0000;\">\u25cf\u00a0 <\/span>Der schnelle Katamaran von Irish Ferries, die <strong>Dublin Swift<\/strong>, ist auf dieser Route derzeit au\u00dfer Betrieb. Zum Sommer hin nimmt sie den Betrieb wieder auf.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-37cec282 e-flex e-con-boxed e-con e-parent\" data-id=\"37cec282\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-40f7a865 elementor-widget elementor-widget-text-editor\" data-id=\"40f7a865\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Fahrplan Hafen Holyhead<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7c9ee3e3 elementor-widget elementor-widget-text-editor\" data-id=\"7c9ee3e3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2>Irish Ferries Abfahrten in Holyhead<\/h2><p>Die Reederei <a href=\"https:\/\/holyhead-dublin.com\/de\/irish-ferries\/\">Irish Ferries<\/a> setzt drei verschiedene Schiffe auf der Route zwischen Holyhead und Dublin ein. Im Fahrplan sehen Sie die heutigen Abfahrts- und Ankunftszeiten der F\u00e4hren <strong>Dublin Swift<\/strong>, <strong>Ulysses<\/strong> und<strong> James Joyce<\/strong>. \u00dcber das Datum k\u00f6nnen Sie den Fahrplan auch f\u00fcr andere Tage pr\u00fcfen.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-13a94361 elementor-widget__width-inherit e-n-tabs-mobile elementor-widget elementor-widget-n-tabs\" data-id=\"13a94361\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;tabs_justify_horizontal&quot;:&quot;start&quot;,&quot;horizontal_scroll&quot;:&quot;disable&quot;}\" data-widget_type=\"nested-tabs.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"e-n-tabs\" data-widget-number=\"329859937\" aria-label=\"Tabs. Open items with Enter or Space, close with Escape and navigate using the Arrow keys.\">\n\t\t\t<div class=\"e-n-tabs-heading\" role=\"tablist\">\n\t\t\t\t\t<button id=\"e-n-tab-title-3298599371\" data-tab-title-id=\"e-n-tab-title-3298599371\" class=\"e-n-tab-title\" aria-selected=\"true\" data-tab-index=\"1\" role=\"tab\" tabindex=\"0\" aria-controls=\"e-n-tab-content-3298599371\" style=\"--n-tabs-title-order: 1;\">\n\t\t\t\t\t\t<span class=\"e-n-tab-title-text\">\n\t\t\t\tAbfahrten Holyhead\t\t\t<\/span>\n\t\t<\/button>\n\t\t\t\t<button id=\"e-n-tab-title-3298599372\" data-tab-title-id=\"e-n-tab-title-3298599372\" class=\"e-n-tab-title\" aria-selected=\"false\" data-tab-index=\"2\" role=\"tab\" tabindex=\"-1\" aria-controls=\"e-n-tab-content-3298599372\" style=\"--n-tabs-title-order: 2;\">\n\t\t\t\t\t\t<span class=\"e-n-tab-title-text\">\n\t\t\t\tAnk\u00fcnfte Holyhead\t\t\t<\/span>\n\t\t<\/button>\n\t\t\t\t\t<\/div>\n\t\t\t<div class=\"e-n-tabs-content\">\n\t\t\t\t<div id=\"e-n-tab-content-3298599371\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-3298599371\" data-tab-index=\"1\" style=\"--n-tabs-title-order: 1;\" class=\"e-active elementor-element elementor-element-3a90d3c6 e-con-full e-flex e-con e-child\" data-id=\"3a90d3c6\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1db41a2 elementor-widget elementor-widget-shortcode\" data-id=\"1db41a2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div class=\"tp-wrap\" data-config=\"{&quot;rest&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/wp-json\\\/timetables-pro\\\/v1\\\/timetables&quot;,&quot;routes&quot;:[65],&quot;days&quot;:1,&quot;autoload&quot;:true,&quot;routeLabels&quot;:{&quot;65&quot;:&quot;Holyhead \\u21d2 Dublin&quot;},&quot;opFilter&quot;:[&quot;2&quot;],&quot;labels&quot;:{&quot;ui_date&quot;:&quot;Datum&quot;,&quot;ui_days&quot;:&quot;Tage&quot;,&quot;ui_button&quot;:&quot;Abfahrten anzeigen&quot;,&quot;status_idle&quot;:&quot;Datum w\\u00e4hlen und Abfahrten anzeigen&quot;,&quot;status_loading&quot;:&quot;Laden...&quot;,&quot;status_empty&quot;:&quot;Keine Abfahrten gefunden&quot;,&quot;status_found&quot;:&quot;%d Abfahrten gefunden&quot;,&quot;th_date&quot;:&quot;Datum&quot;,&quot;th_dep&quot;:&quot;Abfahrt&quot;,&quot;th_arr&quot;:&quot;Ankunft&quot;,&quot;th_dur&quot;:&quot;Dauer&quot;,&quot;th_ship&quot;:&quot;Schiffsname&quot;,&quot;th_op&quot;:&quot;Reederei&quot;,&quot;th_route&quot;:&quot;Route&quot;,&quot;wd_sun&quot;:&quot;So&quot;,&quot;wd_mon&quot;:&quot;Mo&quot;,&quot;wd_tue&quot;:&quot;Di&quot;,&quot;wd_wed&quot;:&quot;Mi&quot;,&quot;wd_thu&quot;:&quot;Do&quot;,&quot;wd_fri&quot;:&quot;Fr&quot;,&quot;wd_sat&quot;:&quot;Sa&quot;},&quot;showLogo&quot;:true,&quot;title&quot;:&quot;&quot;,&quot;shipMap&quot;:[],&quot;shipLinks&quot;:{&quot;ulysses&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/ulysses\\\/&quot;,&quot;stena adventurer&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/stena-adventurer\\\/&quot;,&quot;james joyce&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/james-joyce\\\/&quot;,&quot;stena estrid&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/stena-estrid\\\/&quot;,&quot;dublin swift&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/dublin-swift\\\/&quot;}}\">\n  <div class=\"tp-controls\" role=\"group\" aria-label=\"Timetable controls\">\n    <div>\n      <label for=\"tp-date-ops\">Datum<\/label><br>\n      <input id=\"tp-date-ops\" class=\"tp-date\" type=\"date\" aria-label=\"Datum\">\n    <\/div>\n    <div>\n      <label for=\"tp-range-ops\">Tage<\/label><br>\n      <select id=\"tp-range-ops\" class=\"tp-range\" aria-label=\"Tage\">\n        <option value=\"1\">1<\/option><option value=\"3\">3<\/option><option value=\"7\">7<\/option><option value=\"14\">14<\/option>\n      <\/select>\n    <\/div>\n    <div><button id=\"tp-load-ops\" class=\"tp-btn\">Abfahrten anzeigen<\/button><\/div>\n  <\/div>\n\n  \n  <div id=\"tp-status-ops\" class=\"tp-muted\" aria-live=\"polite\">Datum w\u00e4hlen und Abfahrten anzeigen<\/div>\n\n  <div id=\"tp-ops-results\"><\/div>\n\n  <div class=\"tp-loader\" aria-hidden=\"true\">\n    <div class=\"tp-loader-card\">\n      <div class=\"tp-spinner\" aria-hidden=\"true\"><\/div>\n      <div class=\"tp-loader-text\">Laden...<\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function(){\n  const wrap   = document.currentScript.previousElementSibling;\n  const cfg    = JSON.parse(wrap.getAttribute('data-config')||'{}');\n  const L      = cfg.labels||{};\n  const dateEl = wrap.querySelector('#tp-date-ops');\n  const daysEl = wrap.querySelector('#tp-range-ops');\n  const btn    = wrap.querySelector('#tp-load-ops');\n  const status = wrap.querySelector('#tp-status-ops');\n  const out    = wrap.querySelector('#tp-ops-results');\n  const loader = wrap.querySelector('.tp-loader');\n\n  dateEl.valueAsDate = new Date();\n  Array.from(daysEl.options).forEach(o=>{ if(parseInt(o.value,10)===parseInt(cfg.days||7,10)) o.selected=true; });\n\n  function pad(n){ return String(n).padStart(2,'0'); }\n  function iso(d){ return d.getFullYear()+'-'+pad(d.getMonth()+1)+'-'+pad(d.getDate()); }\n  function toLocal(s){ return new Date(s); }\n  function hhmm(d){ return d.toLocaleTimeString([], {hour:'2-digit', minute:'2-digit'}); }\n  function dShort(d){ return d.toLocaleDateString([], {day:'numeric', month:'short'}); }\n  function dur(m){ const h=Math.floor(m\/60), r=m%60; return r? (h+'h '+r+'m') : (h+'h'); }\n\n  const WD = [\n    L.wd_sun || 'SUN',\n    L.wd_mon || 'MON',\n    L.wd_tue || 'TUE',\n    L.wd_wed || 'WED',\n    L.wd_thu || 'THU',\n    L.wd_fri || 'FRI',\n    L.wd_sat || 'SAT'\n  ];\n\n  function setLoader(v){ loader.classList.toggle('show', !!v); loader.setAttribute('aria-hidden', v?'false':'true'); }\n\n  function opCell(r){\n    const name = r.opName || ('Operator '+(r.opId||''));\n       const logo = (cfg.showLogo && r.opLogo) ? '<img decoding=\"async\" src=\"'+r.opLogo+'\" alt=\"'+name+'\"> ' : '';\n    const label = logo + '<span>'+name+'<\/span>';\n    return r.opLink ? '<a class=\"tp-op\" href=\"'+r.opLink+'\" target=\"_blank\" rel=\"nofollow noopener\">'+label+'<\/a>' : '<span class=\"tp-op\">'+label+'<\/span>';\n  }\n\n  function shipInfo(original){\n    const key = (original||'').toLowerCase().trim();\n    const label = (cfg.shipMap && cfg.shipMap[key]) || original || '';\n    const href  = (cfg.shipLinks && cfg.shipLinks[key]) || '';\n    return {label, href};\n  }\n\n  function shipBadge(original){\n    const s = shipInfo(original);\n    const badge = '<span class=\"tp-badge\">'+(s.label||'')+'<\/span>';\n    return s.href ? ('<a href=\"'+s.href+'\" target=\"_blank\" rel=\"nofollow noopener\">'+badge+'<\/a>') : badge;\n  }\n\n  function routeLabel(rid){\n    return (cfg.routeLabels && (cfg.routeLabels[String(rid)] || cfg.routeLabels[rid])) || String(rid);\n  }\n\n  function renderTable(rows){\n    const th = {date:L.th_date,dep:L.th_dep,arr:L.th_arr,dur:L.th_dur,ship:L.th_ship,route:L.th_route,op:L.th_op};\n    let html = '<table class=\"tp-table\"><thead><tr>'+\n      '<th>'+th.date+'<\/th><th>'+th.dep+'<\/th><th>'+th.arr+'<\/th><th>'+th.dur+'<\/th><th>'+th.ship+'<\/th><th>'+th.route+'<\/th><th>'+th.op+'<\/th>'+\n      '<\/tr><\/thead><tbody>';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      html += '<tr>'+\n        '<td>'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span><\/td>'+\n        '<td>'+hhmm(r.dep)+'<\/td>'+\n        '<td>'+hhmm(r.arr)+'<\/td>'+\n        '<td>'+dur(r.min)+'<\/td>'+\n        '<td>'+shipBadge(r.ship)+'<\/td>'+\n        '<td>'+routeLabel(r.routeId)+'<\/td>'+\n        '<td>'+opCell(r)+'<\/td>'+\n      '<\/tr>';\n    });\n    html += '<\/tbody><\/table>';\n    return html;\n  }\n\n  function renderCards(rows){\n    let html = '<div class=\"tp-cardlist\">';\n    rows.forEach(r=>{\n      const dow   = WD[r.dep.getDay()] || '';\n      const times = hhmm(r.dep) + ' <span class=\"tp-arrow\">\u2192<\/span> ' + hhmm(r.arr);\n      html += '<div class=\"tp-card\">'+\n        \/\/ Row 1: Date + weekday + times\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\"><span class=\"tp-sub\">'+dShort(r.dep)+'<\/span><span class=\"tp-day\">'+dow+'<\/span><\/div>'+\n          '<div class=\"rhs\"><span class=\"tp-time\">'+times+'<\/span><\/div>'+\n        '<\/div>'+\n        \/\/ Row 2: Ship & Route (no prefixes)\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+shipBadge(r.ship)+'<\/div>'+\n          '<div class=\"rhs\">'+routeLabel(r.routeId)+'<\/div>'+\n        '<\/div>'+\n        \/\/ Row 3: Operator\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+opCell(r)+'<\/div>'+\n          '<div class=\"rhs\"><\/div>'+\n        '<\/div>'+\n      '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  \/\/ Safe fetch helper\n  async function fetchOne(routeId, from, to){\n    try{\n      const url = new URL(cfg.rest);\n      url.searchParams.set('route', String(routeId));\n      url.searchParams.set('from', from);\n      url.searchParams.set('to', to);\n      const res = await fetch(url.toString(), {credentials:'same-origin'});\n      if(!res.ok) return { rid: routeId, error: 'HTTP '+res.status };\n      const json = await res.json();\n      const list = (json && json.data && Array.isArray(json.data.rows)) ? json.data.rows : [];\n      return { rid: routeId, rows: list };\n    }catch(e){\n      return { rid: routeId, error: String(e && e.message ? e.message : e) };\n    }\n  }\n\n  async function load(){\n    btn.disabled = true; setLoader(true); status.textContent = L.status_loading;\n\n    const start = new Date(dateEl.value || new Date());\n    const days  = Math.max(1, parseInt(daysEl.value,10)||1);\n    const end   = new Date(start); end.setDate(start.getDate()+days-1);\n    const fromIso = iso(start), toIso = iso(end);\n\n    try{\n      const results  = await Promise.all((cfg.routes||[]).map(rid=>fetchOne(rid, fromIso, toIso)));\n      const oks  = results.filter(r => !r.error);\n      const errs = results.filter(r =>  r.error);\n\n      const all = [];\n      oks.forEach(({rid, rows})=>{\n        rows.forEach(t=>{\n          all.push({\n            routeId: rid,\n            opId: t.operatorId || null,\n            opName: t.operatorName || '',\n            opLogo: t.operatorLogo || '',\n            opLink: t.operatorLink || '',\n            dep: toLocal(t.departureTime),\n            arr: toLocal(t.arrivalTime),\n            min: t.durationInMinutes || 0,\n            ship: t.shipName || ''\n          });\n        });\n      });\n\n      let rows = all;\n      if (Array.isArray(cfg.opFilter) && cfg.opFilter.length>0) {\n        rows = all.filter(r => r.opId && cfg.opFilter.includes(String(r.opId)));\n      }\n\n      rows.sort((a,b)=> a.dep - b.dep);\n\n      const total = rows.length;\n      if (total===0){\n        status.textContent = L.status_empty + (errs.length ? ' (some routes returned no data or errors)' : '');\n        out.innerHTML='';\n        setLoader(false); btn.disabled=false; return;\n      }\n\n      status.textContent = (L.status_found||'%d sailings found').replace('%d', total) + (errs.length ? ` (skipped ${errs.length} route${errs.length>1?'s':''})` : '');\n      out.innerHTML = renderTable(rows) + renderCards(rows);\n\n    } catch(e){\n      status.textContent = 'Failed to load data';\n      out.innerHTML = '<pre>'+String(e.message||e)+'<\/pre>';\n    } finally {\n      setLoader(false);\n      btn.disabled = false;\n    }\n  }\n\n  btn.addEventListener('click', load);\n  if (cfg.autoload) load();\n})();\n<\/script>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div id=\"e-n-tab-content-3298599372\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-3298599372\" data-tab-index=\"2\" style=\"--n-tabs-title-order: 2;\" class=\" elementor-element elementor-element-19e68a8d e-con-full e-flex e-con e-child\" data-id=\"19e68a8d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-15017fde e-flex e-con-boxed e-con e-child\" data-id=\"15017fde\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e726358 elementor-widget__width-inherit elementor-widget elementor-widget-shortcode\" data-id=\"e726358\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div class=\"tp-wrap\" data-config=\"{&quot;rest&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/wp-json\\\/timetables-pro\\\/v1\\\/timetables&quot;,&quot;routes&quot;:[17],&quot;days&quot;:1,&quot;autoload&quot;:true,&quot;routeLabels&quot;:{&quot;17&quot;:&quot;Dublin \\u21d2 Holyhead&quot;},&quot;opFilter&quot;:[&quot;2&quot;],&quot;labels&quot;:{&quot;ui_date&quot;:&quot;Datum&quot;,&quot;ui_days&quot;:&quot;Tage&quot;,&quot;ui_button&quot;:&quot;Abfahrten anzeigen&quot;,&quot;status_idle&quot;:&quot;Datum w\\u00e4hlen und Abfahrten anzeigen&quot;,&quot;status_loading&quot;:&quot;Laden...&quot;,&quot;status_empty&quot;:&quot;Keine Abfahrten gefunden&quot;,&quot;status_found&quot;:&quot;%d Abfahrten gefunden&quot;,&quot;th_date&quot;:&quot;Datum&quot;,&quot;th_dep&quot;:&quot;Abfahrt&quot;,&quot;th_arr&quot;:&quot;Ankunft&quot;,&quot;th_dur&quot;:&quot;Dauer&quot;,&quot;th_ship&quot;:&quot;Schiffsname&quot;,&quot;th_op&quot;:&quot;Reederei&quot;,&quot;th_route&quot;:&quot;Route&quot;,&quot;wd_sun&quot;:&quot;So&quot;,&quot;wd_mon&quot;:&quot;Mo&quot;,&quot;wd_tue&quot;:&quot;Di&quot;,&quot;wd_wed&quot;:&quot;Mi&quot;,&quot;wd_thu&quot;:&quot;Do&quot;,&quot;wd_fri&quot;:&quot;Fr&quot;,&quot;wd_sat&quot;:&quot;Sa&quot;},&quot;showLogo&quot;:true,&quot;title&quot;:&quot;&quot;,&quot;shipMap&quot;:[],&quot;shipLinks&quot;:{&quot;ulysses&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/ulysses\\\/&quot;,&quot;stena adventurer&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/stena-adventurer\\\/&quot;,&quot;james joyce&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/james-joyce\\\/&quot;,&quot;stena estrid&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/stena-estrid\\\/&quot;,&quot;dublin swift&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/dublin-swift\\\/&quot;}}\">\n  <div class=\"tp-controls\" role=\"group\" aria-label=\"Timetable controls\">\n    <div>\n      <label for=\"tp-date-ops\">Datum<\/label><br>\n      <input id=\"tp-date-ops\" class=\"tp-date\" type=\"date\" aria-label=\"Datum\">\n    <\/div>\n    <div>\n      <label for=\"tp-range-ops\">Tage<\/label><br>\n      <select id=\"tp-range-ops\" class=\"tp-range\" aria-label=\"Tage\">\n        <option value=\"1\">1<\/option><option value=\"3\">3<\/option><option value=\"7\">7<\/option><option value=\"14\">14<\/option>\n      <\/select>\n    <\/div>\n    <div><button id=\"tp-load-ops\" class=\"tp-btn\">Abfahrten anzeigen<\/button><\/div>\n  <\/div>\n\n  \n  <div id=\"tp-status-ops\" class=\"tp-muted\" aria-live=\"polite\">Datum w\u00e4hlen und Abfahrten anzeigen<\/div>\n\n  <div id=\"tp-ops-results\"><\/div>\n\n  <div class=\"tp-loader\" aria-hidden=\"true\">\n    <div class=\"tp-loader-card\">\n      <div class=\"tp-spinner\" aria-hidden=\"true\"><\/div>\n      <div class=\"tp-loader-text\">Laden...<\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function(){\n  const wrap   = document.currentScript.previousElementSibling;\n  const cfg    = JSON.parse(wrap.getAttribute('data-config')||'{}');\n  const L      = cfg.labels||{};\n  const dateEl = wrap.querySelector('#tp-date-ops');\n  const daysEl = wrap.querySelector('#tp-range-ops');\n  const btn    = wrap.querySelector('#tp-load-ops');\n  const status = wrap.querySelector('#tp-status-ops');\n  const out    = wrap.querySelector('#tp-ops-results');\n  const loader = wrap.querySelector('.tp-loader');\n\n  dateEl.valueAsDate = new Date();\n  Array.from(daysEl.options).forEach(o=>{ if(parseInt(o.value,10)===parseInt(cfg.days||7,10)) o.selected=true; });\n\n  function pad(n){ return String(n).padStart(2,'0'); }\n  function iso(d){ return d.getFullYear()+'-'+pad(d.getMonth()+1)+'-'+pad(d.getDate()); }\n  function toLocal(s){ return new Date(s); }\n  function hhmm(d){ return d.toLocaleTimeString([], {hour:'2-digit', minute:'2-digit'}); }\n  function dShort(d){ return d.toLocaleDateString([], {day:'numeric', month:'short'}); }\n  function dur(m){ const h=Math.floor(m\/60), r=m%60; return r? (h+'h '+r+'m') : (h+'h'); }\n\n  const WD = [\n    L.wd_sun || 'SUN',\n    L.wd_mon || 'MON',\n    L.wd_tue || 'TUE',\n    L.wd_wed || 'WED',\n    L.wd_thu || 'THU',\n    L.wd_fri || 'FRI',\n    L.wd_sat || 'SAT'\n  ];\n\n  function setLoader(v){ loader.classList.toggle('show', !!v); loader.setAttribute('aria-hidden', v?'false':'true'); }\n\n  function opCell(r){\n    const name = r.opName || ('Operator '+(r.opId||''));\n       const logo = (cfg.showLogo && r.opLogo) ? '<img decoding=\"async\" src=\"'+r.opLogo+'\" alt=\"'+name+'\"> ' : '';\n    const label = logo + '<span>'+name+'<\/span>';\n    return r.opLink ? '<a class=\"tp-op\" href=\"'+r.opLink+'\" target=\"_blank\" rel=\"nofollow noopener\">'+label+'<\/a>' : '<span class=\"tp-op\">'+label+'<\/span>';\n  }\n\n  function shipInfo(original){\n    const key = (original||'').toLowerCase().trim();\n    const label = (cfg.shipMap && cfg.shipMap[key]) || original || '';\n    const href  = (cfg.shipLinks && cfg.shipLinks[key]) || '';\n    return {label, href};\n  }\n\n  function shipBadge(original){\n    const s = shipInfo(original);\n    const badge = '<span class=\"tp-badge\">'+(s.label||'')+'<\/span>';\n    return s.href ? ('<a href=\"'+s.href+'\" target=\"_blank\" rel=\"nofollow noopener\">'+badge+'<\/a>') : badge;\n  }\n\n  function routeLabel(rid){\n    return (cfg.routeLabels && (cfg.routeLabels[String(rid)] || cfg.routeLabels[rid])) || String(rid);\n  }\n\n  function renderTable(rows){\n    const th = {date:L.th_date,dep:L.th_dep,arr:L.th_arr,dur:L.th_dur,ship:L.th_ship,route:L.th_route,op:L.th_op};\n    let html = '<table class=\"tp-table\"><thead><tr>'+\n      '<th>'+th.date+'<\/th><th>'+th.dep+'<\/th><th>'+th.arr+'<\/th><th>'+th.dur+'<\/th><th>'+th.ship+'<\/th><th>'+th.route+'<\/th><th>'+th.op+'<\/th>'+\n      '<\/tr><\/thead><tbody>';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      html += '<tr>'+\n        '<td>'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span><\/td>'+\n        '<td>'+hhmm(r.dep)+'<\/td>'+\n        '<td>'+hhmm(r.arr)+'<\/td>'+\n        '<td>'+dur(r.min)+'<\/td>'+\n        '<td>'+shipBadge(r.ship)+'<\/td>'+\n        '<td>'+routeLabel(r.routeId)+'<\/td>'+\n        '<td>'+opCell(r)+'<\/td>'+\n      '<\/tr>';\n    });\n    html += '<\/tbody><\/table>';\n    return html;\n  }\n\n  function renderCards(rows){\n    let html = '<div class=\"tp-cardlist\">';\n    rows.forEach(r=>{\n      const dow   = WD[r.dep.getDay()] || '';\n      const times = hhmm(r.dep) + ' <span class=\"tp-arrow\">\u2192<\/span> ' + hhmm(r.arr);\n      html += '<div class=\"tp-card\">'+\n        \/\/ Row 1: Date + weekday + times\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\"><span class=\"tp-sub\">'+dShort(r.dep)+'<\/span><span class=\"tp-day\">'+dow+'<\/span><\/div>'+\n          '<div class=\"rhs\"><span class=\"tp-time\">'+times+'<\/span><\/div>'+\n        '<\/div>'+\n        \/\/ Row 2: Ship & Route (no prefixes)\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+shipBadge(r.ship)+'<\/div>'+\n          '<div class=\"rhs\">'+routeLabel(r.routeId)+'<\/div>'+\n        '<\/div>'+\n        \/\/ Row 3: Operator\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+opCell(r)+'<\/div>'+\n          '<div class=\"rhs\"><\/div>'+\n        '<\/div>'+\n      '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  \/\/ Safe fetch helper\n  async function fetchOne(routeId, from, to){\n    try{\n      const url = new URL(cfg.rest);\n      url.searchParams.set('route', String(routeId));\n      url.searchParams.set('from', from);\n      url.searchParams.set('to', to);\n      const res = await fetch(url.toString(), {credentials:'same-origin'});\n      if(!res.ok) return { rid: routeId, error: 'HTTP '+res.status };\n      const json = await res.json();\n      const list = (json && json.data && Array.isArray(json.data.rows)) ? json.data.rows : [];\n      return { rid: routeId, rows: list };\n    }catch(e){\n      return { rid: routeId, error: String(e && e.message ? e.message : e) };\n    }\n  }\n\n  async function load(){\n    btn.disabled = true; setLoader(true); status.textContent = L.status_loading;\n\n    const start = new Date(dateEl.value || new Date());\n    const days  = Math.max(1, parseInt(daysEl.value,10)||1);\n    const end   = new Date(start); end.setDate(start.getDate()+days-1);\n    const fromIso = iso(start), toIso = iso(end);\n\n    try{\n      const results  = await Promise.all((cfg.routes||[]).map(rid=>fetchOne(rid, fromIso, toIso)));\n      const oks  = results.filter(r => !r.error);\n      const errs = results.filter(r =>  r.error);\n\n      const all = [];\n      oks.forEach(({rid, rows})=>{\n        rows.forEach(t=>{\n          all.push({\n            routeId: rid,\n            opId: t.operatorId || null,\n            opName: t.operatorName || '',\n            opLogo: t.operatorLogo || '',\n            opLink: t.operatorLink || '',\n            dep: toLocal(t.departureTime),\n            arr: toLocal(t.arrivalTime),\n            min: t.durationInMinutes || 0,\n            ship: t.shipName || ''\n          });\n        });\n      });\n\n      let rows = all;\n      if (Array.isArray(cfg.opFilter) && cfg.opFilter.length>0) {\n        rows = all.filter(r => r.opId && cfg.opFilter.includes(String(r.opId)));\n      }\n\n      rows.sort((a,b)=> a.dep - b.dep);\n\n      const total = rows.length;\n      if (total===0){\n        status.textContent = L.status_empty + (errs.length ? ' (some routes returned no data or errors)' : '');\n        out.innerHTML='';\n        setLoader(false); btn.disabled=false; return;\n      }\n\n      status.textContent = (L.status_found||'%d sailings found').replace('%d', total) + (errs.length ? ` (skipped ${errs.length} route${errs.length>1?'s':''})` : '');\n      out.innerHTML = renderTable(rows) + renderCards(rows);\n\n    } catch(e){\n      status.textContent = 'Failed to load data';\n      out.innerHTML = '<pre>'+String(e.message||e)+'<\/pre>';\n    } finally {\n      setLoader(false);\n      btn.disabled = false;\n    }\n  }\n\n  btn.addEventListener('click', load);\n  if (cfg.autoload) load();\n})();\n<\/script>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-1432f715 e-flex e-con-boxed e-con e-parent\" data-id=\"1432f715\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4e020b13 elementor-widget elementor-widget-text-editor\" data-id=\"4e020b13\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Fahrplan Hafen Dublin<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4ca1fac6 elementor-widget elementor-widget-text-editor\" data-id=\"4ca1fac6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2>Irish Ferries Abfahrten in Dublin<\/h2><p>Hier finden Sie den Fahrplan f\u00fcr Abfahrten und Ank\u00fcnfte von Irish Ferries ab Dublin Port.\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6bc70ab9 elementor-widget__width-inherit e-n-tabs-mobile elementor-widget elementor-widget-n-tabs\" data-id=\"6bc70ab9\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;tabs_justify_horizontal&quot;:&quot;start&quot;,&quot;horizontal_scroll&quot;:&quot;disable&quot;}\" data-widget_type=\"nested-tabs.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"e-n-tabs\" data-widget-number=\"1808206521\" aria-label=\"Tabs. Open items with Enter or Space, close with Escape and navigate using the Arrow keys.\">\n\t\t\t<div class=\"e-n-tabs-heading\" role=\"tablist\">\n\t\t\t\t\t<button id=\"e-n-tab-title-18082065211\" data-tab-title-id=\"e-n-tab-title-18082065211\" class=\"e-n-tab-title\" aria-selected=\"true\" data-tab-index=\"1\" role=\"tab\" tabindex=\"0\" aria-controls=\"e-n-tab-content-18082065211\" style=\"--n-tabs-title-order: 1;\">\n\t\t\t\t\t\t<span class=\"e-n-tab-title-text\">\n\t\t\t\tAbfahrten Dublin\t\t\t<\/span>\n\t\t<\/button>\n\t\t\t\t<button id=\"e-n-tab-title-18082065212\" data-tab-title-id=\"e-n-tab-title-18082065212\" class=\"e-n-tab-title\" aria-selected=\"false\" data-tab-index=\"2\" role=\"tab\" tabindex=\"-1\" aria-controls=\"e-n-tab-content-18082065212\" style=\"--n-tabs-title-order: 2;\">\n\t\t\t\t\t\t<span class=\"e-n-tab-title-text\">\n\t\t\t\tAnk\u00fcnfte Dublin\t\t\t<\/span>\n\t\t<\/button>\n\t\t\t\t\t<\/div>\n\t\t\t<div class=\"e-n-tabs-content\">\n\t\t\t\t<div id=\"e-n-tab-content-18082065211\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-18082065211\" data-tab-index=\"1\" style=\"--n-tabs-title-order: 1;\" class=\"e-active elementor-element elementor-element-675fa636 e-con-full e-flex e-con e-child\" data-id=\"675fa636\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c6509c4 elementor-widget elementor-widget-shortcode\" data-id=\"c6509c4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div class=\"tp-wrap\" data-config=\"{&quot;rest&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/wp-json\\\/timetables-pro\\\/v1\\\/timetables&quot;,&quot;routes&quot;:[17],&quot;days&quot;:1,&quot;autoload&quot;:true,&quot;routeLabels&quot;:{&quot;17&quot;:&quot;Dublin \\u21d2 Holyhead&quot;},&quot;opFilter&quot;:[&quot;2&quot;],&quot;labels&quot;:{&quot;ui_date&quot;:&quot;Datum&quot;,&quot;ui_days&quot;:&quot;Tage&quot;,&quot;ui_button&quot;:&quot;Abfahrten anzeigen&quot;,&quot;status_idle&quot;:&quot;Datum w\\u00e4hlen und Abfahrten anzeigen&quot;,&quot;status_loading&quot;:&quot;Laden...&quot;,&quot;status_empty&quot;:&quot;Keine Abfahrten gefunden&quot;,&quot;status_found&quot;:&quot;%d Abfahrten gefunden&quot;,&quot;th_date&quot;:&quot;Datum&quot;,&quot;th_dep&quot;:&quot;Abfahrt&quot;,&quot;th_arr&quot;:&quot;Ankunft&quot;,&quot;th_dur&quot;:&quot;Dauer&quot;,&quot;th_ship&quot;:&quot;Schiffsname&quot;,&quot;th_op&quot;:&quot;Reederei&quot;,&quot;th_route&quot;:&quot;Route&quot;,&quot;wd_sun&quot;:&quot;So&quot;,&quot;wd_mon&quot;:&quot;Mo&quot;,&quot;wd_tue&quot;:&quot;Di&quot;,&quot;wd_wed&quot;:&quot;Mi&quot;,&quot;wd_thu&quot;:&quot;Do&quot;,&quot;wd_fri&quot;:&quot;Fr&quot;,&quot;wd_sat&quot;:&quot;Sa&quot;},&quot;showLogo&quot;:true,&quot;title&quot;:&quot;&quot;,&quot;shipMap&quot;:[],&quot;shipLinks&quot;:{&quot;ulysses&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/ulysses\\\/&quot;,&quot;stena adventurer&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/stena-adventurer\\\/&quot;,&quot;james joyce&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/james-joyce\\\/&quot;,&quot;stena estrid&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/stena-estrid\\\/&quot;,&quot;dublin swift&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/dublin-swift\\\/&quot;}}\">\n  <div class=\"tp-controls\" role=\"group\" aria-label=\"Timetable controls\">\n    <div>\n      <label for=\"tp-date-ops\">Datum<\/label><br>\n      <input id=\"tp-date-ops\" class=\"tp-date\" type=\"date\" aria-label=\"Datum\">\n    <\/div>\n    <div>\n      <label for=\"tp-range-ops\">Tage<\/label><br>\n      <select id=\"tp-range-ops\" class=\"tp-range\" aria-label=\"Tage\">\n        <option value=\"1\">1<\/option><option value=\"3\">3<\/option><option value=\"7\">7<\/option><option value=\"14\">14<\/option>\n      <\/select>\n    <\/div>\n    <div><button id=\"tp-load-ops\" class=\"tp-btn\">Abfahrten anzeigen<\/button><\/div>\n  <\/div>\n\n  \n  <div id=\"tp-status-ops\" class=\"tp-muted\" aria-live=\"polite\">Datum w\u00e4hlen und Abfahrten anzeigen<\/div>\n\n  <div id=\"tp-ops-results\"><\/div>\n\n  <div class=\"tp-loader\" aria-hidden=\"true\">\n    <div class=\"tp-loader-card\">\n      <div class=\"tp-spinner\" aria-hidden=\"true\"><\/div>\n      <div class=\"tp-loader-text\">Laden...<\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function(){\n  const wrap   = document.currentScript.previousElementSibling;\n  const cfg    = JSON.parse(wrap.getAttribute('data-config')||'{}');\n  const L      = cfg.labels||{};\n  const dateEl = wrap.querySelector('#tp-date-ops');\n  const daysEl = wrap.querySelector('#tp-range-ops');\n  const btn    = wrap.querySelector('#tp-load-ops');\n  const status = wrap.querySelector('#tp-status-ops');\n  const out    = wrap.querySelector('#tp-ops-results');\n  const loader = wrap.querySelector('.tp-loader');\n\n  dateEl.valueAsDate = new Date();\n  Array.from(daysEl.options).forEach(o=>{ if(parseInt(o.value,10)===parseInt(cfg.days||7,10)) o.selected=true; });\n\n  function pad(n){ return String(n).padStart(2,'0'); }\n  function iso(d){ return d.getFullYear()+'-'+pad(d.getMonth()+1)+'-'+pad(d.getDate()); }\n  function toLocal(s){ return new Date(s); }\n  function hhmm(d){ return d.toLocaleTimeString([], {hour:'2-digit', minute:'2-digit'}); }\n  function dShort(d){ return d.toLocaleDateString([], {day:'numeric', month:'short'}); }\n  function dur(m){ const h=Math.floor(m\/60), r=m%60; return r? (h+'h '+r+'m') : (h+'h'); }\n\n  const WD = [\n    L.wd_sun || 'SUN',\n    L.wd_mon || 'MON',\n    L.wd_tue || 'TUE',\n    L.wd_wed || 'WED',\n    L.wd_thu || 'THU',\n    L.wd_fri || 'FRI',\n    L.wd_sat || 'SAT'\n  ];\n\n  function setLoader(v){ loader.classList.toggle('show', !!v); loader.setAttribute('aria-hidden', v?'false':'true'); }\n\n  function opCell(r){\n    const name = r.opName || ('Operator '+(r.opId||''));\n       const logo = (cfg.showLogo && r.opLogo) ? '<img decoding=\"async\" src=\"'+r.opLogo+'\" alt=\"'+name+'\"> ' : '';\n    const label = logo + '<span>'+name+'<\/span>';\n    return r.opLink ? '<a class=\"tp-op\" href=\"'+r.opLink+'\" target=\"_blank\" rel=\"nofollow noopener\">'+label+'<\/a>' : '<span class=\"tp-op\">'+label+'<\/span>';\n  }\n\n  function shipInfo(original){\n    const key = (original||'').toLowerCase().trim();\n    const label = (cfg.shipMap && cfg.shipMap[key]) || original || '';\n    const href  = (cfg.shipLinks && cfg.shipLinks[key]) || '';\n    return {label, href};\n  }\n\n  function shipBadge(original){\n    const s = shipInfo(original);\n    const badge = '<span class=\"tp-badge\">'+(s.label||'')+'<\/span>';\n    return s.href ? ('<a href=\"'+s.href+'\" target=\"_blank\" rel=\"nofollow noopener\">'+badge+'<\/a>') : badge;\n  }\n\n  function routeLabel(rid){\n    return (cfg.routeLabels && (cfg.routeLabels[String(rid)] || cfg.routeLabels[rid])) || String(rid);\n  }\n\n  function renderTable(rows){\n    const th = {date:L.th_date,dep:L.th_dep,arr:L.th_arr,dur:L.th_dur,ship:L.th_ship,route:L.th_route,op:L.th_op};\n    let html = '<table class=\"tp-table\"><thead><tr>'+\n      '<th>'+th.date+'<\/th><th>'+th.dep+'<\/th><th>'+th.arr+'<\/th><th>'+th.dur+'<\/th><th>'+th.ship+'<\/th><th>'+th.route+'<\/th><th>'+th.op+'<\/th>'+\n      '<\/tr><\/thead><tbody>';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      html += '<tr>'+\n        '<td>'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span><\/td>'+\n        '<td>'+hhmm(r.dep)+'<\/td>'+\n        '<td>'+hhmm(r.arr)+'<\/td>'+\n        '<td>'+dur(r.min)+'<\/td>'+\n        '<td>'+shipBadge(r.ship)+'<\/td>'+\n        '<td>'+routeLabel(r.routeId)+'<\/td>'+\n        '<td>'+opCell(r)+'<\/td>'+\n      '<\/tr>';\n    });\n    html += '<\/tbody><\/table>';\n    return html;\n  }\n\n  function renderCards(rows){\n    let html = '<div class=\"tp-cardlist\">';\n    rows.forEach(r=>{\n      const dow   = WD[r.dep.getDay()] || '';\n      const times = hhmm(r.dep) + ' <span class=\"tp-arrow\">\u2192<\/span> ' + hhmm(r.arr);\n      html += '<div class=\"tp-card\">'+\n        \/\/ Row 1: Date + weekday + times\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\"><span class=\"tp-sub\">'+dShort(r.dep)+'<\/span><span class=\"tp-day\">'+dow+'<\/span><\/div>'+\n          '<div class=\"rhs\"><span class=\"tp-time\">'+times+'<\/span><\/div>'+\n        '<\/div>'+\n        \/\/ Row 2: Ship & Route (no prefixes)\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+shipBadge(r.ship)+'<\/div>'+\n          '<div class=\"rhs\">'+routeLabel(r.routeId)+'<\/div>'+\n        '<\/div>'+\n        \/\/ Row 3: Operator\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+opCell(r)+'<\/div>'+\n          '<div class=\"rhs\"><\/div>'+\n        '<\/div>'+\n      '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  \/\/ Safe fetch helper\n  async function fetchOne(routeId, from, to){\n    try{\n      const url = new URL(cfg.rest);\n      url.searchParams.set('route', String(routeId));\n      url.searchParams.set('from', from);\n      url.searchParams.set('to', to);\n      const res = await fetch(url.toString(), {credentials:'same-origin'});\n      if(!res.ok) return { rid: routeId, error: 'HTTP '+res.status };\n      const json = await res.json();\n      const list = (json && json.data && Array.isArray(json.data.rows)) ? json.data.rows : [];\n      return { rid: routeId, rows: list };\n    }catch(e){\n      return { rid: routeId, error: String(e && e.message ? e.message : e) };\n    }\n  }\n\n  async function load(){\n    btn.disabled = true; setLoader(true); status.textContent = L.status_loading;\n\n    const start = new Date(dateEl.value || new Date());\n    const days  = Math.max(1, parseInt(daysEl.value,10)||1);\n    const end   = new Date(start); end.setDate(start.getDate()+days-1);\n    const fromIso = iso(start), toIso = iso(end);\n\n    try{\n      const results  = await Promise.all((cfg.routes||[]).map(rid=>fetchOne(rid, fromIso, toIso)));\n      const oks  = results.filter(r => !r.error);\n      const errs = results.filter(r =>  r.error);\n\n      const all = [];\n      oks.forEach(({rid, rows})=>{\n        rows.forEach(t=>{\n          all.push({\n            routeId: rid,\n            opId: t.operatorId || null,\n            opName: t.operatorName || '',\n            opLogo: t.operatorLogo || '',\n            opLink: t.operatorLink || '',\n            dep: toLocal(t.departureTime),\n            arr: toLocal(t.arrivalTime),\n            min: t.durationInMinutes || 0,\n            ship: t.shipName || ''\n          });\n        });\n      });\n\n      let rows = all;\n      if (Array.isArray(cfg.opFilter) && cfg.opFilter.length>0) {\n        rows = all.filter(r => r.opId && cfg.opFilter.includes(String(r.opId)));\n      }\n\n      rows.sort((a,b)=> a.dep - b.dep);\n\n      const total = rows.length;\n      if (total===0){\n        status.textContent = L.status_empty + (errs.length ? ' (some routes returned no data or errors)' : '');\n        out.innerHTML='';\n        setLoader(false); btn.disabled=false; return;\n      }\n\n      status.textContent = (L.status_found||'%d sailings found').replace('%d', total) + (errs.length ? ` (skipped ${errs.length} route${errs.length>1?'s':''})` : '');\n      out.innerHTML = renderTable(rows) + renderCards(rows);\n\n    } catch(e){\n      status.textContent = 'Failed to load data';\n      out.innerHTML = '<pre>'+String(e.message||e)+'<\/pre>';\n    } finally {\n      setLoader(false);\n      btn.disabled = false;\n    }\n  }\n\n  btn.addEventListener('click', load);\n  if (cfg.autoload) load();\n})();\n<\/script>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div id=\"e-n-tab-content-18082065212\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-18082065212\" data-tab-index=\"2\" style=\"--n-tabs-title-order: 2;\" class=\" elementor-element elementor-element-10949967 e-con-full e-flex e-con e-child\" data-id=\"10949967\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-fda5423 e-flex e-con-boxed e-con e-child\" data-id=\"fda5423\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-cb4db93 elementor-widget__width-inherit elementor-widget elementor-widget-shortcode\" data-id=\"cb4db93\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div class=\"tp-wrap\" data-config=\"{&quot;rest&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/wp-json\\\/timetables-pro\\\/v1\\\/timetables&quot;,&quot;routes&quot;:[65],&quot;days&quot;:1,&quot;autoload&quot;:true,&quot;routeLabels&quot;:{&quot;65&quot;:&quot;Holyhead \\u21d2 Dublin&quot;},&quot;opFilter&quot;:[&quot;2&quot;],&quot;labels&quot;:{&quot;ui_date&quot;:&quot;Datum&quot;,&quot;ui_days&quot;:&quot;Tage&quot;,&quot;ui_button&quot;:&quot;Abfahrten anzeigen&quot;,&quot;status_idle&quot;:&quot;Datum w\\u00e4hlen und Abfahrten anzeigen&quot;,&quot;status_loading&quot;:&quot;Laden...&quot;,&quot;status_empty&quot;:&quot;Keine Abfahrten gefunden&quot;,&quot;status_found&quot;:&quot;%d Abfahrten gefunden&quot;,&quot;th_date&quot;:&quot;Datum&quot;,&quot;th_dep&quot;:&quot;Abfahrt&quot;,&quot;th_arr&quot;:&quot;Ankunft&quot;,&quot;th_dur&quot;:&quot;Dauer&quot;,&quot;th_ship&quot;:&quot;Schiffsname&quot;,&quot;th_op&quot;:&quot;Reederei&quot;,&quot;th_route&quot;:&quot;Route&quot;,&quot;wd_sun&quot;:&quot;So&quot;,&quot;wd_mon&quot;:&quot;Mo&quot;,&quot;wd_tue&quot;:&quot;Di&quot;,&quot;wd_wed&quot;:&quot;Mi&quot;,&quot;wd_thu&quot;:&quot;Do&quot;,&quot;wd_fri&quot;:&quot;Fr&quot;,&quot;wd_sat&quot;:&quot;Sa&quot;},&quot;showLogo&quot;:true,&quot;title&quot;:&quot;&quot;,&quot;shipMap&quot;:[],&quot;shipLinks&quot;:{&quot;ulysses&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/ulysses\\\/&quot;,&quot;stena adventurer&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/stena-adventurer\\\/&quot;,&quot;james joyce&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/james-joyce\\\/&quot;,&quot;stena estrid&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/stena-estrid\\\/&quot;,&quot;dublin swift&quot;:&quot;https:\\\/\\\/holyhead-dublin.com\\\/de\\\/ferries\\\/dublin-swift\\\/&quot;}}\">\n  <div class=\"tp-controls\" role=\"group\" aria-label=\"Timetable controls\">\n    <div>\n      <label for=\"tp-date-ops\">Datum<\/label><br>\n      <input id=\"tp-date-ops\" class=\"tp-date\" type=\"date\" aria-label=\"Datum\">\n    <\/div>\n    <div>\n      <label for=\"tp-range-ops\">Tage<\/label><br>\n      <select id=\"tp-range-ops\" class=\"tp-range\" aria-label=\"Tage\">\n        <option value=\"1\">1<\/option><option value=\"3\">3<\/option><option value=\"7\">7<\/option><option value=\"14\">14<\/option>\n      <\/select>\n    <\/div>\n    <div><button id=\"tp-load-ops\" class=\"tp-btn\">Abfahrten anzeigen<\/button><\/div>\n  <\/div>\n\n  \n  <div id=\"tp-status-ops\" class=\"tp-muted\" aria-live=\"polite\">Datum w\u00e4hlen und Abfahrten anzeigen<\/div>\n\n  <div id=\"tp-ops-results\"><\/div>\n\n  <div class=\"tp-loader\" aria-hidden=\"true\">\n    <div class=\"tp-loader-card\">\n      <div class=\"tp-spinner\" aria-hidden=\"true\"><\/div>\n      <div class=\"tp-loader-text\">Laden...<\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function(){\n  const wrap   = document.currentScript.previousElementSibling;\n  const cfg    = JSON.parse(wrap.getAttribute('data-config')||'{}');\n  const L      = cfg.labels||{};\n  const dateEl = wrap.querySelector('#tp-date-ops');\n  const daysEl = wrap.querySelector('#tp-range-ops');\n  const btn    = wrap.querySelector('#tp-load-ops');\n  const status = wrap.querySelector('#tp-status-ops');\n  const out    = wrap.querySelector('#tp-ops-results');\n  const loader = wrap.querySelector('.tp-loader');\n\n  dateEl.valueAsDate = new Date();\n  Array.from(daysEl.options).forEach(o=>{ if(parseInt(o.value,10)===parseInt(cfg.days||7,10)) o.selected=true; });\n\n  function pad(n){ return String(n).padStart(2,'0'); }\n  function iso(d){ return d.getFullYear()+'-'+pad(d.getMonth()+1)+'-'+pad(d.getDate()); }\n  function toLocal(s){ return new Date(s); }\n  function hhmm(d){ return d.toLocaleTimeString([], {hour:'2-digit', minute:'2-digit'}); }\n  function dShort(d){ return d.toLocaleDateString([], {day:'numeric', month:'short'}); }\n  function dur(m){ const h=Math.floor(m\/60), r=m%60; return r? (h+'h '+r+'m') : (h+'h'); }\n\n  const WD = [\n    L.wd_sun || 'SUN',\n    L.wd_mon || 'MON',\n    L.wd_tue || 'TUE',\n    L.wd_wed || 'WED',\n    L.wd_thu || 'THU',\n    L.wd_fri || 'FRI',\n    L.wd_sat || 'SAT'\n  ];\n\n  function setLoader(v){ loader.classList.toggle('show', !!v); loader.setAttribute('aria-hidden', v?'false':'true'); }\n\n  function opCell(r){\n    const name = r.opName || ('Operator '+(r.opId||''));\n       const logo = (cfg.showLogo && r.opLogo) ? '<img decoding=\"async\" src=\"'+r.opLogo+'\" alt=\"'+name+'\"> ' : '';\n    const label = logo + '<span>'+name+'<\/span>';\n    return r.opLink ? '<a class=\"tp-op\" href=\"'+r.opLink+'\" target=\"_blank\" rel=\"nofollow noopener\">'+label+'<\/a>' : '<span class=\"tp-op\">'+label+'<\/span>';\n  }\n\n  function shipInfo(original){\n    const key = (original||'').toLowerCase().trim();\n    const label = (cfg.shipMap && cfg.shipMap[key]) || original || '';\n    const href  = (cfg.shipLinks && cfg.shipLinks[key]) || '';\n    return {label, href};\n  }\n\n  function shipBadge(original){\n    const s = shipInfo(original);\n    const badge = '<span class=\"tp-badge\">'+(s.label||'')+'<\/span>';\n    return s.href ? ('<a href=\"'+s.href+'\" target=\"_blank\" rel=\"nofollow noopener\">'+badge+'<\/a>') : badge;\n  }\n\n  function routeLabel(rid){\n    return (cfg.routeLabels && (cfg.routeLabels[String(rid)] || cfg.routeLabels[rid])) || String(rid);\n  }\n\n  function renderTable(rows){\n    const th = {date:L.th_date,dep:L.th_dep,arr:L.th_arr,dur:L.th_dur,ship:L.th_ship,route:L.th_route,op:L.th_op};\n    let html = '<table class=\"tp-table\"><thead><tr>'+\n      '<th>'+th.date+'<\/th><th>'+th.dep+'<\/th><th>'+th.arr+'<\/th><th>'+th.dur+'<\/th><th>'+th.ship+'<\/th><th>'+th.route+'<\/th><th>'+th.op+'<\/th>'+\n      '<\/tr><\/thead><tbody>';\n    rows.forEach(r=>{\n      const dow = WD[r.dep.getDay()] || '';\n      html += '<tr>'+\n        '<td>'+dShort(r.dep)+' <span class=\"tp-day\">'+dow+'<\/span><\/td>'+\n        '<td>'+hhmm(r.dep)+'<\/td>'+\n        '<td>'+hhmm(r.arr)+'<\/td>'+\n        '<td>'+dur(r.min)+'<\/td>'+\n        '<td>'+shipBadge(r.ship)+'<\/td>'+\n        '<td>'+routeLabel(r.routeId)+'<\/td>'+\n        '<td>'+opCell(r)+'<\/td>'+\n      '<\/tr>';\n    });\n    html += '<\/tbody><\/table>';\n    return html;\n  }\n\n  function renderCards(rows){\n    let html = '<div class=\"tp-cardlist\">';\n    rows.forEach(r=>{\n      const dow   = WD[r.dep.getDay()] || '';\n      const times = hhmm(r.dep) + ' <span class=\"tp-arrow\">\u2192<\/span> ' + hhmm(r.arr);\n      html += '<div class=\"tp-card\">'+\n        \/\/ Row 1: Date + weekday + times\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\"><span class=\"tp-sub\">'+dShort(r.dep)+'<\/span><span class=\"tp-day\">'+dow+'<\/span><\/div>'+\n          '<div class=\"rhs\"><span class=\"tp-time\">'+times+'<\/span><\/div>'+\n        '<\/div>'+\n        \/\/ Row 2: Ship & Route (no prefixes)\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+shipBadge(r.ship)+'<\/div>'+\n          '<div class=\"rhs\">'+routeLabel(r.routeId)+'<\/div>'+\n        '<\/div>'+\n        \/\/ Row 3: Operator\n        '<div class=\"tp-mrow\">'+\n          '<div class=\"lhs\">'+opCell(r)+'<\/div>'+\n          '<div class=\"rhs\"><\/div>'+\n        '<\/div>'+\n      '<\/div>';\n    });\n    html += '<\/div>';\n    return html;\n  }\n\n  \/\/ Safe fetch helper\n  async function fetchOne(routeId, from, to){\n    try{\n      const url = new URL(cfg.rest);\n      url.searchParams.set('route', String(routeId));\n      url.searchParams.set('from', from);\n      url.searchParams.set('to', to);\n      const res = await fetch(url.toString(), {credentials:'same-origin'});\n      if(!res.ok) return { rid: routeId, error: 'HTTP '+res.status };\n      const json = await res.json();\n      const list = (json && json.data && Array.isArray(json.data.rows)) ? json.data.rows : [];\n      return { rid: routeId, rows: list };\n    }catch(e){\n      return { rid: routeId, error: String(e && e.message ? e.message : e) };\n    }\n  }\n\n  async function load(){\n    btn.disabled = true; setLoader(true); status.textContent = L.status_loading;\n\n    const start = new Date(dateEl.value || new Date());\n    const days  = Math.max(1, parseInt(daysEl.value,10)||1);\n    const end   = new Date(start); end.setDate(start.getDate()+days-1);\n    const fromIso = iso(start), toIso = iso(end);\n\n    try{\n      const results  = await Promise.all((cfg.routes||[]).map(rid=>fetchOne(rid, fromIso, toIso)));\n      const oks  = results.filter(r => !r.error);\n      const errs = results.filter(r =>  r.error);\n\n      const all = [];\n      oks.forEach(({rid, rows})=>{\n        rows.forEach(t=>{\n          all.push({\n            routeId: rid,\n            opId: t.operatorId || null,\n            opName: t.operatorName || '',\n            opLogo: t.operatorLogo || '',\n            opLink: t.operatorLink || '',\n            dep: toLocal(t.departureTime),\n            arr: toLocal(t.arrivalTime),\n            min: t.durationInMinutes || 0,\n            ship: t.shipName || ''\n          });\n        });\n      });\n\n      let rows = all;\n      if (Array.isArray(cfg.opFilter) && cfg.opFilter.length>0) {\n        rows = all.filter(r => r.opId && cfg.opFilter.includes(String(r.opId)));\n      }\n\n      rows.sort((a,b)=> a.dep - b.dep);\n\n      const total = rows.length;\n      if (total===0){\n        status.textContent = L.status_empty + (errs.length ? ' (some routes returned no data or errors)' : '');\n        out.innerHTML='';\n        setLoader(false); btn.disabled=false; return;\n      }\n\n      status.textContent = (L.status_found||'%d sailings found').replace('%d', total) + (errs.length ? ` (skipped ${errs.length} route${errs.length>1?'s':''})` : '');\n      out.innerHTML = renderTable(rows) + renderCards(rows);\n\n    } catch(e){\n      status.textContent = 'Failed to load data';\n      out.innerHTML = '<pre>'+String(e.message||e)+'<\/pre>';\n    } finally {\n      setLoader(false);\n      btn.disabled = false;\n    }\n  }\n\n  btn.addEventListener('click', load);\n  if (cfg.autoload) load();\n})();\n<\/script>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-55e2c44f e-flex e-con-boxed e-con e-parent\" data-id=\"55e2c44f\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-6aafee78 e-con-full e-flex e-con e-child\" data-id=\"6aafee78\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-27474ceb elementor-widget elementor-widget-text-editor\" data-id=\"27474ceb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3>\u00dcber den Fahrplan<\/h3><ul><li><a href=\"https:\/\/holyhead-dublin.com\/de\/irish-ferries\/\">Irish Ferries<\/a> f\u00e4hrt nach einem regul\u00e4ren Fahrplan, mit Ausnahme der <a href=\"https:\/\/holyhead-dublin.com\/de\/ferries\/dublin-swift\/\">Dublin Swift<\/a>. Die Abfahrten dieser Schnellf\u00e4hre k\u00f6nnen in der Nebensaison oder wegen Wetterlage und geplanter Wartung variieren.<\/li><li>Sind bestimmte Abfahrten noch nicht im Fahrplan zu sehen, sind die Fahrpl\u00e4ne f\u00fcr diesen Zeitraum meist noch nicht ver\u00f6ffentlicht. Das kommt vor allem gegen Jahresende vor, wenn die neuen Fahrpl\u00e4ne erstellt werden.<\/li><li>Diese Seite zeigt den offiziellen Irish-Ferries-Fahrplan f\u00fcr die Route Holyhead\u2013Dublin. Zum Vergleich k\u00f6nnen Sie auch <a href=\"https:\/\/holyhead-dublin.com\/de\/timetable\/\">den kombinierten Fahrplan ansehen<\/a>, der die Abfahrten von Irish Ferries und Stena Line enth\u00e4lt.<\/li><li><p>Finden Sie eine bestimmte Abfahrt nicht, pr\u00fcfen Sie im <a href=\"https:\/\/holyhead-dublin.com\/de\/live-location\/\">Live-Tracker<\/a>, ob das Schiff gerade unterwegs ist oder im Hafen liegt.<\/p><\/li><li><p>Bitte beachten Sie, dass sich alle Abfahrten je nach Wetter- und Betriebslage \u00e4ndern k\u00f6nnen.<\/p><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-6be06341 e-con-full e-flex e-con e-parent\" data-id=\"6be06341\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-262116b3 e-con-full e-flex e-con e-child\" data-id=\"262116b3\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7f4ed052 e-con-full e-flex e-con e-child\" data-id=\"7f4ed052\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-79fa2dbb elementor-widget elementor-widget-heading\" data-id=\"79fa2dbb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">\u00c4nderungen im Fahrplan<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-75b06497 elementor-widget elementor-widget-text-editor\" data-id=\"75b06497\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\u00dcberfahrten \u00fcber die Irische See sind <strong>gelegentlich von Versp\u00e4tungen oder Ausf\u00e4llen betroffen<\/strong>, meist wegen schlechter <a href=\"https:\/\/holyhead-dublin.com\/de\/weather\/\">Wetterbedingungen<\/a>.<\/p><p>Die gr\u00f6\u00dferen konventionellen F\u00e4hren (Ulysses und James Joyce) halten ihren Fahrplan bei starkem Wind in der Regel l\u00e4nger durch; die Schnellkatamarane reagieren empfindlicher auf Sturm und werden aus Sicherheitsgr\u00fcnden fr\u00fcher aus dem Verkehr genommen. Die neuesten Informationen zu den Abfahrten finden Sie auf der Seite mit den Fahrplan-Updates.<\/p><ul><li><a href=\"https:\/\/holyhead-dublin.com\/de\/timetable\/sailing-updates\/\"><strong>Aktuelle Fahrplan-Updates<\/strong><\/a><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-2d6968e6 e-flex e-con-boxed e-con e-parent\" data-id=\"2d6968e6\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-74da1aea e-con-full e-flex e-con e-child\" data-id=\"74da1aea\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-32b3aefa elementor-widget elementor-widget-text-editor\" data-id=\"32b3aefa\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3>Mit Irish Ferries unterwegs? Planen Sie etwas mehr Zeit f\u00fcr den Check-in ein<\/h3><p>Auf der Route Holyhead \u2013 Dublin sind die Check-in-Fenster von Irish Ferries vergleichsweise kurz. Passagiere mit Auto oder zu Fu\u00df m\u00fcssen sp\u00e4testens 30 Minuten vor Abfahrt einchecken. Busfahrer und Gruppenleiter sollten bis zu eine Stunde vor Abfahrt einplanen, um alle Formalit\u00e4ten zu erledigen.<\/p><p>Um Stress und Verz\u00f6gerungen zu vermeiden (besonders in der Hauptreisezeit, bei schlechtem Wetter oder viel Betrieb im Hafen), kommen Sie am besten deutlich vor der sp\u00e4testen Check-in-Zeit an.<\/p><ul><li><a href=\"https:\/\/holyhead-dublin.com\/de\/irish-ferries\/#checkin\">Check-in-Zeiten Irish Ferries<\/a><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-16878647 e-flex e-con-boxed e-con e-parent\" data-id=\"16878647\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d4157a2 elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"d4157a2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/holyhead-dublin.com\/de\/campsites\/\" tabindex=\"-1\"><img fetchpriority=\"high\" decoding=\"async\" width=\"300\" height=\"200\" src=\"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/Holyhead-mountain-300x200.jpg\" class=\"attachment-medium size-medium wp-image-2167\" alt=\"Holyhead Mountain\" srcset=\"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/Holyhead-mountain-300x200.jpg 300w, https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/Holyhead-mountain-1024x683.jpg 1024w, https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/Holyhead-mountain-768x512.jpg 768w, https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/Holyhead-mountain.jpg 1200w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><div class=\"elementor-image-box-title\"><a href=\"https:\/\/holyhead-dublin.com\/de\/campsites\/\">Campingpl\u00e4tze bei Holyhead<\/a><\/div><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-257b5f elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"257b5f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/holyhead-dublin.com\/de\/weather\/\" tabindex=\"-1\"><img decoding=\"async\" width=\"300\" height=\"200\" src=\"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/ferries-departing-dublin-300x200.jpg\" class=\"attachment-medium size-medium wp-image-1725\" alt=\"ferries departing dublin\" srcset=\"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/ferries-departing-dublin-300x200.jpg 300w, https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/ferries-departing-dublin-1024x683.jpg 1024w, https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/ferries-departing-dublin-768x512.jpg 768w, https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/ferries-departing-dublin.jpg 1200w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><div class=\"elementor-image-box-title\"><a href=\"https:\/\/holyhead-dublin.com\/de\/weather\/\">Aktuelles Wetter Irische See<\/a><\/div><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2805e6f1 elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"2805e6f1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/holyhead-dublin.com\/de\/live-location\/\" tabindex=\"-1\"><img decoding=\"async\" width=\"300\" height=\"212\" src=\"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/live-vessel-location-300x212.jpg\" class=\"attachment-medium size-medium wp-image-1193\" alt=\"Echtzeitkarte der Schiffspositionen\" srcset=\"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/live-vessel-location-300x212.jpg 300w, https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/live-vessel-location.jpg 702w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><div class=\"elementor-image-box-title\"><a href=\"https:\/\/holyhead-dublin.com\/de\/live-location\/\">Live-Position der F\u00e4hren<\/a><\/div><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-64d2bbe elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"64d2bbe\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/holyhead-dublin.com\/de\/pets-on-board\/\" tabindex=\"-1\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"169\" src=\"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/Pet-area-on-board-300x169.jpg\" class=\"attachment-medium size-medium wp-image-1804\" alt=\"Pet area rules sign on ferry deck\" srcset=\"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/Pet-area-on-board-300x169.jpg 300w, https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/Pet-area-on-board-1024x576.jpg 1024w, https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/Pet-area-on-board-768x432.jpg 768w, https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/Pet-area-on-board-1536x864.jpg 1536w, https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/Pet-area-on-board.jpg 1920w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><div class=\"elementor-image-box-title\"><a href=\"https:\/\/holyhead-dublin.com\/de\/pets-on-board\/\">Mit Haustier an Bord<\/a><\/div><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Neben Irish Ferries bedient auch Stena Line diese Route. Den kompletten Fahrplan mit allen Abfahrten finden Sie hier. Irish Ferries [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1213,"parent":130,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-743","page","type-page","status-publish","has-post-thumbnail","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Irish Ferries Fahrplan - Holyhead-Dublin Abfahrtszeiten<\/title>\n<meta name=\"description\" content=\"Abfahrtszeiten von Irish Ferries zwischen Holyhead und Dublin: Ulysses, James Joyce und Dublin Swift, f\u00fcr heute, morgen oder jedes andere Datum.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/holyhead-dublin.com\/de\/timetable\/irish-ferries-timetable\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Irish Ferries Fahrplan - Holyhead-Dublin Abfahrtszeiten\" \/>\n<meta property=\"og:description\" content=\"Abfahrtszeiten von Irish Ferries zwischen Holyhead und Dublin: Ulysses, James Joyce und Dublin Swift, f\u00fcr heute, morgen oder jedes andere Datum.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/holyhead-dublin.com\/de\/timetable\/irish-ferries-timetable\/\" \/>\n<meta property=\"og:site_name\" content=\"Holyhead Dublin\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-28T12:42:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/reception-irish-ferries-and-stena-line-in-holyhead.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/timetable\\\/irish-ferries-timetable\\\/\",\"url\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/timetable\\\/irish-ferries-timetable\\\/\",\"name\":\"Irish Ferries Fahrplan - Holyhead-Dublin Abfahrtszeiten\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/timetable\\\/irish-ferries-timetable\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/timetable\\\/irish-ferries-timetable\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/wp-content\\\/uploads\\\/sites\\\/7\\\/2025\\\/10\\\/reception-irish-ferries-and-stena-line-in-holyhead.jpg\",\"datePublished\":\"2025-09-29T08:39:57+00:00\",\"dateModified\":\"2026-08-28T12:42:22+00:00\",\"description\":\"Abfahrtszeiten von Irish Ferries zwischen Holyhead und Dublin: Ulysses, James Joyce und Dublin Swift, f\u00fcr heute, morgen oder jedes andere Datum.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/timetable\\\/irish-ferries-timetable\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/timetable\\\/irish-ferries-timetable\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/timetable\\\/irish-ferries-timetable\\\/#primaryimage\",\"url\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/wp-content\\\/uploads\\\/sites\\\/7\\\/2025\\\/10\\\/reception-irish-ferries-and-stena-line-in-holyhead.jpg\",\"contentUrl\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/wp-content\\\/uploads\\\/sites\\\/7\\\/2025\\\/10\\\/reception-irish-ferries-and-stena-line-in-holyhead.jpg\",\"width\":1920,\"height\":1080,\"caption\":\"Both Stena Line and Irish Ferries have ticket desks in Holyhead terminal.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/timetable\\\/irish-ferries-timetable\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Timetable\",\"item\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/timetable\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Irish Ferries Timetable\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/\",\"name\":\"Holyhead Dublin\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/#organization\",\"name\":\"Holyhead Dublin\",\"url\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/wp-content\\\/uploads\\\/sites\\\/7\\\/2025\\\/09\\\/Holyhead-dublin-logo.svg\",\"contentUrl\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/wp-content\\\/uploads\\\/sites\\\/7\\\/2025\\\/09\\\/Holyhead-dublin-logo.svg\",\"width\":200,\"height\":40,\"caption\":\"Holyhead Dublin\"},\"image\":{\"@id\":\"https:\\\/\\\/holyhead-dublin.com\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Irish Ferries Fahrplan - Holyhead-Dublin Abfahrtszeiten","description":"Abfahrtszeiten von Irish Ferries zwischen Holyhead und Dublin: Ulysses, James Joyce und Dublin Swift, f\u00fcr heute, morgen oder jedes andere Datum.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/holyhead-dublin.com\/de\/timetable\/irish-ferries-timetable\/","og_locale":"en_GB","og_type":"article","og_title":"Irish Ferries Fahrplan - Holyhead-Dublin Abfahrtszeiten","og_description":"Abfahrtszeiten von Irish Ferries zwischen Holyhead und Dublin: Ulysses, James Joyce und Dublin Swift, f\u00fcr heute, morgen oder jedes andere Datum.","og_url":"https:\/\/holyhead-dublin.com\/de\/timetable\/irish-ferries-timetable\/","og_site_name":"Holyhead Dublin","article_modified_time":"2026-08-28T12:42:22+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/reception-irish-ferries-and-stena-line-in-holyhead.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Estimated reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/holyhead-dublin.com\/de\/timetable\/irish-ferries-timetable\/","url":"https:\/\/holyhead-dublin.com\/de\/timetable\/irish-ferries-timetable\/","name":"Irish Ferries Fahrplan - Holyhead-Dublin Abfahrtszeiten","isPartOf":{"@id":"https:\/\/holyhead-dublin.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/holyhead-dublin.com\/de\/timetable\/irish-ferries-timetable\/#primaryimage"},"image":{"@id":"https:\/\/holyhead-dublin.com\/de\/timetable\/irish-ferries-timetable\/#primaryimage"},"thumbnailUrl":"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/reception-irish-ferries-and-stena-line-in-holyhead.jpg","datePublished":"2025-09-29T08:39:57+00:00","dateModified":"2026-08-28T12:42:22+00:00","description":"Abfahrtszeiten von Irish Ferries zwischen Holyhead und Dublin: Ulysses, James Joyce und Dublin Swift, f\u00fcr heute, morgen oder jedes andere Datum.","breadcrumb":{"@id":"https:\/\/holyhead-dublin.com\/de\/timetable\/irish-ferries-timetable\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/holyhead-dublin.com\/de\/timetable\/irish-ferries-timetable\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/holyhead-dublin.com\/de\/timetable\/irish-ferries-timetable\/#primaryimage","url":"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/reception-irish-ferries-and-stena-line-in-holyhead.jpg","contentUrl":"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/10\/reception-irish-ferries-and-stena-line-in-holyhead.jpg","width":1920,"height":1080,"caption":"Both Stena Line and Irish Ferries have ticket desks in Holyhead terminal."},{"@type":"BreadcrumbList","@id":"https:\/\/holyhead-dublin.com\/de\/timetable\/irish-ferries-timetable\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/holyhead-dublin.com\/de\/"},{"@type":"ListItem","position":2,"name":"Timetable","item":"https:\/\/holyhead-dublin.com\/de\/timetable\/"},{"@type":"ListItem","position":3,"name":"Irish Ferries Timetable"}]},{"@type":"WebSite","@id":"https:\/\/holyhead-dublin.com\/de\/#website","url":"https:\/\/holyhead-dublin.com\/de\/","name":"Holyhead Dublin","description":"","publisher":{"@id":"https:\/\/holyhead-dublin.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/holyhead-dublin.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/holyhead-dublin.com\/de\/#organization","name":"Holyhead Dublin","url":"https:\/\/holyhead-dublin.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/holyhead-dublin.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/09\/Holyhead-dublin-logo.svg","contentUrl":"https:\/\/holyhead-dublin.com\/de\/wp-content\/uploads\/sites\/7\/2025\/09\/Holyhead-dublin-logo.svg","width":200,"height":40,"caption":"Holyhead Dublin"},"image":{"@id":"https:\/\/holyhead-dublin.com\/de\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/holyhead-dublin.com\/de\/wp-json\/wp\/v2\/pages\/743","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/holyhead-dublin.com\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/holyhead-dublin.com\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/holyhead-dublin.com\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/holyhead-dublin.com\/de\/wp-json\/wp\/v2\/comments?post=743"}],"version-history":[{"count":16,"href":"https:\/\/holyhead-dublin.com\/de\/wp-json\/wp\/v2\/pages\/743\/revisions"}],"predecessor-version":[{"id":3642,"href":"https:\/\/holyhead-dublin.com\/de\/wp-json\/wp\/v2\/pages\/743\/revisions\/3642"}],"up":[{"embeddable":true,"href":"https:\/\/holyhead-dublin.com\/de\/wp-json\/wp\/v2\/pages\/130"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/holyhead-dublin.com\/de\/wp-json\/wp\/v2\/media\/1213"}],"wp:attachment":[{"href":"https:\/\/holyhead-dublin.com\/de\/wp-json\/wp\/v2\/media?parent=743"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}