Ik krijg een paar dingen niet veranderd met deze WP PHP shortcode..
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.
date
Uit de manual van 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!
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.
Wat lukt er niet aan met 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?
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.
Dan moet je een lijst zien met welke locales je systeem ondersteunt.
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
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.
Werkt dat wel?
Misschien moet Apache/PHP even een herstart krijgen?
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 :)
Ik heb geen ervaring met Litespeed, maar misschien moet je daar nog iets mee doen?
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?
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 -
"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()...