aug 15, 2020

Øge maksimum filstørrelse for upload i XAMPP

Hvis du vil importere en stor databasefil, støder du måske på en fejlmeddelelse, som siger,
Du har sandsynligvis forsøgt at overføre en fil som er for stor. Se venligst dokumentationen for måder at omgå denne begrænsning. For at give tilladelse til at importere større filer skal du

  1. Åbne php mappen i XAMPP
  2. Åbn filen php.ini i notesblok
  3. Find linje med post_max_size= 8M, sæt den til fx 256M
  4. find linje med upload_max_filesize=2M, sæt den til fx 128M
  5. Noter at upload_max_filesize <= post_max_size
  6. Gem filen med disse ændringer

Nu skulle du kunne uploade filer op til 128MB

More Details
aug 15, 2020

Opdatering til WordPress 6.61

Både kg-epel.dk og kfmh.dk er opdateret til den nyeste WordPress, 6.6.1 Opdateringen ser ud til at være aldeles uproblematisk. Det skyldes givetvis at  at jeg pt. ikke kører med komplicerede php-programmer

Men som for sikkerhed mod problemer opstået undervejs fik jeg deaktiveret alle plugins forinden, derefter kørt update af WordPress, derefter opdateret alle plugins til deres nyeste versioner.

Til sidst så aktiveret alle plugins, der er nødvendige for visning af websiden.

More Details
jun 19, 2020

Brug af JQuery til vise og lukke rammer i WordPress

Grundlæggende

Man har nogle gange nogle ting i rammer, som man vil kunne vise eller ikke vise. I det følgende vil jeg beskrive, hvordan man kan bruge jQuery til at skifte mellem vise og skjule iFrames.

jQuery er en special form for JavaScript, hvor man har samlet en del funktionalitet i en speciel sprogkonstruktion. Som det hedder i w3Schools “jQuery is a lightweight, “write less, do more”, JavaScript library.” Det vil sige, at når man bruger jQuery, skal man også have adgang til biblioteket. Dette bibliotek er (b.l. andre) indlæst i WordPress i forvejen.

jQuery er ment til at gøre JavaScript programmer simplere, og den grundlæggende syntaks er:

$(selector).action()

  • $ til at definere/tilgå  jQuery biblioteket ($ er et alias for jQuery)
  • En (selektor) til at formulere en forespørgsel eller finde  HTML elementer
  • En JQuery action() til at udføre en handling på de fundne elementer. Action kan her også være en event, fx muse klik,

Et eksempel er som følger

$(“button”).click();
$(“p”).hide();
 

Dette skjuler alle HTML elementer som er <p> type, (men ikke “p.dontHide”,  som udtrykkes ved <p class=”dontHide”>) Selektoren her er “p”, en anden selektor er “p#identitet” eller “p.specielKlasse”

Når man vil bruge jQuery, så skal hele dokumentet være færdig-indlæst, det specificerer man ved at indlejre alle jQuery sætningerne som følger:

$(document).ready(function(){
  // jQuery funktion erne skrives her…
});

og den første funktion specificerer, at JQuery først går i gang, når dokumentet er indlæst.

Funktioner og events i jQuery

Funktionerne i jQuery handler altså om finde selektorer og udføre handlinger på dem, der møder søgekriterierne. Der er også begivenheder, som når man klikker på en knap. I jQuery har de fleste begivenheder (events) en tilsvarende jQuery funktion,  som i *.click() eksemplet oven for. Og vi vil gerne kunne handle på det. Her er en beskrivelse taget fra w3shcools

$(“p”).click(function(){
  // Handling specificeres her!!
});

Eksempel:

$(“p”).click(function(){
  $(this).hide();
});

Noter at vi definerer handlingen i en ny funktion. Her betyder dette, at hvis vi klikker på en p-tag, så skal vi skjule denne. Det kunne også være en en <span> element, der ved et klik får p-elementet til at blive skjult.  Så ville der stå

$(“span”).click(function(){
  $(“p”).hide();
});

Her skal der noteres, at jQuery skjuler ALLE p-tags, eftersom de møder søgekriterierne.  Hvis man vil specificere handlinger for flere events, så kan  man bruge on-funktionen. Et eksempel på det som nedenstående:

$(“p”).on({
  mouseenter: function(){
    $(this).css(“background-color”“lightgray”);
  },
  mouseleave: function(){
    $(this).css(“background-color”“lightblue”);
  },
  click: function(){
    $(this).css(“background-color”“yellow”);
  }
});

Her defineres der forskellige funktioner for 3 forskellige events. Hvor baggrundsfarven for p-elementet bliver lysegråt, når man flytter musen henover elementet, – lyseblåt, når man fjerner musepilen fra elementet, og når man klikker på den, bliver den gul. Den ender med at blive lyseblå til sidst, da man jo skal ud med musepilen.

Vise og skjule iFrames

Foruden hide og show funkktionerne, har vi også en funktion, som hedder “toggle”. Den kan bruges til at skiftes til at vise og skjule et element. Et eksempel på dette er, som følger. Et eksempel på dette er

$(“button”).click(function(){
      $(“p”).toggle();
});

Dette vil vi gerne anvende på en iFrame element, som ligger ved siden af et span-element. I iFrame elementet indlæses et nyt indhold, som følger

<span class=”iframe”><strong>Når man klikker her skiftes iFrame til at være synlig og ikke synlig</strong></span>
<iframe style=”display: none;” src=”/wp-content/KFMH-Nyt/nyt/2011/nyt20110810.html” width=”100%” height=”400px”></iframe>

Og vores jQuery script kunne se ud som følger:

$(document).ready(function(){
   $(“.iframe”).click(function() {
      $(“iframe”).toggle(); 
   });
});

Denne funktion vil skiftevis vise og skjule iFrame-elementet,  når man klikker (span) elementet af klasse “iFrame”. Noter, også at den vil vise og skjule ALLE iFrames, som den finder ved selektor “iFrame”.

Hvis man nu forestiller sig, at man har en liste af overskrifter, – hvor man kan hente indhold, skjule indhold ved at klikke på overskriften. Så kan man netop benytte denne funktion. Men her skal der en mekanisme til, så at ikke alle iFrames åbnes på en gang.  Derfor giver vi vores iFrames en entydig identitet, og noterer det oppe i overskriften, så kun dette iFrame vises og ikke de andre, når man klikker på overskriften. Det bliver til

<td>&nbsp;<span class=”iframe” name=”d20110810″><strong>Vis iFrame med identitet #d20110810 og ikke andre</strong></span><iframe id=”d20110810″ style=”display: none;” src=”/wp-content/KFMH-Nyt/nyt/2011/nyt20110810.html” width=”100%” height=”400px”></iframe></td>

Og tilsvarende jQuery script:

$(document).ready(function(){
    $(“.iframe”).click(function() {
       var id = “#” + $(this).prop(“id”); //dan identitet
       $(“iframe”+id).toggle(); //iFrame med den identitet
    });
});

Man bør også kunne bruge id i stedet for name i identifikationen af span-elementet, men i one.com WordPress virker det kun for name. Hvis du installerer WordPress på din egen maskine, kan du også bruge id i stedet for name.  Du kan også risikere en fejl (der sker intet, når du klikker på overskriften). Det kan være, at der er opstået en konflikt situation i WordPress. En mulighed for at rette på det er at bruge sætningen

$ = jQuery.noConflict(true);

i starten, og så håbe, at fejlen forsvinder. I alt bliver vores jQuery script så som følger

$ = jQuery.noConflict(true);
$(document).ready(function(){

    $(“.iframe”).click(function() {
       var id = “#” + $(this).prop(“id”); //dan identitet
       $(“iframe”+id).toggle(); //iFrame med den identitet
    });
});

Hvis du så oplever, at der er et andet sted i websiden, der bruger jQuery, så den går i fejl i stedet for, så kan du prøve at erstatte $ med jQuery, og ikke udføre nonConflict sætningen.

More Details
maj 29, 2020

Bootstrap grid

For at forstå hvordan man formater sine hjemmesider responsivt skal jeg gennemgå kort, hvad bootstrap grid er og hvordan det bruges. Man inkluderer predefinerede css, JavaScript og JQuery filer. Her nogle begreber

viewport: er metadata, eksempel på det er som følger:

<meta name="viewport" content="width=device-width, initial-scale=1">

Her skal indholdet fordele sig over hele enheds-bredden med enheds-skala 1. Grunden til, at man også skal have JavaScript ses af følgende figur.

 

Bootstrap Grid er css + JavaScript formatering, der er samlet sammen, så man ikke behøver ligesom at opfinde hjulet igen.  Specielt kan der nævnes klassen, container, som sætter en webside (html) pænt op. Man laver en div af klassen container, <div class=”container”> ….  </div>
Derudover har man bl. a. klasse “row” og col, med forskellige attributter, sådan at man kan lave pæne kolonner. Grunden til at det hedder Bootstrap Grid er at man kan have 12 kolonner, som man kan få sat pænt op.  Desuden findes der en række css formatering til afsnit, media etc.

Bootstrap anvendes i forbindelse med HTML5, hvor der også findes flere tags, som så som Article,  side, caption etc.  Dette vil jeg beskrive senere.

More Details
maj 19, 2020

Styre synligheden af indlæg og sider

Der opstår let situationer, hvor det kun er administrator / redaktør, der kan se indlæg eller sider.

WordPress er forsynet med en simpel styringsmekanisme, som kan bruges som følger: Når du opretter dit fx indlæg, så vælger du ‘Dokument’ går du i højre side, som vist på figuren.

Styring af synlighed, her password kontrolleret

Her vises oversigt for, hvordan synligheden af et indlæg kan styres. Du kan vælge

  1. Offentlig, – hvor alle kan se indlæg/side
  2. Privat, hvor indlæg/side kun er synlig for redaktør / administrator
  3. Password beskyttet indlæg/side, hvor man skal angive et password for at se indholdet.

Her mangler dog den mulighed, at alle brugere, der er logget ind kan komme til at se indholdet, men dette kan tilføjes ved brug af et plugin. Fx WordPress Membership Plugin.

More Details
maj 11, 2020

Installering af Child theme

Dette er så live webstedet, som er blevet eksporteret fra localhost på min computer. Jeg har eksporteret alle indlæg, sider og mediafiler. De to første gik fint nok, men den kunne ikke importere mediabiblioteket.

Det man gør er at gå til kontrolpanelet, og indstillinger –> exporter. Se figur. Du vælger herefter, hvad du vil eksportere. Det kan være indlæg, sider eller mediabibliotek, – eller alt på een gang.

eksportere / importere fra det ene WordPress websted til det andet

Dette er vist på figuren nedenunder:

Hvad skal man eksportere, 4 muligheder

Hvis du har valgt alt, som vist på figuren, tager WordPress alt indhold og lægger det i en XML fil, og den kan du siden uploade via import muligheden, som vist på den første figur. Der var dog et problem med mediabiblioteket, så det blev jeg nødt til at uploade via ftp.

Men alle child temaets ændringer fra installationen vises naturligvis ikke, det er man nødt til at uploade manuelt via ftp. Det man gør er som følger:

  1. Pak child-tema mappen som zip-fil (gem den hvor som helst på computeren)
  2. Så skal ind på administrationssiderne på dit websted og in d i temasiden. Øverst til venstre klikker du på “Tilføj ny”
  3. Derefter klikker du “Upload tema” og vælger den zip-fil, der indeholder child temaet på din computer.
  4. Derefter installerer og aktiver den.

Dermed er de fleste ændringer, som man har lavet i child-temaet på localhost kommet med på live-webstedet.

Det der ikke kommer med er den widget, som vi har lavet i footeren. Derimod er området Footer Author kommet med. Det man så skal gøre er at kopiere HTML koden fra widgetten på lokal-webstedet til en HTML widget på live-webstedet og trække den til Footer Author området.

More Details
maj 10, 2020

Add filter eksempler

Når man nu har muliggjort excerpts i Twenty Seventeen, så skal vi se, hvordan man kan ændre på længden af hver excerpt.

Den variabel, der styrer excerpt længden hedder excerpt_length. Du kan læse om den ved at google excerpt_length WordPress filter. Men du kan også gå til siden, https://codex.wordpress.org/ og der kan du så gå til  WordPress Code Reference!

Del af WordPress Codex forside

Forsiden af WordPress Code Reference ser ud sådan

Forsiden af WordPress Code Reference

Hvis du skriver “excerpt” i søgefeltet får du

Søgning på excerpt

Klik på excerpt_length + søg, kommer du til følgende side

Beskrivelse af excerpt_length

Klik på excerpt_length, og så får du opskriften på at ændre på excerpt_length

Hvis du har lyst til at gå til source koden, så kan du klikke på “trac”, for at se, hvordan den bruges. Hvis vi gerne vil lave det om til 100 ord, så har vi gjort som følger:

Koden, som laver excerpt_length til 100 ord

Det sidste eksempel drejer sig om at tilføje en custom avatar til diskussionspanelet. Når man går ind i diskussionspanelet, Indstillinger –> Diskussion

Standard avatars

Dette er de standard avatars, som findes i diskussionspanelet. Men nu ønsker vi at tilføje et custom avatar. Og hvordan gør vi så det?

Igen må vi så ty til Code Reference og taster “avatar”, så får vi følgende resultat:

Søgning på avatar i Code Reference siden

Der er så to ting, der er interessante. Avartar_defaults og funktionen get_avatar. Fra trac siden fremgår det, at standard avararne er

Standard avatars i WordPress

Og det vi ønsker er at tilføje en avatar. Det er sådan, at man også kan angive en URL til sit billede som “key” og et navn som værdi, sådan at vi får
$URL –> $navn som 8. element i dette array. Et eksempel
Vi skal altså lave en funktion, der tager $avatar_defaults som parameter tilføjer det 8-ende element og returnerer den igen, – og så tilføje det til filteret. Det bliver så som følger. tilføjelsen til arrayet i rødt:

function my_custom_avatar($avatar_defaults) {
//$myavatar ='https://freeiconshop.com/wp-content/uploads/edd/person-flat.png';
$myavatar = 'http://kg-epel.dk/wp-content/uploads/2020/05/profil-juli-2018.png';
//$myavatar = 'http://localhost/wp-test/wp-content/uploads/2020/05/profil-juli-

2018.png';
$avatar_defaults[$myavatar] = 'My new avatar';
return $avatar_defaults;
}
add_filter( 'avatar_defaults', 'my_custom_avatar' );

Jeg prøvede med forskellige URLs, men localhost URL-en ser ikke ud til at virke, – men når jeg bruger kg-epel.dk domænet virker det fint. Diskussionspanelet ser så sådan ud:

Vores custom avatar er tilføjet

Og vi har fået vores custom avatar med.

More Details
maj 8, 2020

Excerpts i Twenty Seventeen

Det er ikke muligt at indstille Twenty Seventeen til kun at vise indlægs-oversigter. (Excerpts). Når man har mange indlæg er det mest fornuftigt, at man i sin oversigtsside har oversigter og ikke den fulde tekst.

Jeg fandt en artikel på Internettet, https://gist.github.com/westonruter/b924a2c6aaa746a477053472e06fc557
som giver et bud på, hvordan man kan vise oversigter frem for den fulde tekst i indlægs-oversigter.

Når Twenty Seventeen vil vise indlægs oversigter fx ved kategorier, benyttes benyttes skabelonen, archive.php. Og når det drejer sig om oversigt, så bruges filen,
template_parts/post/content.php. Forfatteren til denne side foreslår, at man ændrer koden lillesmpule o content.php, sådan at den kalder excerpt(), når det drejer sig om
oversigter. Den skal indsættes lige før <div class=”content”> det vil sige at vi erstatter koden

Kodestump i content fra Twenty Seventeen


med det, der står neden under, således at den laver excerpts, når det ikke er en single post.

Tilsvarende kodestump i Twenty Seventeen Child, hvor det første kun udføres, hvis single post

Proceduren er som følger

  1. Kopier template_parts/post/content.php til dit child tema
  2. Erstat kode fra linje 52 til 60 i content.php med det , der står nedenunder.

I alt skal der så stå som følger:

Når du så kigger på din category side eller overblik over indlæg skulle de gerne fremstå uddrag og ikke helte tekster.

More Details
maj 7, 2020

Tilføj menupunkt i Admin

Hvordan tilføjer man et menupunkt i Admin menu Kolonne? På billedet nedenunder betyder det at vi gerne vil tilføje et menupunkt i det område, som hedder Main Navigation

Administrations vinduet for administratorer af WordPress

Det er altså i området med de forskellige indstillinger i den venstre side af billedet, – og vi ønsker at tilføje en øverste menu med en af de viste ikoner for til venstre. Hvordan gør man så det?

I sådan tilfælde her er det meget vigtigt at vide hvilke informationer man skal søge. Der findes to sider, som bruges som WordPress referencer

Men hvordan bærer vi os ad. Det hedder “add admin menu item” på engelsk, og hvis man googler wordpress add admin menu item

Respons på søgningen Add admin menu item

Ja, den foreslår en funktion, som hedder “add_menu_page()” i link, nr 2, og herfra kan du gå direkte til WordPress Developer Resources og læse mere om den. Bl.a står hvilket hook du bør benytte. Under “More information#” punkt nr. 2 står at, man bør benytte hooket, admin_menu, hvilket bliver til “add_action(‘admin_menu’, dit funktionsnavn); Så her følger proceduren

  1. I functions.php i dit child tema skal du lave en funktion, som laver et menupunkt. Den kan hedde custom_menu_item() { }
  2. Inde i den funktion kopierer du så funktionen, add_menu_page( string $page_title, string $menu_title, string $capability, string $menu_slug, callable $function = '', string $icon_url = '', int $position = null );
  3. Du tilretter dine funktionsparametre, se nedenunder
  4. Til sidst tilføjer du sætningen:
    add_action('admin_menu','custom_menu_item); Som fortæller WordPress, at den skal udføre funktionen, custom_menu_item() under hooket ‘admin_menu

Parametrene til funktion, add_menu_page er som følger:

  1. $page_title: Teksten, der skal vises i titlen af den side, der vises, når man trykker på menuen,
    her har vi valgt ‘Menu titel’
  2. $menu_title: Navnet på menuen, her teksten ‘Mit menupunkt’
  3. $capability: Omhandler rettigheder til bestemte handlinger. Hver rolle består af en række capabilities, og vi skal her vælge en. Hvis du googler “roles and capabilities in WordPress” vises følgende link: https://wordpress.org/support/article/roles-and-capabilities/ og klikker du på den, så ser du liste over alle capabilities, som administrator har. Du skal nu vælge en, der retter sig mod manipulation af administrationsmenuen. Der er 2, som du kan bruge,
    1. edit_theme_options og
    2. manage_options. Man ser, at det nok er manage_options, man skal bruge, da det ikke kun retter sig mod temaer. så den 3. parameter skal være ‘manage_options’
  4. $menu_slug. Det er adressen på den side, som der refereres til i punkt 1. Siden er ikke implementeret endnu, så vi bruger værdien, ‘mitplugin/mitplugin-admin.php’
    Notér, at hvis du laver en mappe under plugins, som hedder mitplugin og en php fil, der hedder mitplugin-admin.php under den, skriver noget i den, så vil menuen føre til denne side.
  5. Callable $function=” er ikke obligatorisk, så vi angiver blot tom værdi ((‘ ‘). Når den er defineret kan den bruges til at outputte indholdet for siden.
  6. Icon_url: URL til den ikon, der skal vises, – dette er heller ikke obligatorisk. Men vi vil gerne vise en ikon for menupunktet. Hvis du googler, icon-url for wordpress, så får du som første forslag, Dashicons | WordPress Developer Resources. Så ser man oversigt over dashikonerne, vi vælger en skruenøgle, som har navnet, ‘dashicons-admin-tools’
  7. Den sidste parameter, $position angiver positionen af vores menuitem relativt til de andre. Den er også valgfri, men vi vil gerne have den til at blive vist sidst, så vi vælger 100

Alt i alt kommer vores kode til at se således ud,

More Details
maj 5, 2020

Shortcode med attributter

Hvis man nu tænker sig, at der var flere forfattere til indlæggene, man ville kunne vise hver forfatter med en enkelt shortcode, – så kan man give dem attributter. Fremgangsmåden er som følger:

  1. Lav en funktion, her ‘custom_shortcode1($atts)‘, der behandler de indkomne parametre ( $atts ) i funktionskaldet
  2. I funktionen skal du definere de attributter, der understøttes og forsyne dem med default værdier ($a ) her har vi to, ‘name’ og ‘from’
  3. indsæt WP’s indbyggede funktion, $a = shortcode_atts($a,$atts) i funktione. Denne funktion udskifter de default værdier i array $a med dem, der kommer fra $atts, hvis de er definerede
  4. i funktionen udfør ob_start() + output + return ob_get_clean();
  5. tilknyt et shortcodenavn, fx ‘vis-forfatter ved:
    add_shortcode(‘vis-forfatter’,custom_shortcode1′);
  6. indsæt shortcode med attributterne hvor som helst i dokumentet, fx
    [vis-forfatter name=”konrad B. Gislason” from=”spillefolk.dk”]

Trin 1-4 vises i den følgende figur

Funktionen custom_shortcode viser forfatter info via shortcode vis-forfatter

Selve shortkoden vises her, som indsat via trin 5.

Selve shortkoden , der erstattes af forfatterinfo

Og til sidst sådan, som så WordPress viser forfatterinfoen. trin 6.

Det shortkode-teksten erstattes af

More Details