Ik krijg een paar dingen niet veranderd met deze WP PHP shortcode..
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;
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.
Zit alleen met een paar kleine issues die ik niet voor elkaar krijg.
Allereerst is dit de code;
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
/* 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');
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 date
Quote:
To format dates in other languages, you should use the setlocale() and strftime() functions instead of date().
To format dates in other languages, you should use the setlocale() and strftime() functions instead of date().
Gewijzigd op 02/05/2021 11:59:08 door - Ariën -
- Ariën - op 02/05/2021 11:58:53:
Uit de manual van date
Quote:
To format dates in other languages, you should use the setlocale() and strftime() functions instead of date().
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 strftime dan?
Example #1 laat al perfect zien hoe het werkt.
Toevoeging op 02/05/2021 12:21:36:
En over je datum probleem, met deze reguliere expressie met preg_match_all kan je de datum uit elkaar trekken naar losse eenheden, zodat je die zelf kan verwerken.
Example #1 laat al perfect zien hoe het werkt.
Quote:
%A A full textual representation of the day Sunday through Saturday
Toevoeging op 02/05/2021 12:21:36:
En over je datum probleem, met deze reguliere expressie met preg_match_all kan je de datum uit elkaar trekken naar losse eenheden, zodat je die zelf kan verwerken.
Code (php)
Gewijzigd op 02/05/2021 12:23:13 door - Ariën -
- Ariën - op 02/05/2021 12:09:59:
Ik heb dit toegevoegd;
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?
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?
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.
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
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.
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.
Gewijzigd op 02/05/2021 12:57:29 door - Ariën -
- 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.
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
Quote:
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
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;
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
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');
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.
Ik zie ook dat dutch mogelijk is.
Werkt dat wel?
Misschien moet Apache/PHP even een herstart krijgen?
Werkt dat wel?
Misschien moet Apache/PHP even een herstart krijgen?
Ik ga gelijk kijken, overigens run ik op litespeed.
Toevoeging op 02/05/2021 13:18:00:
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 :)
Toevoeging op 02/05/2021 13:18:00:
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 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.
Toevoeging op 02/05/2021 13:38:51:
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?
Toevoeging op 02/05/2021 13:38:51:
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.
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.
Gewijzigd op 02/05/2021 13:55:27 door - Ariën -
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:
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
"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:
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()...




