• Skip to primary navigation
  • Skip to main content

Towards a delicious future

  • home
  • about me
  • lost&found
  • login
  • sitesenkit
  • about

Tech-notes

How to create multi-language front-end posts with WPML

30/05/2013 by Hans Pronk

WPML, multi-language support for WordPress
If you ever want to build a multi-language WordPress website there is IMHO just one working solution and that is to use the WPML plugin. With WPML is relatively easy to build complex multi-language websites with all kind of options for the translation of not only posts and pages but also for plugins and themes.

Screen Shot 2013-05-31 at 2.56.59 PM

The only thing what can be somewhat confusing for users/contributors is the back-end interface for creating posts and pages. When using the standard WordPress environment, a post will only be created in the default language and therefore its content will appear only on a part of the site. WPML does of course have extensive capabilities for posting in multiple languages but users will have to remember to tick a number of extra boxes to make this happen. In short some extra steps are required to make sure that post and pages appear in all the different languages the site supports.

Easy multi-language posts via a front-end form
To make it somewhat easier for users to add post to their sites I have set up a front-end form for them and with a little help from WPML support (these guys really know their stuff) I have created some PHP code which enhances the standard wp_insert_post() call. With this enhancement, content will be created in all the languages you want. In my case in just the two languages (english and french) I needed, but you can of course add as many languages you want. In effect you create a post per language, in my case with exact the same content, and then tie them together in the WPML tables based on the trid (translation id) from the original post that will connect the translation to the original. And if you want specific content per language you can just do that by changing the value of $my_content for the different versions of the post.

Enjoy…

The PHP snippet

[cc lang=”php” escaped=”true”]
$my_post_type = ‘post’; // set post_type
$my_post_status = ‘publish’; // ‘draft’ | ‘publish’ | ‘pending’| ‘future’ | ‘private’ | ‘custom_registered_status’ ==> set the status of the new post
$post = array( //our wp_insert_post args
‘post_title’ => wp_strip_all_tags($title),
‘post_content’ => $my_content,
‘post_status’ => $my_post_status,
‘post_type’ => $my_post_type,
‘post_date’ => $date,
‘post_date_gmt’ => $date);
$new_post = wp_insert_post($post); //send our post, save the resulting ID
$_POST[‘icl_post_language’] = $language_code = ‘en’; // change the language code
wpml_update_translatable_content( ‘post_’.$my_post_type, $new_post, $language_code ); // update language code
$trid = wpml_get_content_trid(‘post_’.$my_post_type, $new_post); // get trid
$src_language_code = $_POST[‘icl_post_language’];
// round two for the french side of the site
$post[‘post_title’] = $title . ‘ fr’; // add fr to post_title
$new_post = wp_insert_post($post); //send our post the second time, save the resulting ID
$_POST[‘icl_post_language’] = $language_code = ‘fr’; // change the language code
global $sitepress;
$language_code = ‘fr’; // change the language code
$sitepress->set_element_language_details($new_post, ‘post_’.$my_post_type, $trid, $language_code, $src_language_code);
[/cc]

Filed Under: Tech-notes Tagged With: Wordpress WPML PHP

De WordPress XML-RPC default post status

21/05/2013 by Hans Pronk

Als je in WordPress via de XML-RPC interface post, bijvoorbeeld via Fargo, wordt de status van deze posts default op “publish” gezet. Ik vind dit niet erg wenselijk als was het maar dat ik een post minimaal in de juiste categorie wil kunnen plaatsen en van tags wil kunnen voorzien.

Om het default gedrag van WordPress te veranderen moet je – bij ontstentenis van een dashboard optie – de file class-wp-xmlrpc-server.php in de wp-includes directory in een tekst-editor openen en alle instanties van
$post_status = ($publish) ? 'publish' : 'draft';
veranderen in
$post_status = ($publish) ? 'draft' : 'publish';
en vervolgens moet je de file vanzelfsprekend nog even saven.

En waarschijnlijk mag je dit bij elke update van de WordPress core weer opnieuw doen.

© Hans Pronk / 2013

Filed Under: Tech-notes Tagged With: wordpress xml-rpc

Fargo: Dave Winer’s nieuwe outliner omgeving – een test…

20/05/2013 by Hans Pronk

Een aantal maanden geleden zag Dave Winer1‘s Little Outliner applicatie het levenslicht.Het was het eerste resultaat van zijn samenwerking met Kyle Shank. Little Outliner is een eenvoudige, in HTML5 geschreven, applicatie die volledig in de browser draait. Files worden lokaal bewaard op basis van HTML5’s ‘local storage’ model. Voordeel is dat je geen accounts en inlogcodes nodig hebt maar het nadeel is wel de incompatibele wijze waarop de verschillende browsers de files als key-value pairs opslaan. Little Outliner is echter wel een interessante en laagdrempelige introductie in de wereld van outliners.

Little Outliner was slechts de eerste van een reeks producten van Small Picture, de nieuwe startup van IT-veteraan Winer en javascript-programmeur Shank. Half april introduceerde Small Picture het voorlopige vlaggenschip Fargo. Fargo is net als Little Outliner een HTML 5 gebaseerde outliner geschreven in javascript, die in elke HTML5 compatibele browser zoals Chrome, Safari, Firefox en Microsoft IE 10 werkt. Het heeft echter in verhouding met Little Outliner een veel uitgebreidere set features. Zo kun je meerdere files tegelijkertijd open hebben en worden files niet meer lokaal opgeslagen maar in Dropbox bewaard. Files zijn daardoor altijd toegankelijk zolang je Dropbox bereiken kan. Ook kan je hierdoor op simpele wijze files delen met andere gebruikers, of zelfs met de gehele wereld. Alle outlines worden in het standaard formaat OPML bewaard, geen verrassing gegeven Winer’s achtergrond.

Een zorg in de huidige wereld van online diensten is het business-model achter applicaties. De wijze waarop de Twitters en Googles van deze wereld hun online diensten in toenemende mate monopoliseren (no more “Don’t Be Evil”) of – bij gebrek aan verdiensten – van de ene op de andere dag de nek omdraaien maakt dat je bij (nieuwe) online diensten heel goed naar de verdienmodellen moet kijken voor je je er afhankelijk van maakt. Voorlopig is Fargo gratis en omdat het in je eigen browser draait en de data op Dropbox geplaatst wordt zou het relatief eenvoudig te exploiteren moeten zijn. Ook hebben Winer en Shank aangekondigd in de toekomst ook betaalde diensten aan te bieden.

Fargo ontwikkelt zich snel. Zo is in een van de laatste versies de mogelijkheid toegevoegd om Fargo ook als editor voor WordPress te gebruiken. Even gegeven dat dit inderdaad goed werkt – dat zal duidelijk worden als ik op save klik – lijkt het een ideale combinatie van outliner en blog-editor die nu ook nog markdown ondersteunt. Want zoals Paul Ford al opmerkte, zijn outliners voor ideeën wat Google Maps doet voor geografie. Mapping software stelt je in staat op elk niveau van detail in te zoomen en hetzelfde geldt voor outliners.

Meer informatie:
De Fargo website
De Little Outliner website
Een Outliner How-To
De site van Small Picture

NB: de test is bijna helmaal goed verlopen. Ik had in eerste instantie een headline één niveau te hoog in de outliner aangeklikt maar daarna verliep een en ander probleemloos. Nu nog een optie vinden in WordPress om posts via de XML-RPC interface default als ‘draft’ te bewaren en niet direct te publiceren…

© Hans Pronk / 2013


  1. Dave Winer is een IT-industrie veteraan en blogger, bekend onder meer van ThinkTank, MORE,  Frontier en Radio UserLand en de OPML editor. Hij is de (co-)auteur van onder meer XMP-RPC, RSS 2.0 en OPML. ↩

Filed Under: Tech-notes

Godrop.it stopt. So long and and thanks for all the fish!

05/12/2012 by Hans Pronk

Jammer: godrop.it stopt per 1 januari 2013. Het was een interessant model waarmee je eenvoudig (mark-down) files, die je op dropbox zette, op het web kon publiceren waardoor je wel heel simpel een blog kon opzetten. En omdat de files op je eigen Dropbox staan, beschik je altijd over je eigen content.

Nu was godrop.it niet de enige aanbieder van een dergelijke dienst. Ook scriptogr.am biedt een vergelijkbaar concept aan. Migratie naar scriptogr.am bleek inderdaad zo simpel als gedacht: je hoeft slechts de files van de godrop.it naar de scriptogr.am directory te kopiëren en dat was dat.

Toch heb ik uiteindelijk besloten alles in mijn hnzz.nl blog te incorporeren 1 puur omdat ik het eenvoudiger vind om alles vanuit een enkel door mij gecontroleerd platform te hosten. En omdat alle posts in mark-down gemaakt waren, was ook dit een triviale operatie. Het enige waar wat extra werk aan vast zat, waren de afbeeldingen. Ik had daar gebruik gemaakt van een godrop.it specifieke optie. En de bijbehorende les is dat, hoe leuk dat soort extra’s ook lijken, voor het gebruik ervan betaal je later weer de prijs bij een eventuele migratie.

Rest me Jan Willem Eshuis ofwel @jweshuis te danken voor godrop.it en alle support er omheen. So long and and thanks for all the fish!

© Hans Pronk / 2012


  1. Ik meen wat ‘rommel’ in de RSS-feed gezien te hebben e.g.blijkbaar heeft feedburner de ontvlechting van de oorspronkelijke feeds niet goed verwerkt. ↩

Filed Under: Tech-notes

Kosten-effectief back-ups maken met Amazon’s S3 en Glacier

16/11/2012 by Hans Pronk

Goed nieuws voor diegenen die Amazon’s S3-dienst (willen) gebruiken voor hun off-site back-ups. Sinds een paar dagen is het namelijk mogelijk om volgens een zelf op te stellen policy je data, die op S3 opgeslagen is, automatisch naar Glacier te migreren.

Even voor de duidelijkheid: S3 is dus de generieke data-opslagdienst van Amazon voor data-objecten van 1 byte tot 5 terabyte. Het is wat tegenwoordig een dienst in de ‘Cloud’ genoemd wordt en als zodanig enigszins vergelijkbaar met bijvoorbeeld Dropbox en Google-Drive. Een kenmerkend verschil echter met deze diensten is dat S3 altijd een betaalde dienst is en dat er een heldere service level agreement beschikbaar is.
De use-case voor S3 is met name voor die data die in principe binnen (zeer) korte tijd beschikbaar moet kunnen zijn. Toch wordt S3 ook veel gebruikt voor toepassingen als back-ups, met name vanwege de achterliggende SLA.

Sinds enige tijd heeft Amazon ook een andere data-opslagdienst waarvan de karakteristieken veel geschikter zijn voor het maken van back-ups: Glacier. Het kent dezelfde hoge data-beschikbaarheid (99.999999999% durability en 99.99% beschikbaarheid op jaarbasis) maar het benaderen/terughalen van je data kost wel veel meer tijd – uren in plaats van seconden. Het goede nieuws is dat het kostenplaatje een stuk aangenamer is: opslag kost minder dan 10% van S3 en komt op zo’n dollarcent per gigabyte per maand uit.

Doordat het nu dus ook mogelijk is om een hybride oplossing in te richten is S3/Glacier-combinate zeer interessant als back-up omgeving. Je kunt bijvoorbeeld een en ander zo instellen dat je recente back-ups op S3 staan waar je in geval van onheil snel bij kan terwijl backups ouder dan zoveel dagen automatisch naar Glacier verhuizen. Want hoe ouder de back-up, de kleiner de kans dat je die ooit nog moet inzetten.
Wel een punt van aandacht is dat naast de langere benaderingstijd je wel relatief veel betaalt om Amazon je back-up van de virtuele zolder te laten halen. Maar goed: het is met back-ups meestal zo: normally you don’t need them, but if you need them, you really need them!
En het scheelt mij in elk geval voorlopig zo’n 90% op mijn maandelijke Amazon-rekening!

Hier nog een verdere beschrijving hoe je data automatisch naar Glacier kan archiveren en weer terughalen.

© Hans Pronk / 2012

Filed Under: Tech-notes Tagged With: aws amazon glacier S3

Managing WordPress via de command-line

11/11/2012 by Hans Pronk

keyboard

WordPress geldt vandaag de dag als het meest gebruikte blog-platform of beter gezegd content management systeem van het internet. Zo’n 63% van de ‘top-miljoen’ sites gebruikt WP als basis voor hun web-presence.
Door deze populariteit is er veel voor het platform beschikbaar, uiteenlopend van een keur aan standaard-template’s (theme’s) en alle denkbare uitbreidingen (plugins in WP-lingo) tot hosting en support.
Een minder mooi gevolg van deze populariteit is dat het ook een doelwit bij uitstek geworden is voor hackers. Een echt lek in de basis functionaliteit geeft je toegang tot de genoemde 63% van de top-sites op internet.
En omdat dergelijke problemen nu eenmaal optreden in de echte wereld komen er met grote regelmaat updates uit voor zowel de basis- als de extra functies van WordPress.
Een ieder die van WordPress gebruik maakt zou daarom eigenlijk met zeer grote regelmaat moeten controleren of er updates beschikbaar zijn en – zo ja – of deze geïnstalleerd kunnen worden.
Een klus die voor een beetje IT-afdeling dagelijkse kost is/zou moeten zijn, maar die in de praktijk voor veel individuen en bedrijven een grote uitdaging betekent.
Ik heb in elk geval zelf gemerkt dat je – zeker als je meerdere wp-sites hebt – er gauw een vergeet, en daarbij dat je vervolgens al je sites langs moet om de verschillende installaties weer up to date te brengen.

oa5_

Na een aantal pogingen om dit proces te stroomlijnen – leuk zo’n webinterface, maar wel ‘lastig’ te scripten – heb ik nu een tool gevonden die het mogelijk maakt dit 1) via de commandline uit te voeren en 2) in hoge mate te automatiseren.
Het product heet overigens WordShell en is het product van David Anderson, een zendeling die in Kenia werkzaam is en een tool nodig had om een groot aantal WordPress websites op basis van de command-line te managen, een noodzaak gegeven de internet connectiviteit aldaar.

De eerste ervaringen zijn ondertussen zeer positief. Je kunt bijvoorbeeld met één commando een willekeurig aantal WP-sites controleren op updates en deze installeren. Het is verder een behoorlijk robuust geheel, zo wordt voor elke update een backup van een en ander gemaakt en je kan bij eventuele mishaps deze ook weer eenvoudig ongedaan maken. En omdat het een command-line tool is kan ik nu ook simpel dagelijks de verschillende WP-sites automatisch checken en het resultaat ervan in mijn mailbox laten vallen.
Kortom: een goed doordacht tool wat na minder dan 24 uur gebruik al onderdeel van mijn workflow geworden is, e.g. een aanrader!

En om een idee te geven van de capabilities hier een overzicht (van de site) van de features van het programma


Feature List WordShell

  • Full plugin management
  • Full support for themes
  • Work with child themes
  • Full support for managing WordPress core
  • Database management
  • Full version management for plugins, themes, core and databases
  • Disaster-recovery capable: does not assume your site is working
  • Backs up and restores any extra files you have added to WordPress core. Tests your site before + after any change operations.
  • Hugely configurable – but by default, “does the right thing”
  • Manage maintenance mode
  • Works on a wide variety of site types
  • Remote log-in mode:

NB: Wordshell is overigens niet gratis maar is IMHO het geld volledig waard! Het draait probleemloos op Linux en zou in principe op alle Unix-achtigen moeten werken.

© Hans Pronk / 2012

Filed Under: Tech-notes Tagged With: beheer, wordpress, wordshell

  • Page 1
  • Page 2
  • Go to Next Page »

© 2025 Towards a delicious future. All Rights Reserved.