joerglohrerde/public/2021/11/17/wordpress-werkstatt.html/index.html

443 lines
21 KiB
HTML
Raw Normal View History

2024-11-06 15:55:54 +01:00
<!DOCTYPE html>
2025-01-28 18:18:59 +01:00
<html lang="de" dir="auto">
<head><meta charset="utf-8">
2025-01-28 18:18:59 +01:00
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
2025-01-28 18:18:59 +01:00
<title>WordPress Werkstatt PHP | Jörg Lohrer</title>
<meta name="keywords" content="ACF, WordPress, Formulare, JSON, Plugin">
<meta name="description" content="Advanced Custom Fields und Formulareingaben">
<meta name="author" content="Jörg Lohrer">
<link rel="canonical" href="https://joerg-lohrer.de/2021/11/17/wordpress-werkstatt.html/">
2025-01-28 18:18:59 +01:00
<link crossorigin="anonymous" href="/assets/css/stylesheet.b609c58d5c11bb90b1a54e04005d74ad1ddf22165eb79f5533967e57df9c3b50.css" integrity="sha256-tgnFjVwRu5CxpU4EAF10rR3fIhZet59VM5Z&#43;V9&#43;cO1A=" rel="preload stylesheet" as="style">
<link rel="icon" href="https://joerg-lohrer.de/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="https://joerg-lohrer.de/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://joerg-lohrer.de/favicon-32x32.png">
<link rel="apple-touch-icon" href="https://joerg-lohrer.de/apple-touch-icon.png">
<link rel="mask-icon" href="https://joerg-lohrer.de/safari-pinned-tab.svg">
2025-01-28 18:18:59 +01:00
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" hreflang="de" href="https://joerg-lohrer.de/2021/11/17/wordpress-werkstatt.html/">
2025-01-28 18:18:59 +01:00
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
<style>
@media (prefers-color-scheme: dark) {
:root {
--theme: rgb(29, 30, 32);
--entry: rgb(46, 46, 51);
--primary: rgb(218, 218, 219);
--secondary: rgb(155, 156, 157);
--tertiary: rgb(65, 66, 68);
--content: rgb(196, 196, 197);
--code-block-bg: rgb(46, 46, 51);
--code-bg: rgb(55, 56, 62);
--border: rgb(51, 51, 51);
}
2024-11-06 15:55:54 +01:00
2025-01-28 18:18:59 +01:00
.list {
background: var(--theme);
}
2024-11-06 15:55:54 +01:00
2025-01-28 18:18:59 +01:00
.list:not(.dark)::-webkit-scrollbar-track {
background: 0 0;
}
2024-11-06 15:55:54 +01:00
2025-01-28 18:18:59 +01:00
.list:not(.dark)::-webkit-scrollbar-thumb {
border-color: var(--theme);
}
}
2024-11-06 15:55:54 +01:00
2025-01-28 18:18:59 +01:00
</style>
</noscript><meta property="og:title" content="WordPress Werkstatt PHP" />
<meta property="og:description" content="Advanced Custom Fields und Formulareingaben" />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://joerg-lohrer.de/2021/11/17/wordpress-werkstatt.html/" />
<meta property="og:image" content="https://joerg-lohrer.de/04-termine-neu.png" /><meta property="article:section" content="posts" />
<meta property="article:published_time" content="2021-11-17T00:00:00+00:00" />
<meta property="article:modified_time" content="2021-11-17T00:00:00+00:00" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:image" content="https://joerg-lohrer.de/04-termine-neu.png" />
<meta name="twitter:title" content="WordPress Werkstatt PHP"/>
<meta name="twitter:description" content="Advanced Custom Fields und Formulareingaben"/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1 ,
"name": "Posts",
"item": "https://joerg-lohrer.de/posts/"
},
{
"@type": "ListItem",
"position": 2 ,
"name": "WordPress Werkstatt PHP",
"item": "https://joerg-lohrer.de/2021/11/17/wordpress-werkstatt.html/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "WordPress Werkstatt PHP",
"name": "WordPress Werkstatt PHP",
"description": "Advanced Custom Fields und Formulareingaben",
"keywords": [
"ACF", "WordPress", "Formulare", "JSON", "Plugin"
],
"articleBody": "WordPress Werkstatt PHP Zunächst wird auf relilab.org das kostenfreie Plugin ACF - Advanced Custom Fields installiert und aktiviert. Dies ermöglicht weitere individuelle Beitragsfelder für die Beiträge. Nun kann manuell aktiviert oder eine Feldgruppe importiert werden - hier mittels dieser JSON-Datei, die das abkürzt: mit dem Ergebnis, dass unter allen WordPress-Beiträgen jetzt zwei Terminfelder erscheinen, die ausgefüllt werden können: Zudem gibt es neu eine Kategorie “Termine”, die aktiviert werden kann mit Unterkategorien, die später Übersichtsseiten ermöglichen: Jetzt wird das Plugin relilab-termine installiert und aktiviert Nun kann mittels Shortcode [relilab_termine] eine Terminübersicht als WordPress-Block erzeugt werden: JSON ACF-JSON-Export: [ { \"key\": \"group_6193936e4f12c\", \"title\": \"Termin\", \"fields\": [ { \"key\": \"field_619393f8e62e0\", \"label\": \"Startet am\", \"name\": \"relilab_startdate\", \"type\": \"date_time_picker\", \"instructions\": \"\", \"required\": 0, \"conditional_logic\": 0, \"wrapper\": { \"width\": \"\", \"class\": \"\", \"id\": \"\" }, \"display_format\": \"d.m.Y H:i\", \"return_format\": \"Y-m-d H:i\", \"first_day\": 1 }, { \"key\": \"field_619394a3e62e1\", \"label\": \"Endet am\", \"name\": \"relilab_enddate\", \"type\": \"date_time_picker\", \"instructions\": \"\", \"required\": 0, \"conditional_logic\": 0, \"wrapper\": { \"width\": \"\", \"class\": \"\", \"id\": \"\" }, \"display_format\": \"d.m.Y H:i\", \"return_format\": \"Y-m-d H:i\", \"first_day\": 1 } ], \"location\": [ [ { \"param\": \"post_type\", \"operator\": \"==\", \"value\": \"post\" } ] ], \"menu_order\": 0, \"position\": \"normal\", \"style\": \"default\", \"label_placement\": \"left\", \"instruction_placement\": \"label\", \"hide_on_screen\": \"\", \"active\": true, \"description\": \"\", \"show_in_rest\": 0, \"acfe_display_title\": \"\", \"acfe_autosync\": \"\", \"acfe_form\": 0, \"acfe_meta\": \"\", \"acfe_note\": \"\" } ] PHP Software PHP-Storm https://www.jetbrains.com/de-de/phpstorm/\nShortcode zum Sprechen bringen https://developer.wordpress.org/reference/functions/add_shortcode/ In PhpStorm add_shortcode( string $tag, callable $callback )\nalle Termine listen, die https://www.advancedcustomfields.com/resources/orde-posts-by-custom-fields/\nPHP-Storm nutzt als External Library dann WordPress Plugin Unsere Funktion:\n/** *Plugin Name: relilab Termine */ add_shortcode('termine','termineAusgeben'); function termineAusgeben( $atts ) { $posts = get_posts(array( 'post_type'\t=\u003e 'post', 'posts_per_page'\t=\u003e -1, 'category' =\u003e 'termine', 'meta_key'\t=\u003e 'relilab_startdate', 'orderby'\t=\u003e 'meta_value', 'order'\t=\u003e 'DESC' )); // ob_start(); global $post; ?\u003e \u003c?php foreach ($posts as $post) { setup_postdata( $post ) ?\u003e \u003c?php the_title(); ?\u003e (date: \u003c?php the_field('relilab_startdate'); ?\u003e) \u003c?php } ?\u003e \u003c?php wp_reset_postdata(); // return ob_get_clean(); } ",
"wordCount" : "320",
"inLanguage": "de",
"image":"https://joerg-lohrer.de/04-termine-neu.png","datePublished": "2021-11-17T00:00:00Z",
"dateModified": "2021-11-17T00:00:00Z",
"author":{
"@type": "Person",
"name": "Jörg Lohrer"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://joerg-lohrer.de/2021/11/17/wordpress-werkstatt.html/"
},
"publisher": {
"@type": "Organization",
"name": "Jörg Lohrer",
"logo": {
"@type": "ImageObject",
"url": "https://joerg-lohrer.de/favicon.ico"
}
}
}
</script>
2024-11-06 15:55:54 +01:00
</head>
2025-01-28 18:18:59 +01:00
<body class="" id="top">
<script>
if (localStorage.getItem("pref-theme") === "dark") {
document.body.classList.add('dark');
} else if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
} else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.body.classList.add('dark');
}
2024-11-06 15:55:54 +01:00
2025-01-28 18:18:59 +01:00
</script>
2024-11-06 15:55:54 +01:00
2025-01-28 18:18:59 +01:00
<header class="header">
<nav class="nav">
<div class="logo">
<a href="https://joerg-lohrer.de/" accesskey="h" title="Jörg Lohrer (Alt + H)">Jörg Lohrer</a>
2025-01-28 18:18:59 +01:00
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
<ul class="lang-switch"><li>|</li>
</ul>
</div>
</div>
<ul id="menu">
<li>
<a href="https://joerg-lohrer.de/" title="Jörg Lohrer">
2025-01-28 18:18:59 +01:00
<span>Home</span>
</a>
</li>
<li>
<a href="https://joerg-lohrer.de/archives/" title="Archive">
2025-01-28 18:18:59 +01:00
<span>Blog</span>
</a>
</li>
<li>
<a href="https://joerg-lohrer.de/impressum/" title="Impressum">
2025-01-28 18:18:59 +01:00
<span>Impressum</span>
</a>
</li>
<li>
<a href="https://reliverse.social/@joerglohrer" title="Mastodon">
<span><i class="fa fa-heart"></i>Mastodon</span>&nbsp;
<svg fill="none" shape-rendering="geometricPrecision" stroke="currentColor" stroke-linecap="round"
stroke-linejoin="round" stroke-width="2.5" viewBox="0 0 24 24" height="12" width="12">
<path d="M18 13v6a2 2 0 01-2 2H5a2 2 0 01-2-2V8a2 2 0 012-2h6"></path>
<path d="M15 3h6v6"></path>
<path d="M10 14L21 3"></path>
</svg>
</a>
</li>
</ul>
</nav>
</header>
<main class="main">
<article class="post-single">
<header class="post-header">
2024-11-06 15:55:54 +01:00
2025-01-28 18:18:59 +01:00
<h1 class="post-title entry-hint-parent">
WordPress Werkstatt PHP
</h1>
<div class="post-description">
Advanced Custom Fields und Formulareingaben
2024-11-06 15:55:54 +01:00
</div>
2025-01-28 18:18:59 +01:00
<div class="post-meta"><span title='2021-11-17 00:00:00 +0000 UTC'>November 17, 2021</span>&nbsp;·&nbsp;Jörg Lohrer
2024-11-06 15:55:54 +01:00
</div>
2025-01-28 18:18:59 +01:00
</header>
<figure class="entry-cover">
<img loading="eager" srcset="https://joerg-lohrer.de/2021/11/17/wordpress-werkstatt.html/04-termine-neu_hu_d84b3ea31f65de04.png 360w ,https://joerg-lohrer.de/2021/11/17/wordpress-werkstatt.html/04-termine-neu_hu_76b59ae104e8ad4.png 480w ,https://joerg-lohrer.de/2021/11/17/wordpress-werkstatt.html/04-termine-neu_hu_ecfff05140c1e1bf.png 720w ,https://joerg-lohrer.de/2021/11/17/wordpress-werkstatt.html/04-termine-neu_hu_10d171ed75ea1064.png 1080w ,https://joerg-lohrer.de/2021/11/17/wordpress-werkstatt.html/04-termine-neu.png 1350w"
sizes="(min-width: 768px) 720px, 100vw" src="https://joerg-lohrer.de/2021/11/17/wordpress-werkstatt.html/04-termine-neu.png" alt=""
width="1350" height="590">
</figure>
2025-01-28 18:18:59 +01:00
<div class="post-content"><h1 id="wordpress-werkstatt-php">WordPress Werkstatt PHP<a hidden class="anchor" aria-hidden="true" href="#wordpress-werkstatt-php">#</a></h1>
<p>Zunächst wird auf relilab.org das kostenfreie <a href="https://de.wordpress.org/plugins/advanced-custom-fields/">Plugin ACF - Advanced Custom Fields</a> installiert und aktiviert.
2024-11-06 15:55:54 +01:00
Dies ermöglicht weitere individuelle Beitragsfelder für die Beiträge.
2025-01-28 18:18:59 +01:00
Nun kann manuell aktiviert oder eine Feldgruppe importiert werden - hier mittels <a href="#ACF-JSON-Export">dieser JSON-Datei</a>, die das abkürzt:
<img loading="lazy" src="h01-json-import.png" alt="" />
2024-11-06 15:55:54 +01:00
mit dem Ergebnis, dass unter allen WordPress-Beiträgen jetzt zwei Terminfelder erscheinen, die ausgefüllt werden können:
2025-01-28 18:18:59 +01:00
<img loading="lazy" src="02-terminfelder.png" alt="" />
2024-11-06 15:55:54 +01:00
Zudem gibt es neu eine Kategorie &ldquo;Termine&rdquo;, die aktiviert werden kann mit Unterkategorien, die später Übersichtsseiten ermöglichen:
2025-01-28 18:18:59 +01:00
<img loading="lazy" src="03-kategorien.png" alt="" />
2024-11-06 15:55:54 +01:00
2025-01-28 18:18:59 +01:00
Jetzt wird das <a href="https://github.com/rpi-virtuell/relilab-termine">Plugin relilab-termine</a> installiert und aktiviert
2024-11-06 15:55:54 +01:00
Nun kann mittels Shortcode <code>[relilab_termine]</code> eine Terminübersicht als WordPress-Block erzeugt werden:
2025-01-28 18:18:59 +01:00
<img loading="lazy" src="04-termine-neu.png" alt="" />
2024-11-06 15:55:54 +01:00
</p>
2025-01-28 18:18:59 +01:00
<h2 id="json">JSON<a hidden class="anchor" aria-hidden="true" href="#json">#</a></h2>
<h4 id="acf-json-export">ACF-JSON-Export:<a hidden class="anchor" aria-hidden="true" href="#acf-json-export">#</a></h4>
2024-11-06 15:55:54 +01:00
<pre tabindex="0"><code class="language-json=" data-lang="json=">[
{
&#34;key&#34;: &#34;group_6193936e4f12c&#34;,
&#34;title&#34;: &#34;Termin&#34;,
&#34;fields&#34;: [
{
&#34;key&#34;: &#34;field_619393f8e62e0&#34;,
&#34;label&#34;: &#34;Startet am&#34;,
&#34;name&#34;: &#34;relilab_startdate&#34;,
&#34;type&#34;: &#34;date_time_picker&#34;,
&#34;instructions&#34;: &#34;&#34;,
&#34;required&#34;: 0,
&#34;conditional_logic&#34;: 0,
&#34;wrapper&#34;: {
&#34;width&#34;: &#34;&#34;,
&#34;class&#34;: &#34;&#34;,
&#34;id&#34;: &#34;&#34;
},
&#34;display_format&#34;: &#34;d.m.Y H:i&#34;,
&#34;return_format&#34;: &#34;Y-m-d H:i&#34;,
&#34;first_day&#34;: 1
},
{
&#34;key&#34;: &#34;field_619394a3e62e1&#34;,
&#34;label&#34;: &#34;Endet am&#34;,
&#34;name&#34;: &#34;relilab_enddate&#34;,
&#34;type&#34;: &#34;date_time_picker&#34;,
&#34;instructions&#34;: &#34;&#34;,
&#34;required&#34;: 0,
&#34;conditional_logic&#34;: 0,
&#34;wrapper&#34;: {
&#34;width&#34;: &#34;&#34;,
&#34;class&#34;: &#34;&#34;,
&#34;id&#34;: &#34;&#34;
},
&#34;display_format&#34;: &#34;d.m.Y H:i&#34;,
&#34;return_format&#34;: &#34;Y-m-d H:i&#34;,
&#34;first_day&#34;: 1
}
],
&#34;location&#34;: [
[
{
&#34;param&#34;: &#34;post_type&#34;,
&#34;operator&#34;: &#34;==&#34;,
&#34;value&#34;: &#34;post&#34;
}
]
],
&#34;menu_order&#34;: 0,
&#34;position&#34;: &#34;normal&#34;,
&#34;style&#34;: &#34;default&#34;,
&#34;label_placement&#34;: &#34;left&#34;,
&#34;instruction_placement&#34;: &#34;label&#34;,
&#34;hide_on_screen&#34;: &#34;&#34;,
&#34;active&#34;: true,
&#34;description&#34;: &#34;&#34;,
&#34;show_in_rest&#34;: 0,
&#34;acfe_display_title&#34;: &#34;&#34;,
&#34;acfe_autosync&#34;: &#34;&#34;,
&#34;acfe_form&#34;: 0,
&#34;acfe_meta&#34;: &#34;&#34;,
&#34;acfe_note&#34;: &#34;&#34;
}
]
2025-01-28 18:18:59 +01:00
</code></pre><h2 id="php">PHP<a hidden class="anchor" aria-hidden="true" href="#php">#</a></h2>
<h3 id="software">Software<a hidden class="anchor" aria-hidden="true" href="#software">#</a></h3>
<h4 id="php-storm">PHP-Storm<a hidden class="anchor" aria-hidden="true" href="#php-storm">#</a></h4>
<p><a href="https://www.jetbrains.com/de-de/phpstorm/">https://www.jetbrains.com/de-de/phpstorm/</a></p>
<h5 id="shortcode-zum-sprechen-bringen">Shortcode zum Sprechen bringen<a hidden class="anchor" aria-hidden="true" href="#shortcode-zum-sprechen-bringen">#</a></h5>
<p><a href="https://developer.wordpress.org/reference/functions/add_shortcode/">https://developer.wordpress.org/reference/functions/add_shortcode/</a>
2024-11-06 15:55:54 +01:00
In PhpStorm
2025-01-28 18:18:59 +01:00
<img loading="lazy" src="05-php-storm.png" alt="" />
2024-11-06 15:55:54 +01:00
<code>add_shortcode( string $tag, callable $callback )</code></p>
<p>alle Termine listen, die
2025-01-28 18:18:59 +01:00
<a href="https://www.advancedcustomfields.com/resources/orde-posts-by-custom-fields/">https://www.advancedcustomfields.com/resources/orde-posts-by-custom-fields/</a></p>
<p><img loading="lazy" src="06-termine-listen.png" alt="" />
2024-11-06 15:55:54 +01:00
</p>
<p>PHP-Storm nutzt als External Library dann WordPress
2025-01-28 18:18:59 +01:00
<img loading="lazy" src="07-external-library.png" alt="" />
2024-11-06 15:55:54 +01:00
</p>
2025-01-28 18:18:59 +01:00
<h3 id="plugin">Plugin<a hidden class="anchor" aria-hidden="true" href="#plugin">#</a></h3>
2024-11-06 15:55:54 +01:00
<p>Unsere Funktion:</p>
<pre tabindex="0"><code>/**
*Plugin Name: relilab Termine
*/
add_shortcode(&#39;termine&#39;,&#39;termineAusgeben&#39;);
function termineAusgeben( $atts ) {
$posts = get_posts(array(
&#39;post_type&#39; =&gt; &#39;post&#39;,
&#39;posts_per_page&#39; =&gt; -1,
&#39;category&#39; =&gt; &#39;termine&#39;,
&#39;meta_key&#39; =&gt; &#39;relilab_startdate&#39;,
&#39;orderby&#39; =&gt; &#39;meta_value&#39;,
&#39;order&#39; =&gt; &#39;DESC&#39;
));
// ob_start();
global $post;
?&gt;
&lt;ul&gt;
&lt;?php
foreach ($posts as $post) {
setup_postdata( $post )
?&gt;
&lt;li&gt;
&lt;a href=&#34;&lt;?php the_permalink(); ?&gt;&#34;&gt;&lt;?php the_title(); ?&gt; (date: &lt;?php the_field(&#39;relilab_startdate&#39;); ?&gt;)&lt;/a&gt;
&lt;/li&gt;
&lt;?php
}
?&gt;
&lt;/ul&gt;
&lt;?php
wp_reset_postdata();
// return ob_get_clean();
}
</code></pre>
</div>
2025-01-28 18:18:59 +01:00
<footer class="post-footer">
<ul class="post-tags">
</ul>
</footer>
</article>
</main>
2024-11-06 15:55:54 +01:00
2025-01-28 18:18:59 +01:00
<footer class="footer">
<span>&copy; 2025 <a href="https://joerg-lohrer.de/">Jörg Lohrer</a></span>
2025-01-28 18:18:59 +01:00
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
<a rel="me" href="https://reliverse.social/@joerglohrer">Mastodon</a>
2024-11-06 15:55:54 +01:00
</span>
2025-01-28 18:18:59 +01:00
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
<path d="M12 6H0l6-6z" />
</svg>
</a>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
2024-11-06 15:55:54 +01:00
2025-01-28 18:18:59 +01:00
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
2024-11-06 15:55:54 +01:00
2025-01-28 18:18:59 +01:00
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
2024-11-06 15:55:54 +01:00
2025-01-28 18:18:59 +01:00
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
}
})
2024-11-06 15:55:54 +01:00
2025-01-28 18:18:59 +01:00
</script>
2024-11-06 15:55:54 +01:00
</body>
2025-01-28 18:18:59 +01:00
2024-11-06 15:55:54 +01:00
</html>