Ik had een code nodig om een leeftijd te tonen op basis van datum op 1 van mijn WP sites. Na lang zoeken en wat aanpassingen heb ik de juiste code die dat precies doet.

Zit alleen met een paar kleine issues die ik niet voor elkaar krijg.

Allereerst is dit de code;

/* datum en leeftijd */
function determine_age($atts, $content = null) {
  extract( shortcode_atts( array(
    'dob' => '', 
    'date' => 1,
    'dateformat' => 'j F Y' 
  ), $atts ) );
 if ($dob == '') $dob = $content;
 $age = ($content == null) ? floor((time() - strtotime($dob)) / 31556926) : floor((time() - strtotime($content)) / 31556926);
 return ($date) ? date($dateformat, strtotime($dob)) . ' (leeftijd: ' .  $age . ')' : $age; 
  setlocale(LC_ALL, 'nl_NL');
}
add_shortcode('age', 'determine_age');


De eerste issue; Ik heb al van alles geprobeerd toe te voegen maar wat ik ook probeer, de maanden blijven in het Engels tonen ondanks dat WP in het Nederlands staat ingesteld en setLocale op NL staat.

Tweede issue; De shortcode moet ingevoerd worden op de Amerikaanse datum dus [age]20210502[/age] irritant als je onze manier gewend ben dus ik wil dat de shortcode [age]02052021[/age] wordt. Als ik dat nu in tik dan toont ie een hele andere datum startend met 1 januari.

Derde issue; Ik wil de front-end tekst kleur veranderen. Maar bij inspecteren heb ik niets waar ik een CSS code aan kan hangen.

Waarschijnlijk super makkelijk voor een ervaren PHP gebruiker wat ik overduidelijk niet ben :)

Alvast bedankt voor de hulp.
Uit de manual van [php]date[/php]


To format dates in other languages, you should use the setlocale() and strftime() functions instead of date().
- Ariën - op 02/05/2021 11:58:53

Uit de manual van [php]date[/php]


To format dates in other languages, you should use the setlocale() and strftime() functions instead of date().


Bedankt voor reactie, ik heb die pagina al eens gelezen en geprobeerd het toe te voegen in de code maar dat is me tot zover niet gelukt, krijg steeds errors met opslaan omdat ik eigenlijk gewoon geen idee heb waar wat precies hoort en wat er vervangen moet worden.

Zou je voor mij de juiste code willen laten zien?

Bedankt!
Wat lukt er niet aan met [php]strftime[/php] dan?
Example #1 laat al perfect zien hoe het werkt.


%A A full textual representation of the day Sunday through Saturday


[size=xsmall]Toevoeging op 02/05/2021 12:21:36:[/size]

En over je datum probleem, met deze reguliere expressie met [php]preg_match_all[/php] kan je de datum uit elkaar trekken naar losse eenheden, zodat je die zelf kan verwerken.

<?php
$date="20120912";
if (preg_match_all("^([0-9]{4})([0-1][0-9])([0-3][0-9])$^",$date,$arr))
{
echo "De datum voldoet aan de eisen!";
print_r($arr);
}else{
echo "Datum komt niet overeen met de expressie";
}
?>

- Ariën - op 02/05/2021 12:09:59

Wat lukt er niet aan met [php]strftime[/php] dan?
Example #1 laat al perfect zien hoe het werkt.


%A A full textual representation of the day Sunday through Saturday


Ik heb dit toegevoegd;
setlocale(LC_TIME, "nl_NL");
echo strftime(" in Dutch is %A,");

Maar er gebeurt gewoon niets, de maand blijft in Engels tonen. Moet ik iets verwijderen? Moet het op een bepaalde lijn in de code?
Misschien missen er locales op je server?
Waar draai je op? Linux? Windows?
- Ariën - op 02/05/2021 12:24:01

Misschien missen er locales op je server?
Waar draai je op? Linux? Windows?

Hmm dat zou kunnen, ik begrijp wat je bedoeld maar weet nog niet zeker waar ik moet kijken want meeste van mijn sites zijn in het Engels maar de site draait op een ubuntu server met Plesk. Ik ga op onderzoek.
Kan je locale -a uitvoeren in je shell, of via system()?
Dan moet je een lijst zien met welke locales je systeem ondersteunt.
Zekers, ook met dat ben ik overigens een amateur haha al run ik een stuk of 12 sites op 10 self hosted servers gheghe maar idd zo te zien geen Nl

C
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IL
en_IL.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US
en_US.iso88591
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
POSIX
Inderdaad, die lijken te missen.

Kan je het op deze manier eens installeren?
sudo apt-get install language-pack-nl

Daarna moet hij als het goed is wel in de lijst staan.
- Ariën - op 02/05/2021 12:56:25

Inderdaad, die lijken te missen.

Kan je het op deze manier eens installeren?
sudo apt-get install language-pack-nl

Daarna moet hij als het goed is wel in de lijst staan.

Inmiddels al gedaan
C
C.UTF-8
dutch
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IL
en_IL.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US
en_US.iso88591
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
nl_AW
nl_AW.utf8
nl_BE.utf8
nl_NL
nl_NL.iso88591
nl_NL.utf8
POSIX


En heb deze code staan;
function determine_age($atts, $content = null) {
  extract( shortcode_atts( array(
    'dob' => '', 
    'date' => 1,
    'dateformat' => 'j F Y' 
  ), $atts ) );
 if ($dob == '') $dob = $content;
 $age = ($content == null) ? floor((time() - strtotime($dob)) / 31556926) : floor((time() - strtotime($content)) / 31556926);
 return ($date) ? date($dateformat, strtotime($dob)) . ' (leeftijd: ' .  $age . ')' : $age; 
	setlocale(LC_TIME, "nl_NL");
echo strftime(" in Dutch is %A,");
}
add_shortcode('age', 'determine_age');


Locales update gedaan, server gereboot en nog steeds de maanden in het Engels ugh, ik zweer het, waar het bij iedereen normaal gaat gaat het bij mij weer niet zoals het hoort haha.

Ik kan natuurlijk er voor kiezen om voor 02/05/2021 te gaan maar nu irriteert het me waarom de maand niet naar Nederland gaat.

Reageren