Door
Gijs Beusekom
op 25-06-2019 17:00
gewijzigd op 25-06-2019 17:03
1.935 views
Dag allemaal.
Aan de hand van Wordpress ben ik bezig een website te bouwen en heb besloten php te willen gaan leren. Ik ben er net een paar dagen mee bezig. Ik kan alles dat ik leer direct op de website toepassen, dus dat ik mooi handig.
Om mensen via een link naar hun profiel te leiden heb ik de volgende snippet gevonden op Github:
Het probleem is dat mensen die niet zijn ingelogd in de website naar de 404-pagina worden gestuurd omdat de link naar hun profiel niet bestaat. Ik wil graag een else-statement toevoegen aan de code, zodat mensen die niet zijn ingelogd worden doorverwezen naar een specifieke pagina (de pagina moet nog worden gemaakt, dus in eerste instantie wil uitgelogde mensen die klikken op de link doorsturen naar home).
Ik heb geprobeerd een else toe te voegen op de volgende manier:
<?php
add_shortcode( 'CUSER-PROFILE-OVERMIJ', 'cuser_profile_shortocode_handler' );
function cuser_profile_shortocode_handler( $atts ){
$atts = shortcode_atts( array(
'text' => 'my profile',
), $atts );
Ik zelf raad altijd aan om accolades te gebruiken. Dus dan krijg je zoiets als dit:
<?php
if($iets == 'dit') {
// $iets is gelijk aan 'dit'
} elseif($iets == 'dat') {
// $iets is gelijk aan 'dat'
} else {
// $iets is niet gelijk aan 'dit' of 'dat'
}
?>
Even inhakend op Ariën hierboven: In jouw stukje code worden *geen* accolades gebruikt. Dan valt alleen het volgende statement onder de if. De if op regel 8 heeft dus alleen controle over regel 9. Niet wat op regel 11 en 12 volgt.
Ander belangrijk ding: "return" betekent "toedeledokie ik ben er klaar mee - hier zul je het mee moeten doen". Na regel 12 wordt iedereen er dus uit gebonjourd en alles *na* regel 12 wordt nooit uitgevoerd (omdat er geen if conditie van toepassing is). Je toevoeging vanaf regel 14 zal dus - ook als ie wel werkt - nooit worden uitgevoerd.
Dan op die else: die hoort altijd bij een if. Als je de if van regel 8 bedoelt moet je regel 11 en 12 dus even verwijderen (anders "horen ze niet meer bij elkaar").
Maarrr: voordat je zomaar blind gaat lopen rommelen "net zolang tot het werkt" is het misschien wel handig om toch heel even een beetje door de handleiding te grutten om in ieder geval een paar basale vaardigheden op te doen.
En naast het gebruik van accolades, ook al heeft het if-( en eventuele else(if)-)statement(s) maar betrekking op één regel code, is het ook handig om die passages (stukken code of "code blokken") eenzelfde inspring te geven zodat je kunt zien dat deze bij elkaar horen, zoals @Ariën hierboven ook doet.
In sommige programmeertalen (Python?) heeft deze inspring zelfs syntactische betekenis, die taal kent geen accolades (geloof ik?) maar bepaalt de inspring tot welk blok de code behoort. Met eenzelfde voorzichtigheid, ook al werk je met accolades, zou je met PHP-code om moeten gaan, het is namelijk nogal belangrijk voor de juiste werking dat code in de juiste gevallen wordt uitgevoerd :).
Ik heb inderdaad naar een andere handleiding gekeken, maar door de stortcode wordt het denk ik allemaal wat anders dat in de standaard tekst staat beschreven. Ik kom er aan de hand van de handleiding nog niet helemaal uit.
[size=xsmall]Toevoeging op 26/06/2019 14:24:14:[/size]
- Ariën - op 25/06/2019 17:06:22
Ik zelf raad altijd aan om accolades te gebruiken. Dus dan krijg je zoiets als dit:
<?php
if($iets == 'dit') {
// $iets is gelijk aan 'dit'
} elseif($iets == 'dat') {
// $iets is gelijk aan 'dat'
} else {
// $iets is niet gelijk aan 'dit' of 'dat'
}
?>
[size=xsmall]Toevoeging op 26/06/2019 14:28:14:[/size]
Rob Doemaarwat op 25/06/2019 17:15:02
Even inhakend op Ariën hierboven: In jouw stukje code worden *geen* accolades gebruikt. Dan valt alleen het volgende statement onder de if. De if op regel 8 heeft dus alleen controle over regel 9. Niet wat op regel 11 en 12 volgt.
Ander belangrijk ding: "return" betekent "toedeledokie ik ben er klaar mee - hier zul je het mee moeten doen". Na regel 12 wordt iedereen er dus uit gebonjourd en alles *na* regel 12 wordt nooit uitgevoerd (omdat er geen if conditie van toepassing is). Je toevoeging vanaf regel 14 zal dus - ook als ie wel werkt - nooit worden uitgevoerd.
Dan op die else: die hoort altijd bij een if. Als je de if van regel 8 bedoelt moet je regel 11 en 12 dus even verwijderen (anders "horen ze niet meer bij elkaar").
Maarrr: voordat je zomaar blind gaat lopen rommelen "net zolang tot het werkt" is het misschien wel handig om toch heel even een beetje door de handleiding te grutten om in ieder geval een paar basale vaardigheden op te doen.
Ik zal in het vervolg accolades gebruiken. Bedankt voor de tip.
De orginele code werkt wel goed voor ingelogde gebruikers, dus als de terurn onder de if zou betekenen dat de ingelogde bezoekers de stortcode niet zouden kunnen zien klopt er iets niet (ze kunnen de stortcode wel zien).
Als ik de else onder 12 zet veranderd de shortcodel-link naar de code onder else, terwijl wel aan de if-voorwaarde wordt voldaan. Heel vreemd (voor mij). Ik begrijp er al met al nog niet veel van.
[size=xsmall]Toevoeging op 26/06/2019 14:28:47:[/size]
Thomas van den Heuvel op 25/06/2019 17:41:49
En naast het gebruik van accolades, ook al heeft het if-( en eventuele else(if)-)statement(s) maar betrekking op één regel code, is het ook handig om die passages (stukken code of "code blokken") eenzelfde inspring te geven zodat je kunt zien dat deze bij elkaar horen, zoals @Ariën hierboven ook doet.
In sommige programmeertalen (Python?) heeft deze inspring zelfs syntactische betekenis, die taal kent geen accolades (geloof ik?) maar bepaalt de inspring tot welk blok de code behoort. Met eenzelfde voorzichtigheid, ook al werk je met accolades, zou je met PHP-code om moeten gaan, het is namelijk nogal belangrijk voor de juiste werking dat code in de juiste gevallen wordt uitgevoerd :).