Categorieën
PHP WordPress

Bug met `style_handle` bij block styles in WordPress

De WordPress-thema’s die we tegenwoordig bij Pronamic ontwikkelen, zijn doorgaans volledig opgebouwd met blokken. We zetten daarbij ook steeds meer in op Full Site Editing (FSE)-thema’s. Bij maatwerkontwerpen maken we daarbij vaak intensief gebruik van blockpatronen, blockstijlen en blockvariaties.

Bij het registreren van een block style kun je een style_handle meegeven. Tijdens het ontwikkelen van een maatwerkplugin viel het me eerder dit jaar (in maart) al op dat de bijbehorende stylesheet niet automatisch werd ingeladen. Destijds heb ik dat opgelost door de stijl handmatig te laden in een block render callback, waarbij ik controleerde of de custom style actief was. Onlangs liep ik bij het uitwerken van een campagnesite opnieuw tegen hetzelfde probleem aan. Ik ben de documentatie nog eens gaan nalezen en heb gezocht naar gerelateerde GitHub-issues. Al snel vond ik WordPress/Gutenberg issue #27244, waarin een gebruiker aangaf dat hij het probleem ook had ontdekt via de officiële documentatiepagina: https://developer.wordpress.org/themes/features/block-style-variations/.

Op die pagina staat inmiddels ook een duidelijke waarschuwing:

style_handle currently has a bug where it only enqueues the stylesheet in the editor but not on the front end. Until that linked ticket is addressed, its use is not recommended.

Block Style Variations – Theme Handbook | Developer.WordPress.org

Dat had ik eerder niet gezien. Ik ging er eigenlijk vanuit dat style_handle de aanbevolen en nette manier was om block-CSS aan te bieden, maar dat blijkt dus niet (meer) het geval te zijn. In de laatste reactie binnen het GitHub-issue wordt zelfs aangegeven dat de optie nooit echt goed gewerkt heeft en dat verwijderen misschien overwogen moet worden. Misschien is het gebruik van een inline_style voorlopig dus nog wel de meest betrouwbare aanpak.

<?php

\add_action(
	'init',
	function() {
		$url = \get_block_asset_url( __DIR__ . '/images/beige-cutout-1.svg' );

		\register_block_style(
			'core/group',
			[
				'name'         => 'custom-beige-cutout-1',
				'label'        => __( 'Beige cutout 1', 'custom' ),
				'inline_style' => <<<END
					.wp-block-group.is-style-custom-beige-cutout-1 {
						background-image: url("$url");
						background-repeat: no-repeat;
						position: calc( 100% + ( ( 1920px - 100vw ) * 0.2 ) ) top;
					}
					END,
			]
		);
	}
);

https://core.trac.wordpress.org/ticket/55184

Categorieën
WordPress

WordPress 6.7 en Twenty Twenty-Five

WordPress 6.7 staat gepland voor lancering op dinsdag 12 november 2024 en wordt de derde grote WordPress-update van dit jaar. De volledige ontwikkelingscyclus van WordPress 6.7 is te volgen via: https://make.wordpress.org/core/6-7/. Deze release introduceert naar verwachting ook het nieuwe standaardthema “Twenty Twenty-Five”, aangekondigd op 15 augustus 2024 in het bericht “Introducing Twenty Twenty-Five”. Bij Pronamic zijn we inmiddels bezig met het testen van onze plugins voor compatibiliteit met WordPress 6.7. De belangrijkste nieuwe functies en wijzigingen zijn beschreven in de WordPress 6.7 ‘field guide’. Vooral de verbeteringen in de Block Bindings en HTML API zijn veelbelovend, en een nieuw standaardthema is altijd interessant. Een demo van “Twenty Twenty-Five” is beschikbaar op https://2025.wordpress.net/.

Categorieën
E-commerce Gravity Forms iDEAL WooCommerce WordPress

Hoe kan ik Mollie koppelen aan WordPress of WooCommerce?

Het koppelen van Mollie aan WordPress of WooCommerce is goed mogelijk en er zijn verschillende oplossingen beschikbaar. Welke optie het beste is, hangt af van verschillende factoren. Wil je Mollie aan WordPress of WooCommerce koppelen? Hier vind je alle benodigde informatie.

Categorieën
PHP WordPress

Namespace in WordPress filter/action hooks

In februari stuitte ik op een bericht van Tanner Record waarin hij het gebruik van slashes in WordPress filter- en action-hooks voorstelde. Hij suggereert bijvoorbeeld de volgende conventie te volgen:

apply_filters( '{prefix}/{plugin}/{hook-name}', $data );

Gebruik in populaire WordPress plugins

Ik was een vergelijkbare notatie al wel tegen gekomen in populaire plugins zoals “Query Monitor” en “Advanced Custom Fields”:

Query Monitor

// Start the 'foo' timer:
do_action( 'qm/start', 'foo' );

// Run some code
my_potentially_slow_function();

// Stop the 'foo' timer:
do_action( 'qm/stop', 'foo' );

https://querymonitor.com/wordpress-debugging/profiling-and-logging

Advanced Custom Fields

add_action('acf/init', 'my_acf_init');

function my_acf_init() {
    // Get ACF version.
    $version = acf_get_setting('version');

    // Do something.  
}

Andere plugins

Mijn collega Reüel kwam nog met een reguliere expressie Github-zoekopdracht om het gebruik van deze notatie op te speuren in GitHub-repositories:

/do_action(\s['"]\w+\/\w+['"]\s(,.*?))/ language:PHP

Op basis hiervan heb ik al wel eens overwogen om een vergelijkbare notatie te introduceren in Pronamic-plugins. In de reacties op het bericht van Tanner worden echter ook een aantal nadelen genoemd.

Waarschuwing door “WordPress Coding Standards for PHP_CodeSniffer”

Bij het gebruik van de volgende notatie zal de “WordPress Coding Standards for PHP_CodeSniffer” bibliotheek een waarschuwing geven:

do_action( 'pronamic/plugin/init' );
Words in hook names should be separated using underscores. Expected: 'pronamic_plugin_init', but found: 'pronamic/plugin/init'.

De WordPress.NamingConventions.ValidHookName.UseUnderscores sniff waarschuwt hierover:

https://github.com/WordPress/WordPress-Coding-Standards/blob/29488feb64b723674fe463e691a4f83682c2dd5e/WordPress/Sniffs/NamingConventions/ValidHookNameSniff.php#L31

In de “Coding Standards Handbook” staat namelijk het volgende vermeld:

Use lowercase letters in variable, action/filter, and function names (never camelCase). Separate words via underscores.

https://developer.wordpress.org/coding-standards/wordpress-coding-standards/php/#naming-conventions

Nou is het prima mogelijk om af te wijken van de “WordPress Coding Standards”. Bij Pronamic hanteren we ook een eigen standaard, die op een paar punten afwijken van de “WordPress Coding Standards”: https://github.com/pronamic/wp-coding-standards.

Lastiger te selecteren en kopieren

Bij het dubbel klikken op een tekst zoals pronamic_plugin_init zal direct de hele tekst geselecteerd worden. Bij het dubbel klikken op de tekst pronamic/plugin/init zal alleen een deel tussen de slashes geselecteerd worden. Dit maakt het dat ik voor nu nog de pronamic_plugin_init notatie zal aanhouden.

Categorieën
WordPress

Website vertalen, meer verkoop?

Een website in meerdere talen: een uitdaging voor websitebouwers en klanten. De verleiding van een meertalige website is groot. Klanten hopen op een eenvoudige manier hun doelgroep in verschillende landen te kunnen bedienen. Maar is het opzetten van een meertalige website wel zo eenvoudig? Technisch gezien zijn er verschillende oplossingen beschikbaar. Plugins zoals WPML, MultilingualPress, TranslatePress, GTranslate, Polylang, etc. beloven een eenvoudige vertaling van je website. Maar schijn bedriegt. In de praktijk blijken deze plugins vaak wel complex of te buggy te zijn. Bij Pronamic zetten we een meertalige WordPress website vaak op met behulp van een WordPress multisite. Deze constructie biedt meer flexibiliteit en controle, en is minder gevoelig voor technische problemen. Toch is een WordPress multisite niet voor elke klant de juiste oplossing. Bepaalde klanten willen namelijk zo weinig mogelijk werk hebben van de vertalingen. Er lijkt wat dat betreft soms ook wat te makkelijk gedacht te worden over het opzetten van een website in meerdere talen. Zo zette het volgende bericht van Mark Zahra op X me ook aan het nadenken:

Who here has added translations to their digital product website and seen a resultant increase in sales? 🧐

Mark Zahra / RebelCode

Helaas werd er niet heel veel op gereageerd, maar Rogier Lankhorst van Really Simple Plugins (o.a. de maker van de Complianz GDPR/CCPA plugin) liet het volgende weten:

We tried it once on Complianz, with German, as a lot of customers are from Germany. It didn’t increase sales, but cost a lot of work to keep up to date. We dropped it after a while.

Rogier Lankhorst / Really Simple Plugins

Rogier noemt in een vervolgreactie ook dat automatische (slechte) vertalingen er ook voor kunnen zorgen dat je vertrouwen verliest. Nou ben ik zelf niet heel fanatiek bezig marketingwerkzaamheden, maar zie ik wel ook steeds vaker de term E-E-A-T (Experience, Expertise, Authoritativeness, and Trust) voor bij komen. Op basis daarvan kun je je misschien wel afvragen hoe slim het is om je website (geautomatiseerd) in meerdere talen aan te bieden. Kan een (automatische) vertaalde website in het Duits er voor zorgen dat je vertrouwen verliest waardoor ook je Nederlandse en/of Engelse website minder goed gaat scoren? En zorgt zo’n Duitse website wel daadwerkelijk voor meer verkoop? Of kun je met een een goede Engelse website hetzelfde resultaat behalen?

Categorieën
E-commerce WooCommerce WordPress

WooCommerce: meer betalen en meer issues

De ontwikkelingen binnen de WooCommerce webwinkel plugin gaan razendsnel. Er wordt o.a. hard gewerkt aan betere ondersteuning voor de WordPress “Full Site Editing” (FSE) functionaliteiten en de blok-editor. Op 9 januari werd WooCommerce versie 8.5.0 gelanceerd en op 15 februari werd versie 8.6.0 alweer uitgebracht. En de 8.7.0 release kan er ook op elk moment aankomen. Hartstikke mooi natuurlijk dat de ontwikkelingen zo snel gaan, maar het gaat ook wel gepaard met de nodige problemen. Binnen de “WordPress Nederland” workspace op Slack was daar dan ook al een kleine discussie over:

Hey, de 8.x releases van WooCommerce verliepen -op z’n zachts gezegd- niet zo denderend. Naar mijn mening ligt het tempo met de maandelijkse update te hoog. Maar ik ben benieuwd naar jullie mening. Ik heb een open vraag gesteld in het core-channel van WooCommerce Slack, dus benieuwd naar andere meningen. Deel ze gerust daar. Merci!

Dave Loodts – https://wpnl.slack.com/archives/C016TSB5GV9/p1708338050376959

Gelukkig zijn de Woo-ontwikkelaars wel bezig om documentatie en changelogs e.d. verder te verbeteren. Maar grotere webwinkels kan het ook wel veel tijd en geld kosten om mee te gaan in alle ontwikkelingen. Daarnaast lijkt Automattic met de rebranding van WooCommerce naar Woo ook de prijzen van verschillende plugins flink verhoogd te hebben. Op X gaf Ryan Waterbury hierover bijvoorbeeld het volgende aan:

In eerste instantie lijkt de gratis webwinkel plugin WooCommerce een voordelige keuze, maar in de praktijk zie je toch ook wel snel dat er allerlei betaalde plugins en diensten nodig zijn om een succesvolle webwinkel te kunnen draaien. Als je bijvoorbeeld de “Woo Subscriptions” plugin gebruikt dan komt de “AutomateWoo” plugin vaak ook wel van pas.

En zo kan het qua licenties voor plugins al snel optellen tot een aanzienlijk maand/jaarbedrag. Voor degenen die voor de keuze staan tussen bijvoorbeeld WooCommerce en Shopify kan dat wel iets zijn om rekening mee te houden.

Categorieën
PHP WordPress

Output buffering in WordPress

Het is alweer een paar weken geleden dat ik een bericht van Tanner Record op X voorbij zag komen op mijn tijdlijn over het gebruik van ‘output buffering’ in WordPress plugins:

Vergelijkbare constructies gebruiken we bij Pronamic ook regelmatig, maar ik herinnerde me ook een GitHub-issue binnen het “WordPress Coding Standards” voor PHP_CodeSniffer project: Add sniff to warn against using output buffering #1422. In dit issue stelt Juliette Reinders Folmer voor om een ‘sniff’ toe te voegen die gaat waarschuwen voor het gebruik van ‘output buffering’. Blijkbaar kunnen er ook problemen ontstaan bij het gebruik van ‘output buffering’ binnen WordPress. Zelf hebben we nog nooit met de genoemde problemen te maken gehad. Het is echter wel goed om te realiseren dat er dergelijke problemen kunnen ontstaan. In de reacties op het bericht van Tanner wordt ook voorgesteld om een PHP ’template engine’ zoals Blade of Twig te gebruiken. Een dergelijke ’template engine’ kan de nadelen van ‘output buffering’ wegnemen. Voor eenvoudige projecten zal ‘output buffering’ prima functioneren.

Categorieën
E-commerce iDEAL WooCommerce WordPress

Self-billing factuur van Mollie, Buckaroo, etc.

Omdat we bij Pronamic betaaloplossingen ontwikkelen voor payment providers zoals Mollie, Buckaroo, Pay.nl, etc. zijn we vaak partner van deze organisaties. In sommige gevallen krijgen we commissie voor succesvolle betalingen die via de Pronamic Pay plugin zijn opgestart. De payment providers betalen ons maandelijks of per kwartaal de opgebouwde commissie uit. Voor de boekhouding ontvangen we dan vaak een zogenaamde self-billing factuur. Waar voorheen nog wel eens creditnota’s werden verstuurd lijken de payment providers nu over te stappen naar self-billing facturen. Ik was tot vandaag niet heel bewust van dit concept. In dit bericht wat meer informatie over het self-billing principe.

Categorieën
Gravity Forms PHP WordPress

Koppeling Realworks Wonen API met WordPress en Gravity Forms

Voor een makelaar hebben we een koppeling gemaakt met de Realworks Wonen API en Gravity Forms. Woningzoekers kunnen op de website van de makelaar een Gravity Forms formulier invullen met contactgegevens en woonwensen. Deze gegevens worden vervolgens automatisch doorgezet naar Realworks. Daarmee hoeft de makelaar de formulier inzendingen niet meer handmatig in Realworks te zetten.

Categorieën
WordPress

WordPress bedrijven op GitHub