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.
Ik zie ook dat dutch mogelijk is.


setlocale(LC_ALL, 'dutch', 'nl_NL');


Werkt dat wel?
Misschien moet Apache/PHP even een herstart krijgen?
Ik ga gelijk kijken, overigens run ik op litespeed.

[size=xsmall]Toevoeging op 02/05/2021 13:18:00:[/size]

Toegevoegd, alles herstart en...nog steeds in Engels. Denk dat ik maar alleen met getallen ga dan, wat zoveel werk voor zo'n klein iets en nog steeds geen verandering is mijn frustratie niet waard :)
Hm, dat is wel erg vreemd.
Ik heb geen ervaring met Litespeed, maar misschien moet je daar nog iets mee doen?
Ik switch even naar Apache om te zien of er verandering is.

[size=xsmall]Toevoeging op 02/05/2021 13:38:51:[/size]

Helaas op Apache ook in het Engels ><, ik ga met de nummers dan maar :), bedankt voor het meedenken.

Misschien enige idee hoe ik de shortcode kan laten werken met de Europese invoer?
Heb je mijn code met preg_match_all() al gezien?
Dan heb je de datums, maanden en jaar los in een array, zodat je die kan omzetten naar het standaard YYYY-MM-DD wat je dan opslaat als je het ergens in wilt verwerken.

Volgens mij zit de invoer in $atts. Dus die waarde moet je gebruiken om op verder te werken.
Misschien is de waarschuwing van setlocale() ontgaan?
"the locale information is maintained per process, not per thread."

Als je webserver nog meer sites met PHP heeft draaien, en je gebruikt PHP NTS (Non Thread Safe) dan is het logisch dat het niet werkt. Je kunt NTS controleren via de CLI met een commando als:

$ php -i|grep "Thread Safety"
Thread Safety => disabled


Oplossing: gebruik PHP TS (Thread Safe) of gebruik de Intl-extentie voor i80n. Mocht Intl niet beschikbaar zijn kan je kijken bij het Symfony raamwerk, die hebben als het goed is een alternatieve implementatie van Intl: https://symfony.com/doc/current/components/intl.html
Wat ook niet helpt, is dat je een return doet vóór de setlocale()...

Reageren