-
WordPress
- Geplaatst op 5 november 2013 11:29, gewijzigd op 3 december 2013 16:45
In WordPress worden meta-boxes gebruikt om in de backend extra invoervelden mee te creëeren. Zo kun je posts, pages of custom posts voorzien van extra informatie.
Je kunt zelf de positie van de meta box bepalen, in de linker- of rechterkolom en hoe hoog ten opzichte van de andere invoervelden.
Je begint met het koppelen van de functie die de meta box registreert aan de action hook 'add_meta_boxes'. In de voorbeeldcode wordt een invoerveld toegevoegd aan de pagina's van een website. De inhoud ervan wordt op de website in een zijbalk getoond.
add_action( 'add_meta_boxes', 'pages_add_sidebar_box');
function pages_add_sidebar_box()
{add_meta_box( 'sidebar_content', 'Content zijkolom', 'pages_sidebar_content_adminpanel', 'page', 'advanced', 'high' );
}
Het eerste argument van add_meta_box() is een unieke id. Die wordt binnen WordPress gebruikt en tevens in de HTML-tag als id-argument weergegeven.
Het tweede argument is de naam van de meta box zoals je die in de backend zult gaan terugzien.
Het derde argument, hier 'pages_sidebar_content_adminpanel', is de naam van de callback-functie die de inhoud van de meta box gaat bepalen.
Het vierde argument geeft aan voor welk posttype de meta box bedoeld is.
Het vijfde argument geeft aan in welke kolom (context) de box geplaatst moet worden.
Het zesde argument hoe hoog de box in die kolom moet komen.Goed, dan komt nu uiteraard die callback functie die we in add_meta_box() aanroepen.
function pages_sidebar_content_adminpanel( $post )
{wp_nonce_field( 'change_sidebar_content_data', 'sidebar_nonce_field' );
$value = get_post_meta( $post->ID, 'sidebar_content_value', true );
echo '<textarea cols="140″ rows="10″ name="sidebar_content_value" id="sidebar_content_value">'.esc_textarea( $value ).'</textarea>';}
Het is een goede gewoonte om bij invoervelden in de backend met nonce-velden te beveiligen tegen hackers. In deze code maak ik gebruik van het interne mechanisme van WordPress voor nonce-velden.
Stel een nonce-veld in met wp_nonce_field().
Vervolgens haal je de huidige waarde van de meta box op om als default waarde in het tekstveld te kunnen tonen. Het $post-object wordt automatisch aan de callback functie meegegeven, waardoor je hier over $post->ID kunt beschikken voor get_post_meta().
En dan zorg je natuurlijk voor de HTML-output om in de meta box weer te geven, want daar ging het in deze functie om. In dit geval gebruiken we een <textarea> omdat er meerdere regels tekst in de zijbalk van de pagina kunnen worden geplaatst. Codeer de gebruikersinvoer voor gebruik in een textarea met esc_textarea() zodat die altijd goed leesbaar blijft.
Op zich is de meta box nu klaar, maar je kunt er nog niets mee omdat de waarde van het invoerveld niet wordt opgeslagen. Dat gebeurt in een aparte functie die je het beste zodanig inricht dat lege invoervelden ook worden verwijderd uit de database. Wel zo fijn om geen onnodige data achter te laten.
add_action( 'save_post', 'pages_save_sidebar_data' );
function pages_save_sidebar_data( $postid )
{if( ! current_user_can( 'edit_page', $postid ) ) return;
if( ! isset( $_POST['sidebar_nonce_field'] )
|| ! wp_verify_nonce( $_POST['sidebar_nonce_field'], 'change_sidebar_content_data' ) ) return;
$value = get_post_meta( $postid, 'sidebar_content_value', true )?
get_post_meta( $postid, 'sidebar_content_value', true ):
'NOT_SET';
$mydata = $_POST['sidebar_content_value']?
$_POST['sidebar_content_value']:
'NOT_SET';
if( ( $value == 'NOT_SET' ) && ( $mydata != 'NOT_SET' ) ):
add_post_meta( $postid, 'sidebar_content_value', $mydata, true );
elseif( ( $value != 'NOT_SET' ) && ( $mydata != 'NOT_SET' ) ):
update_post_meta( $postid, 'sidebar_content_value', $mydata );
else:
delete_post_meta( $postid, 'sidebar_content_value' );
endif;
}
Die functie met als argument de $post->ID verbind je aan de action hook 'save_post'. Omdat we data gaan vervangen of verwijderen, testen we eerst of de huidige gebruiker pagina's mag bewerken en uiteraard of de nonce klopt.
Vervolgens vragen we de huidige waarde op met get_post_meta() en de nieuwe waarde uit $_POST. Dan met een if-elseif bepalen of de invoer moet worden opgeslagen, geüpdate of verwijderd. En de meta-box is klaar voor gebruik.
Uiteraard kun je ook meerdere velden in een meta-box stoppen. Die moet je dan wel allemaal verschillende namen geven.
De waarde uit de database halen voor gebruik op de website doe je met get_post_meta().
echo get_post_meta( get_the_id(), 'sidebar_content_value', true );
- Geplaatst op 2 december 2013 16:42
Als je in een WordPress-bericht een dubbel koppelteken '--' gebruikt, dan wordt er vanuit gegaan dat dit een vergissing is en het dubbele koppelteken wordt vervangen door een enkele.
Meestal is dat prima. Maar als je bijvoorbeeld HTML-commentaar wilt tonen op je website dan kom je daarmee in de problemen.
Dus hoe zet je dat uit? Uiteraard doen we dat door de content-filter aan te passen. Neem de volgende code op in je plugin of in de functions.php van je theme.
add_filter( 'the_content' , 'undo_double_dash' , 50 );function undo_double_dash( $content )
{$content = str_replace( '–' , '--' , $content );
$content = str_replace( '—' , '---' , $content );return $content;
}
In deze code ben ik ervan uitgegaan dat je ook drie koppeltekens niet gecorrigeerd wilt hebben.
Op internet kom ik ook berichten tegen die aangeven dat je het bestand formatting.php, een van de WordPress systeembestanden moet aanpassen. Ik adviseer dat niet te doen omdat je bij een update van WordPress ineens die functionaliteit kunt verliezen.
WordPress is erg flexibel waardoor het nooit nodig zou moeten zijn om systeembestanden aan te passen. In dit geval: gebruikt de content filter zoals hierboven aangegeven, daar is die voor.
- Geplaatst op 20 november 2013 12:22
Geweldige plugin die Limit Login Attempts. Mijn ervaring met deze plugin is zeer positief. Maar wel vervelend als je als beheerder van een website urenlang niet meer kunt inloggen als gevolg van een aanval van dubieuze individuen. Ofwel, hoe kun je als beheerder weer toegang krijgen zonder te moeten wachten tot de tijd is verstreken? In dit artikel worden 3 manieren beschreven.
Het is mogelijk om bepaalde IP-adressen te whitelisten. Whitelisten is de term die wordt gebruikt voor IP-adressen die altijd toegang hebben, ook in geval van een blokkade. Voordat je dit ijverig gaat doen is het belangrijk stil te staan bij het risico dat je hiermee aangaat.
Want deze plugin is bedoeld om Brute Force Attacks tegen te houden. Deze aanvallen worden meestal door botnets uitgevoerd. Die botnets worden opgebouwd door virussen te versturen via mails, scripts op gratis toegankelijke websites en allerlei andere manieren. Als beheerder zit je nogal eens op gratis toegankelijke fora te zoeken naar informatie. En ook door die websites kan code verspreid worden om botnets op te bouwen. Als jij als beheerder jouw eigen IP-adres gaat whitelisten terwijl jouw computer zonder het te weten in een botnet zit, dan is dat een serieuze veiligheidsdreiging waar je niets meer tegen kunt ondernemen.
Dat gezegd hebbende is hier de code die de auteur van deze plugin zelf aangeeft in de FAQ van de plugin.
function my_ip_whitelist( $allow, $ip )
{return ( $ip == 'my-ip' ) ? true : $allow;
}
add_filter('limit_login_whitelist_ip', 'my_ip_whitelist', 10, 2);
Dit whitelisten kun je natuurlijk ook tijdelijk doen in geval een blokkade actief is en je wel toegang hebt tot de site via FTP.
Een andere mogelijkheid is om via FTP de plugin uit te schakelen. Dat kun je doen door het bestand …/wp-content/plugins/limit-login-attempts/limit-login-attempts.php te hernoemen of te verwijderen. Als je dan toegang hebt kun je de plugin opnieuw installeren.
Mijn voorkeur gaat echter uit naar het rechtstreeks in de database ongedaan maken van de blokkade via phpMyAdmin. Ga hierbij wel nauwkeurig te werk omdat wijzigingen in de database tot onverwacht gedrag van de website kunnen leiden. Ga met phpMyAdmin naar de WordPress tabellen en selecteer tabel wp_options. Sorteer nu op de kolom option_name en zoek de regel op met de naam limit_login_lockouts in dat veld. Maak op die regel het veld in de kolom option_value leeg. Verlaat phpMyAdmin, login in WordPress en reset de blokkades in de instellingen van de plugin.
In plaats van handmatig de waarde leegmaken, kun je dat ook doen met de SQL opdracht UPDATE wp_options SET option_value = " WHERE option_name = 'limit_login_lockouts'. Let er hierbij wel op dat je eerst de SQL opdrachten box leegmaakt alvorens deze opdracht daarin te kopiëren.
- Geplaatst op 2 november 2013 17:43, gewijzigd op 5 november 2013 01:26
De huidige categorie bepalen in een categorie template kan het makkelijkst met get_category( get_query_var( 'cat' ) ). Het argument get_query_var( 'cat' ) levert de categorie ID op.
$current_cat = get_category( get_query_var( 'cat' ) );
echo 'De huidige categorie is '.$current_cat->name.'.'; - Geplaatst op 28 oktober 2013 23:28, gewijzigd op 3 november 2013 13:51
Ingelogde bezoekers krijgen in WordPress automatisch de admin bar of toolbar als ze de font end van de website bezoeken. In versie 3.3 is de toenmalige admin bar vervangen door de nieuwe toolbar. Er zijn verschillende redenen denkbaar waarom je die uit zou willen zetten.
In versies voor 3.3 kun je dat doen door in de functions.php van je theme, of in je plugin bestanden de volgende code op te nemen.
show_admin_bar( false );Vanaf versie 3.3 wordt hiervoor de volgende code aangeraden.
add_filter( 'show_admin_bar', '__return_false' );Voorbeeld
De toolbar uitzetten voor alle gebruikers behalve admins.
if( ! current_user_can( 'manage_options' ) ) add_filter( 'show_admin_bar', '__return_false' );Bron: WordPress codex
- Geplaatst op 29 oktober 2013 20:54, gewijzigd op 30 oktober 2013 00:46
Een gebruiker uitloggen kan in WordPress heel gemakkelijk door de functie wp_logout() aan te roepen. Die functie beëindigt de huidige sessie en roept meteen ook de functie clear_auth_cookie() aan zodat eventuele cookies opgeruimd worden.
Maar er is nog wel een dingetje wat je niet zou verwachten. De huidige gebruiker is namelijk nog steeds geldig binnen WordPress doordat de global variabele $current_user nog die gegevens bevat. Daardoor is de huidige gebruiker in het actuele script nog ingelogd terwijl die in de rest van de backend al is uitgelogd.
Dit probleem kun je oplossen door de gebruiker naar een andere pagina te sturen met behulp van wp_redirect() en exit.
Een charmantere oplossing hiervoor is naar mijn gevoel echter om de cache van de huidige gebruiker te legen door middel van wp_set_current_user(0). Hieronder een toepassing met een action hook.
function custom_user_logout()
{if( is_user_logged_in() )
{wp_logout();
wp_set_current_user(0);}
}
add_action( 'after_setup_theme', 'custom_user_logout');
-
Zoeken
Toolbox login
-
WordPress
-