apr 29, 2020

Funktioner og tilknytning i WP

Man kan udføre en Javascript funktion i WordPress hvor som. I det følgende beskriver jeg to måder at tilføje et JavaScript på.

Antag at vi gerne vil vise en tekst fra en JavaScript – fx stien til forælder temaet. Det lægger vi i en funktion på følgende måde i functions.php i child temaet

function custom_show_alert() {
  $cssURI =get_template_directory_uri().'/style.css';
  ob_start()   ?>
  <p> klik på knappen for at se lokationen for CSS filen </p>
  <button onclick="myFunction()">Vis sti</button>
  <script>
  function myFunction() {
       alert('<?php  echo $cssURI ?>');
  }
  </script>
 <?php
  return ob_get_clean();
}
add_shortcode('popup-uri','custom_show_alert');

Denne funktion henter først stien til en php-variabel,$cssURI, derefter lægges outputtet i en buffer ( ob_start() ). Derefter laver vi en kombination af html, JavaScript og php for at vise en knap, der ved klik udfører en alert, der viser indholdet af variablen. Tils sidst udfører vi en “ob_get_clean”, der både lukker outputstrømmen, og returnerer indholdet for det opsamlede. Resultatet er så en knap, som viser et alert vindue, når man klikker på knappen.

Denne funktion skal jo naturligvis kaldes for at blive udført. Men det er så spørgsmålet hvordan vi gør det. I denne situation har jeg valgt en short-code. Det vil sige, at man tildeler et navn, eller en alias til funktionen, og registrerer den under short ode. Navnet, som jeg har teldelt er ‘popup-uri’ og så skal jeg fortælle WordPress, at det skal i listen af shortcodes. Det gøres ved følgende statement:

add_shortcode('popup-uri','custom_show_alert');

Der er 2 ting at bemærke her.

  1. I alert funktionen skal man skrive echo $cssURI;, hvis man bare skriver $cssURI; så bliver den ikke skrevet og funktionen går i fejl.
  2. Funktionen, get_template_directory_uri henter forældretemaets uri og ikke childtemaets. For at hente childtemaets sti – så skal man skrive get_stylesheet_directory_uri

Udførsel af JavaScript overalt

Det andet eksempel er en simpel JavaScript alert vindue, der vises over alt. Denne placeres i en speciel fil i JavaScript mappen JS, og alt, der placeres i denne vil WordPress lægge i en <script> … </script> klammer. Denne fil, custom_alert_path.js indeholder følgende kode:

teksten = "Hello World";
//denne test er lidt tricky, det skal være !== ellers virker den ikke
if(teksten!==null) {
   alert(teksten);
} else {
  alert("teksten er ikke defineret");
}

Den sætter indholdet af variablen, teksten, i et alertvindue, hvis teksten ikke er null, ellers “teksten er ikke defineret”. Noter her, at for at være på den sikre side skal man teste med !== ellers virker det ikke.

Man skal nu fortælle WordPress, at dette script skal udføres globalt. Det vil sige vi registrerer scriptet og fortæller WordPress at udføre en add_action registrering

For at registrere scriptet laver vi en funktion i functions.php i childtemaet, Og så skal vi udføre funktionen ved en – add_action registrering. Registreringen af scriptet forløber, som følger

function custom_child_scripts()  {
  wp_enqueue_script('Alert sti' , get_stylesheet_directory_uri()
   . '/assets/js/custom_alert_path.js' );
}

Vi allokerer navet ‘Alert sti’ til scriptet, ved specifikation af dens sti. Da det ligger i child-temaets /asset/js/ mappe, skal vi specificere den. Og vi udfører en wp_enqueue_script, som en script.

Dette er dog ikke tilstrækkeligt. For vi skal jo også fortælle WordPress at udføre funktion, custom_child_scripts. Dette gør vi ved at udføre

add_action('wp_enqueue_scripts', 'custom_child_scripts');

Dette fortæller, at WordPress skal udføre funktionen og lægge scriptet i – listen af scripts

More Details
apr 25, 2020

WP loop og testudskrift

WordPress benytter sig af en loop, der henter indhold, som i forvejen er hentet ind via forespørgsel fra den tilhørende database. Alt bruger baseret indhold, såsom poster, sider, udgivne poster, eller kladder befinder sig i tabellen “posts”.

Når det drejer sig om udgivne indlæg, så henter database forespørgslen disse frem, Der oprettes så objekter af typen “post” og WordPress har en funktion, som henter disse frem, den hedder the_post(). Denne henter indhold fra forespørgslen og lægger den ind i template

Posterne hentes

med det format, som specificeret ved “get_post_format();

Vi kan nu checke hvilken template WordPress ved Twenty Seventeen bruger for at for at hente postene. Når det er indlæg, så bruger Twenty Seventeen skabelonen i filen archive.php. For et enkelt indlæg, – så bruges single.php. Hvis forsiden er en indlægsside, så bruges skabelonen, index.php. Men hvis forsiden er en side (page), så bruges, front-page.php. Og en almindelig side (ikke en forside), page.php. Skabelonerne er temaets kerne, og hvert tema har et antal skabeloner, som kan benyttes. Det varierer fra tema til tema.

Som et kuriosum kan nævnes, at alt indhold i WordPress gemmes i databasen, men det indhold, der vises har status af “publish”, og de gamle “inherit” eller “draft” eller noget andet. Det vil sige, alt hvad du propper af indhold i WordPress opbevares i databasen.

Notér også, at WordPress har en del funktionalitet-skabeloner til at vise sider, men det er op til temaerne at fylde dem med med indhold. Således, når Twenty Seventeen bliver initialiseret, udfører den en række initialisationer, som er obligatorisk, disse funktioner skal udføres tilstrækkeligt tidligt. Hvis man går til functions.php, ser man at initialiseringsfunktionen skal udføres som følger:

add_action( ‘after_setup_theme’, ‘twentyseventeen_setup’ );

Her er ‘twentyseventeen-setup’ initialiserings funktionen i Twenty Seventeen, og det skal udføres på et sted specificeret ved ‘after_setup_theme’. Add_action betyder, at funktionen skal udføres. WordPress har en række “hooks”, der fortæller hvad skal udføres, og hvor det skal udføres af det, som tilføjes til listen på vedkommende hook. Andre eksempler er add_shortcode, som indsætter en PHP kode ind i dokumentet.

More Details
apr 24, 2020

Templates i WordPress

WordPress opererer med de templates der stilles til rådighed fra det tema, der er aktivt. Man kan gå ind og rette i de forskellige templates, som får udseendet til at skifte. Fx kan man i den template, som hedder single.php (i Twenty Seventeen ) fjerne sidebar ved at fjerne get_sidebar().

Desværre er der en lille fejl i deres JavaScript fil, som hedder global.js ca. linje 124, som ikke tager højde for, at sidebaren kan være fjernet. Man kan sætte den ind i en if-sætning, som ikke udfører de linjer, der forudsætter en sidebar.

Man kan så gå ind og ændre css style for indlæggene, således at de får en bredde på 100% i stedet for 58%

Dette skal man naturligvis gøre i sit child-tema. Dvs sige man kopierer global.js til sit child-tema (husk hele stien skal kopieres), samt også single.php. Her kan man så foretage sine rettelser.

Vi har også taget den template, som hedder footer/site_info.php. Det er her WordPress har sin kode, som skriver “drevet af WordPress” Al den kode kan man så fjerne, og så tilføje sin egen html kode, sådan at footeren viser det indhold vi ønsker. Dette kan så formateres i style.css (i child-temaet). Alle brugerændrede klasser i css får en endelse -custom, for at sikre at man ikke kommer på kollisionskurs med WordPress egne klasser

More Details
apr 20, 2020

Problem med at fjerne sidebar

Hvis ikke man har check på sine indstillinger, så kan det gå galt med at fjerne sidebar fra single.php. Problemet er, at WordPress alligevel gerne vil læse en sidebar ind, og eftersom den ikke er defineret går den i fejl.

Her har jeg så lagt et enkelt indlæg som man kan tilgå via menuen. Det er et enkelt indlæg, der både har sidebar og footer, – altså bygget op efter skabelon i php-filen, single.php. Den kan jeg så prøve at lave eksperimenter på.

Fejlen viste sig at være en bug i en af JavaScript filerne, der kommer med temaet Twenty Seventeen. I filen global.js, som også arbejder med sidebar template, glemmer man at checke om der er en sidebar eller ej (ca. linje) 124. Jeg har rapporteret den som en bug til programmørerne..

More Details
apr 20, 2020

Ændre HTML i Child tema

Foruden at ændre i layout ved child temaets CSS fil, så kan man også lave om på HTML- strukturen ved at definere en modifikation af forældretemaets HTML. I tema Twenty Seventeen kan man gå ind i en fil , som hedder single.php og se hvilken elementer en html side bygges op af. Det foregår som følger:

  1. Hent headeren (funktion – get_header(); )
  2. indsæt to div-tags af klasse primary og main
  3. Hent alle postene – brug post template, og eventuelle kommentarer – brug kommentar-template – dette gøres i en while løkke. ( while (have_posts ) :
  4. Opdater post navigation (Forringe <– og –> næste)
  5. Når alle indlæg er læst, tilføj sidebar ved get_sidebar();,
  6. Til slut hent footeren ved get_footer();

More Details
apr 14, 2020

Flyt WordPress fra subdomæne til roddomæne

Posted on  by kg-epel — Leave a reply

Situationen kan være sådan, at du har et websted i roden af domænet, og udvikler parallelt på samme websted i WordPress i et subdomæne. Når du er parat til at skifte over til WordPress webstedet kan det gøres ret simpelt i fire trin, men dog ikke helt uden komplikationer.

  1. Du skal ændre din webstedsadresse ( Site address (URL) til websitet’s adresse fx folkemusik.kfmh.dk –> kfmh.dk. Det betyder at du ændrer webstedsadressen i databasen – det er tabel options, 2. række.
  2. Du skal kopiere (ikke flytte) index.php og .htaccess filer til roden
  3. I filen index.php har du en sætning, som følger:
    require( dirname( __FILE__ ) . ‘/wp-blog-header.php’ );
    Den skal du rette til:
    require( dirname( __FILE__ ) . ‘/folkemusik/wp-blog-header.php’ );
    Dette så at WordPress kan finde opstarts-filerne fra den nye placering
  4. Hvis du har links relativt til roden i mappen “content”. Så skal du indsætte “/folkemusik/ foran for at WordPress stadigt kan finde undersiderne. Det vil sige i stedet for ./content/…side.html skal der nu stå
    /folkemusik/content/ …. side.html
  5. Alle adressereferencer i databasen skal laves om. Derfor skal du i den oprindelige webside gå ind i kontrolpanelet –> indstillinger –> generelt og lave URL om til den URL, der gælder for den nye sted for dit website. Dette ændrer adressereferencerne i databasen, men du vil så ikke kunne komme ind i til det gamle sted. Det kræves derfor, at du har sikkerhedskopieret i forvejen. Alternativet er at bruge et plugin, som hedder duplicator. Men her risikerer du at få alt med i databasen, som ikke har relation til dit WordPress sted.

Bemærk, jo mere kompliceret webstedet er, jo flere tiltag skal der til inden omlægningen til WordPress er tilvejebragt. Endvidere skal du logge ind på wp-admin fra det gamle domæne, dvs hvis du har flyttet fra: folkemusik.kfmh.dk –> kfmh.dk skal du stadigt logge ind på folkemusik.kfmh.dk/wp-admin. Fordelen ved at flytte webstedsadressen er, at du ikke skal oprette nye WordPress tabeller, som er tilfældet hvis du blot kopierer og har to aktive WordPress installationer. Eneste måde for at undgå dette er at fjerne WordPress fra undermappen og kopiere den til rodmappen. Her kan du bruge samme tabeller med opdaterede links i tabel Options. Her kan man bruge opskriften fra forrige indlæg.

Demonstration af en short code. Husk at disse skal i child-temaets functions.php, ellers bliver det overskrevet ved opdatering af tema eller af WordPress selv.

[se-sti-til-css]

[popup-uri]

More Details
apr 14, 2020

Migrering af WordPress

Hvis man vil flytte sin WordPress websted fra det ene sted til det andet fx fra kfmh.dk til en lokal server, til localhost/kfmh er der flere ting man skal gøre. Nedenunder følger beskrivelse manuelt, og derefter med et plugin, duplicator.

  1. Først sikkerhedskopiere alt. Det kan du passende gøre med duplicator (eller manuelt – dvs downloade webfiler og exportere databasen)
  2. Så skal du ind og lave linket om til den gamle hjemmeside. Du går ind i Kontrolpanel –> Indstillinger –> Generelt og for WordPress adresse og Websteds adresse ændre https://kfmh.dk til https://localhost/kfmh. Derved kan du selvfølgelig ikke komme ind på siden igen. Grunden til at du skal gøre dette er at du skal lave alle database referencerne til URL til den gamle side om til URL for den nye. Det kan være sider, det kan være indlæg eller navigationsbarer.
  3. Nu kopierer du igen alle web filerne og eksporterer databasen ned på din computer.
  4. Hvis det er et nyt fjernsted skal du ind i wp-config og ændre adgangs specifikationerne til databasen på fjernstedet. Hvis det er lokalt websted kan du bruge de oplysninger, der findes med den, fx root uden password. Desuden skal du lave en database til din installation.
  5. Nu skal du uploade web-filerne, og derefter ind på MySQL-Admin og importere databasefilerne.
    5.a Alternativt til 2, kan du undlade at udføre ændring af URL, men til gengæld uploade et script, GitHub – til roden af dit site og udføre det og udfylde de felter, som det beder om, når step 5 er udført
  6. Når det er gjort, skal du ind i den tabel, som hedder options , finde de rækker, der hedder “siteurl” og “home” og rette dem til den rigtige URL, hvis det ikke allerede er rettet.

Migrering af WordPress til et andet domæne er ikke ukompliceret, og det vigtige er at opdatere alle referencer i databasen, så at de peger til de rigtige steder for at finde de objekter de peger på.

Oprettelse af en kopi

Figuren viser, hvor langt i processen Duplicator er nået. Her har den scannet sitet plus database. Resultatet kan ses på den næste figur.

Resultatet af scan

Den brokker sig over størrelsen af den build, som skal laves. Men det skyldes, at hvis du har noget mere på sitet , nogle backup versioner, og mange billeder/videoer. Noter, alt i databasen kopieret. Endvidere kan der være nogen navnekonflikter på nogle servere, hvis du bruger unikode – eller specialkarakterer, såsom ?! \ etc.

Hvis du klikker på en af de farvede knapper kan du få en yderligere forklaring på dens betydning. Hvis “Overview” er “Good”, så kan du duplikere dit site til et andet domæne.

Du sætter et hak ved “Yes continue with the build process!” og trykker på knappen, Build. Herved danner den en zip-fil af dit site og exporterer hele databasen – og laver et php script, installer.php.

Du skal nu angive dit URL for det nye sted, og database kontakt informationerne. Noter, at du skal have oprettet databasen på det nye sted. Er det på localhost, – så skal du bruge localhost som databasehost, root, som bruger og ik’ noget password. Du kan også have oprettet en bruger skræddersyet til formålet.

Nu skal du uploade dit build samt installer.php til roden af dit websted og derefter navigere til scriptfilen i en browser og køre den.

Hvis alt går godt har du så en næsten eksakt kopi af dit websted.

Hvis du vil bruge plugin, duplicator kan du gøre det på en forholdsvis smertefri måde. Du går ind i kontrolpanel –> duplicator og vælger fanen “Packages”. Du vælger siden “Create new” og du kommer til et vindue:

More Details