Slik konverterer du statisk HTML til et WordPress-tema uten å ødelegge nettstedet
AI-verktøy kan generere vakre statiske HTML-nettsteder svært raskt. En forside, prisseksjon, FAQ, kontaktblokk og responsivt oppsett kan være klart på minutter, og det er nyttig. Men en statisk HTML-fil er ikke det samme som et WordPress-tema. En statisk side er bare markup, CSS og JavaScript. Et WordPress-tema må fungere inne i et dynamisk system med maler, hooks, menyer, sider, plugins, mediefiler, skjemaer, SEO-plugins, caching, brukere og noen ganger WooCommerce. Den forskjellen betyr noe.
Mange WordPress-problemer starter når noen bygger et fint statisk design og så tvinger det inn i WordPress med snarveier: laster opp home.html, skriver om / til å laste en HTML-fil, blander statisk HTML med PHP, hardkoder ressurs-URL-er, kopierer skript inn i maler, går utenom rutingen, eller hopper over wp_head() og wp_footer(). Forsiden kan se fin ut mens andre deler av nettstedet ryker.
Denne artikkelen forklarer hvordan du konverterer statisk HTML til et ordentlig WordPress-tema på en trygg måte, uten å ødelegge ruting, plugins, skjemaer, checkout, SEO eller fremtidige oppdateringer.
Statisk HTML vs WordPress-tema: kjerneforskjellen
Et statisk HTML-nettsted har som regel filer som:
home.html
about.html
contact.html
style.css
script.js
images/
Hver side er en egen fil, lenker peker direkte til filer, og CSS og JavaScript lastes fra direkte stier. Et WordPress-tema fungerer annerledes. Et grunnleggende tema kan inneholde:
style.css
functions.php
header.php
footer.php
front-page.php
page.php
single.php
index.php
assets/
css/
js/
images/
template-parts/
WordPress avgjør hvilken mal som skal lastes ut fra den aktuelle forespørselen. Temaet leverer oppsettet, men WordPress håndterer ruting, innhold, plugins, menyer, media, brukere og dynamisk oppførsel. Derfor bør et statisk design konverteres inn i WordPress sitt temasystem, ikke tvinges rundt det.
Hvorfor du ikke bør bare laste opp HTML-filer til WordPress
Det er fristende å laste opp en fil som home.html og få forsiden til å laste den direkte, ofte med en .htaccess-regel som:
RewriteRule ^$ /home.html [L]
Dette kan få forsiden til å laste raskt, men det skaper også alvorlige problemer. WordPress håndterer kanskje ikke lenger forsiden normalt, dynamiske forespørsler som er avhengige av ruting kan fanges opp, plugins lastes kanskje ikke riktig, og AJAX-forespørsler kan returnere feil respons. Kontaktskjemaer, WooCommerce-checkout, søk, innloggingsomdirigeringer, flerspråklige URL-er og SEO-output kan alle oppføre seg uforutsigbart. Vi har sett akkurat dette utspille seg i en checkout-sak der en regel for statisk forside fanget opp WooCommerce-AJAX og fikk checkouten til å laste i det uendelige.
En statisk HTML-fil er frakoblet WordPress. Den inkluderer ikke automatisk header-hooks, plugin-skript, SEO-metatagger, analyse, menyer, dynamisk innhold, skjemabehandling, håndtering av WooCommerce-økter, oversettelser, cache-ekskluderinger eller admin-bar-logikk. Så selv når siden ser riktig ut, kan arkitekturen være skjør. Den bedre tilnærmingen er å konvertere HTML-en til et ordentlig tema.
Når konvertering av statisk HTML gir mening
Å konvertere statisk HTML til et WordPress-tema er verdt det når du allerede har et ferdig design (inkludert ett generert med AI), du vil at WordPress skal styre innholdet, du trenger en gjenbrukbar header og footer, du vil ha plugin- og SEO-plugin-kompatibilitet, og du vil at fremtidige oppdateringer skal være enklere enn å sjonglere tilfeldige HTML- og PHP-filer. Det er vanlig for byrånettsteder, landingssider, oppstarts- og småbedriftsnettsteder, produktsider og egendefinerte eller AI-genererte forsidedesign. Målet er å bevare designet samtidig som strukturen gjøres WordPress-nativ.
Steg 1: Organiser de statiske filene først
Før du konverterer noe, organiser kilden. En rotete mappe kan se slik ut:
home.html
contact.html
over-ons.html
privacybeleid.html
style-final-new.css
style2.css
script-copy.js
logo-new-final.png
img/
old/
backup/
Rydd den til noe forutsigbart:
source-html/
home.html
contact.html
privacy.html
terms.html
assets/
css/
js/
images/
Finn deretter ut hvilken fil som er forsiden, hvilke seksjoner som gjentas, hvor header og footer starter og slutter, hvilke CSS- og JS-filer som faktisk brukes, hvilke bilder som trengs, og hvilke sider som bør bli WordPress-sider. Ikke begynn å kode før du forstår kildestrukturen.
Steg 2: Lag en ordentlig WordPress-temamappe
Lag en ny temamappe inne i:
wp-content/themes/
For eksempel:
wp-content/themes/webnorly-custom-theme/
En ren startstruktur:
webnorly-custom-theme/
style.css
functions.php
index.php
header.php
footer.php
front-page.php
page.php
single.php
assets/
css/
js/
images/
template-parts/
Dette gir WordPress en forutsigbar struktur.
Steg 3: Legg til temaheaderen i style.css
WordPress trenger en temaheader-kommentar i style.css:
/*
Theme Name: Webnorly Custom Theme
Theme URI: https://webnorly.no/
Author: Webnorly
Description: Egendefinert WordPress-tema konvertert fra statisk HTML.
Version: 1.0.0
Text Domain: webnorly
*/
Uten dette gjenkjenner WordPress kanskje ikke temaet riktig. Du kan beholde hoved-CSS-en i assets/css/main.css og la style.css hovedsakelig inneholde temainformasjon, så lenge headeren finnes.
Steg 4: Sett opp functions.php
Filen functions.php er der du legger til temastøtte, menyer og enqueue-er ressurser:
<?php
if (!defined('ABSPATH')) {
exit;
}
function webnorly_theme_setup() {
add_theme_support('title-tag');
add_theme_support('post-thumbnails');
add_theme_support('custom-logo');
add_theme_support('html5', array(
'search-form',
'comment-form',
'comment-list',
'gallery',
'caption',
'style',
'script'
));
register_nav_menus(array(
'primary' => __('Primary Menu', 'webnorly'),
'footer' => __('Footer Menu', 'webnorly'),
));
}
add_action('after_setup_theme', 'webnorly_theme_setup');
Dette forteller WordPress at temaet ditt støtter viktige funksjoner.
Steg 5: Enqueue CSS og JavaScript riktig
Statisk HTML laster ofte ressurser slik:
<link rel="stylesheet" href="style.css">
<script src="script.js"></script>
I WordPress, bruk wp_enqueue_style() og wp_enqueue_script():
function webnorly_enqueue_assets() {
wp_enqueue_style(
'webnorly-main',
get_template_directory_uri() . '/assets/css/main.css',
array(),
filemtime(get_template_directory() . '/assets/css/main.css')
);
wp_enqueue_script(
'webnorly-main',
get_template_directory_uri() . '/assets/js/main.js',
array(),
filemtime(get_template_directory() . '/assets/js/main.js'),
true
);
}
add_action('wp_enqueue_scripts', 'webnorly_enqueue_assets');
Dette lar WordPress styre lasterekkefølgen, lar plugins legge til egne skript riktig, gjør cache busting enklere, tillater innlasting i footeren, håndterer avhengigheter, og holder optimaliseringsplugins forutsigbare. Unngå å hardkode CSS og JS inn i maler med mindre du har en god grunn.
Steg 6: Konverter HTML-headeren til header.php
Flytt toppen av HTML-filen inn i header.php. En statisk fil kan starte slik:
<!DOCTYPE html>
<html lang="no">
<head>
<meta charset="UTF-8">
<title>Nettstedstittel</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<header>
...
</header>
I WordPress bør den bli:
<!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
<meta charset="<?php bloginfo('charset'); ?>">
<meta name="viewport" content="width=device-width, initial-scale=1">
<?php wp_head(); ?>
</head>
<body <?php body_class(); ?>>
<?php wp_body_open(); ?>
<header class="site-header">
<div class="container">
<a class="site-logo" href="<?php echo esc_url(home_url('/')); ?>">
<?php bloginfo('name'); ?>
</a>
<?php
wp_nav_menu(array(
'theme_location' => 'primary',
'menu_class' => 'primary-menu',
'container' => 'nav',
'container_class'=> 'site-navigation',
'fallback_cb' => false,
));
?>
</div>
</header>
Nøkkelfunksjonene her er language_attributes(), bloginfo('charset'), wp_head(), body_class(), wp_body_open(), home_url() og wp_nav_menu(). Ikke fjern wp_head() eller wp_body_open(). Mange plugins og sporingsverktøy er avhengige av dem.
Steg 7: Konverter footeren til footer.php
Bunnen av den statiske filen går inn i footer.php. En statisk footer kan se slik ut:
<footer>
...
</footer>
<script src="script.js"></script>
</body>
</html>
I WordPress:
<footer class="site-footer">
<div class="container">
<p>© <?php echo esc_html(date('Y')); ?> <?php bloginfo('name'); ?>. Alle rettigheter reservert.</p>
<?php
wp_nav_menu(array(
'theme_location' => 'footer',
'menu_class' => 'footer-menu',
'container' => 'nav',
'fallback_cb' => false,
));
?>
</div>
</footer>
<?php wp_footer(); ?>
</body>
</html>
Ikke fjern wp_footer(). Mange plugins laster skript gjennom den, og å fjerne den kan bryte skjemaer, analyse, WooCommerce, cookie-bannere, popups, slidere, mobilmeny-skript, live chat og sporingspiksler. En manglende wp_footer() er en vanlig grunn til at nettsteder ryker etter HTML-konvertering.
Steg 8: Konverter forsiden til front-page.php
For en egendefinert forside, bruk front-page.php:
<?php get_header(); ?>
<main id="main" class="site-main">
<section class="hero">
<div class="container">
<h1>Profesjonell WordPress-hjelp</h1>
<p>Raske fikser, renere struktur og pålitelige nettsteder.</p>
</div>
</section>
<section class="services">
...
</section>
</main>
<?php get_footer(); ?>
Forsideinnholdet ligger mellom get_header() og get_footer(). Ikke plasser et nytt fullstendig HTML-dokument inne i front-page.php. Unngå dette:
<?php get_header(); ?>
<!DOCTYPE html>
<html>
<head>
...
</head>
<body>
...
</body>
</html>
<?php get_footer(); ?>
Det skaper duplisert HTML-struktur og kan gi problemer med oppsett, SEO og skript.
Steg 9: Konverter undersider til WordPress-sider
Statiske sider som about.html, contact.html, privacy.html og terms.html trenger ikke alltid egne PHP-maler. Ofte er den bedre tilnærmingen å opprette vanlige WordPress-sider i admin, lime det rensede innholdet inn i editoren, og la page.php håndtere oppsettet. En enkel page.php:
<?php get_header(); ?>
<main id="main" class="site-main">
<div class="container">
<?php
while (have_posts()) :
the_post();
?>
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<h1><?php the_title(); ?></h1>
<div class="entry-content">
<?php the_content(); ?>
</div>
</article>
<?php
endwhile;
?>
</div>
</main>
<?php get_footer(); ?>
Dette holder nettstedet håndterbart. Bruk egendefinerte sidemaler bare når en side trenger en unik struktur.
Steg 10: Fiks bilde- og ressursstier
Statisk HTML bruker ofte stier som:
<img src="images/hero.png" alt="Hero-bilde">
Inne i et tema, bruk:
<img src="<?php echo esc_url(get_template_directory_uri() . '/assets/images/hero.png'); ?>" alt="Hero-bilde">
For media som håndteres gjennom WordPress, bruk Mediebiblioteket og dynamiske felt der det er mulig. Hardkodede stier ryker når temamappen endres, nettstedet bytter domene, WordPress ligger i en undermappe, et CDN skriver om stier, flerspråklige URL-er endres, eller staging flyttes til produksjon. Bruk WordPress-funksjoner for stier.
Steg 11: Erstatt statiske menyer med WordPress-menyer
En statisk meny kan se slik ut:
<nav>
<a href="/">Hjem</a>
<a href="/about.html">Om oss</a>
<a href="/contact.html">Kontakt</a>
</nav>
Den bør bli en WordPress-meny:
wp_nav_menu(array(
'theme_location' => 'primary',
'menu_class' => 'primary-menu',
'container' => 'nav',
'container_class'=> 'site-navigation',
));
Opprett deretter menyen og tilordne den under Utseende → Menyer eller Utseende → Editor → Navigasjon, avhengig av oppsettet. Dette gjør fremtidige menyendringer enklere for nettstedseieren.
Steg 12: Hold skjemaer WordPress-native
Statiske kontaktskjemaer ser som regel slik ut:
<form action="mailto:[email protected]">
...
</form>
Det er ikke ideelt for WordPress. Bruk Contact Form 7, Fluent Forms, WPForms, Gravity Forms eller en sikker egendefinert håndterer. Skjemaer trenger validering, spambeskyttelse, e-postleveranse, nonce-verifisering, sanitering, suksess- og feilmeldinger, og logging der det trengs. Behold skjemadesignet, men koble det til et ekte WordPress-skjemasystem i stedet for å lime inn et statisk skjema og forvente at det oppfører seg som ett.
Steg 13: Bevar SEO- og plugin-output
Statisk HTML hardkoder ofte metatagger:
<title>Sidetittel</title>
<meta name="description" content="...">
I WordPress håndterer SEO-plugins disse dynamisk, men bare hvis temaet inkluderer wp_head() inne i header.php. SEO-plugins skriver ut tittel-tagger, metabeskrivelser, kanoniske URL-er, Open Graph- og Twitter-tagger, schema og robots-tagger. Hvis det konverterte temaet hopper over WordPress-hooks, forsvinner den outputen. Sjekk også brødsmuler, sitemap-pluginen, analyse, cookie-samtykke, flerspråklige metatagger og strukturerte data. Et visuelt korrekt tema kan fortsatt være teknisk svakt hvis plugin-output mangler.
Steg 14: Hold WooCommerce native når det er relevant
Hvis nettstedet bruker WooCommerce, ikke konverter handlekurv og checkout til statisk HTML. WooCommerce-sider må forbli dynamiske, siden de håndterer handlekurv-økter, checkout-felt, betalingsgatewayer, avgift, frakt, rabattkoder, ordreopprettelse, e-postutløsere, takkesiden og kontosider. Du kan style dem med CSS og trygge hooks, men ikke bygg dem på nytt som statiske sider uten en svært spesifikk grunn. For de fleste prosjekter: hold malene native, style med CSS, bruk hooks til små endringer, overstyr maler bare når det trengs, og test hele ordreflyten. En ordentlig konvertering bør ikke bryte WooCommerce-ruting eller checkout-skript.
Steg 15: Unngå dupliserte headere, footere og sidebars
Et vanlig konverteringsproblem er at WordPress skriver ut uventede standardseksjoner: en søkeboks, siste innlegg, siste kommentarer, arkiver, kategorier eller en standard sidebar. Dette skjer som regel når feil mal lastes eller get_sidebar() fortsatt er inkludert. Søk i temafilene etter:
get_sidebar();
dynamic_sidebar();
the_widget();
Fjern sidebar-kall fra maler der de ikke trengs, og forsikre deg om at front-page.php faktisk lastes. En rask test er å legge dette øverst i front-page.php midlertidig, oppdatere forsiden, og så fjerne det med en gang:
<?php
die('front-page.php lastes');
Dette bekrefter hvilken mal WordPress bruker.
Steg 16: Gjør temaet mobiltilpasset
Designet ditt er kanskje allerede responsivt, men konvertering kan likevel bryte mobiloppsettet. Sjekk mobilheaderen, menyveksleren, hero-seksjonen, kort, skjemaer, tabeller, checkout hvis WooCommerce finnes, footerkolonner, knapper, lange overskrifter, bildeskalering og mellomrom. Bruk DevTools og testing på ekte enheter der det er mulig, med spesiell oppmerksomhet på:
max-width
overflow-x
grid-template-columns
flex-wrap
position: fixed
sticky headers
Et vanlig problem etter konvertering er horisontal scrolling på mobil fordi én seksjon er bredere enn viewporten. Legg dette til kun som et feilsøkingssteg, ikke en endelig blind fiks, og finn deretter det faktiske elementet som forårsaker overflowen:
* {
box-sizing: border-box;
}
img {
max-width: 100%;
height: auto;
}
Steg 17: Test WordPress-malhierarkiet
WordPress velger en mal basert på hierarkiet:
front-page.php → forside
page.php → vanlige sider
single.php → blogginnlegg
archive.php → arkiver
index.php → fallback
404.php → ikke funnet-side
Som et minimum, inkluder:
index.php
front-page.php
page.php
single.php
En svært enkel index.php:
<?php get_header(); ?>
<main id="main" class="site-main">
<div class="container">
<?php
if (have_posts()) :
while (have_posts()) :
the_post();
the_title('<h2>', '</h2>');
the_excerpt();
endwhile;
else :
echo '<p>Fant ikke noe innhold.</p>';
endif;
?>
</div>
</main>
<?php get_footer(); ?>
WordPress trenger en fallback-mal, så ikke stol bare på front-page.php.
Steg 18: Test etter aktivering
Etter at du har aktivert temaet, test forsiden, vanlige sider, et blogginnlegg, 404-siden, søk, kontaktskjemaet, menylenker, mobilmenyen, footerlenker, admin-baren, SEO-plugin-output, cookie-banneret, analyse og cache-plugin-oppførsel. Hvis WooCommerce finnes, test også produktsiden, handlekurven, checkouten, valg av betalingsmetode, ordrebekreftelsessiden og e-poster. Nettstedet er ikke klart bare fordi forsiden ser riktig ut. Et tema er klart når hele nettstedsflyten fungerer.
Vanlige feil under konvertering
Å beholde hardkodede lokale filstier
Dårlig:
<link rel="stylesheet" href="C:/Users/Desktop/site/style.css">
Bedre: enqueue med wp_enqueue_style().
Å glemme wp_head() og wp_footer()
Dette bryter plugin-skript og SEO-output.
Å duplisere fullstendige HTML-dokumenter inne i maler
Maler bør ikke inneholde dupliserte html-, head– og body-tagger når du bruker get_header() og get_footer().
Å servere forsiden gjennom .htaccess
Bruk front-page.php i stedet.
Å hardkode menyer
Bruk wp_nav_menu().
Å bryte dynamiske plugin-sider
Ikke overstyr dynamisk oppførsel med statisk markup.
Å ignorere mobil
Test ekte oppsett, ikke bare desktop.
Å redigere live uten backup
Ha alltid en mulighet for tilbakerulling.
En tryggere konverteringsarbeidsflyt
En pålitelig arbeidsflyt ser slik ut:
- Ta backup av det nåværende nettstedet.
- Lag et staging-nettsted.
- Organiser de statiske HTML-filene.
- Lag en ny temamappe.
- Legg til
style.cssogfunctions.php. - Enqueue CSS og JS.
- Bygg
header.phpogfooter.php. - Konverter forsiden til
front-page.php. - Lag
page.php,single.phpogindex.php. - Erstatt hardkodede stier.
- Registrer WordPress-menyer.
- Koble til skjemaer riktig.
- Test plugin-output.
- Test mobil.
- Test forretningskritiske flyter.
- Distribuer forsiktig.
- Tøm cache og test på nytt.
Dette er tregere enn å laste opp en HTML-fil, men det er tryggere og langt mer vedlikeholdbart.
Når du bør be om hjelp
Det er verdt å få WordPress-hjelp hvis forsiden fungerer men andre sider ser ødelagte ut, standard-widgeter dukker opp uventet, CSS ikke laster, mobil ryker etter konvertering, plugins slutter å fungere, skjemaer ikke sendes, WooCommerce-checkout henger, menyer ikke kan redigeres i WordPress, SEO-tagger mangler, WordPress laster feil mal, statiske .html-filer blandes med tema-PHP, eller .htaccess-regler brukes til å tvinge frem sider. Dette betyr som regel at strukturen trenger opprydding, ikke flere lapper.
Avsluttende tanker
Å konvertere statisk HTML til WordPress handler ikke bare om å endre filnavn fra .html til .php. En ordentlig konvertering flytter designet inn i WordPress-arkitekturen: header i header.php, footer i footer.php, forside i front-page.php, innhold gjennom page.php, CSS og JS enqueue-et riktig, menyer styrt av WordPress, skjemaer håndtert sikkert, plugins som får jobbe gjennom hooks, og ruting holdt inne i WordPress. AI-generert HTML kan være et godt utgangspunkt, men det ferdige nettstedet trenger fortsatt ordentlig struktur. Gjort riktig får du både et egendefinert design og et vedlikeholdbart nettsted.
Hvis nettstedet ditt nå blander statisk HTML, egendefinert PHP og WordPress-maler, kan Webnorly rydde opp i strukturen og konvertere det til et stabilt WordPress-tema. Send oss nettstedet, så staker vi ut den tryggeste veien fra ditt nåværende oppsett til et ordentlig tema.
Relaterte artikler
Sjekkliste for gjennomgang av AI-generert WordPress-kode
AI kan generere WordPress-kode på sekunder, men en kodesnutt som ser riktig ut, kan likevel bryte checkout, omdirigeringer, AJAX eller plugin-kompatibilitet. Denne sjekklisten i 20 punkter gir deg en praktisk måte å gjennomgå AI-generert kode på før den berører functions.php, .htaccess eller WooCommerce, og dekker plassering, hooks, sanitering, escaping, sikkerhet, ytelse og en plan for tilbakerulling.
Les artikkelFør du limer AI-generert PHP inn i WordPress, sjekk disse tingene
AI kan skrive en WordPress PHP-kodesnutt på sekunder, men limt inn uten gjennomgang kan den utløse advarsler, bryte checkout-AJAX, gi hvit skjerm eller skape omdirigeringsløkker. Her er de 14 tingene du bør sjekke før du limer AI-generert PHP inn i WordPress, fra variabelsjekker og sanitering til hooks, nonces og en tryggere plasseringsstrategi, med før-og-etter-kode.
Les artikkelWooCommerce checkout henger i innlasting? Vanlige årsaker og løsninger
En WooCommerce-checkout som henger, blokkerer bestillinger og koster deg salg i det stille mens resten av nettstedet ser fint ut. Spinneren er bare symptomet. Denne guiden dekker de 11 vanligste årsakene, fra AJAX som returnerer HTML til caching, PHP-advarsler, server-rewrites og brannmurblokkeringer, pluss en steg-for-steg-prosess for å finne forespørselen som faktisk feiler.
Les artikkel