save_post hook blijft hangen door unieke prioriteitswaarde

Van de week moest ik voor de WordPress website Autostrada.tv een stukje PHP code schrijven die acties uitvoert na het toevoegen van een bericht. Een van de acties was het verplaatsen van de embed video code naar een custom veld.

Hiervoor had ik onderstaande PHP functie geschreven:

add_action( 'save_post', 'functie_naam', 100 );

Om er zeker van te zijn dat mijn functie op een later moment werd uitgevoerd, na alle thema en plugin functies, maakte ik gebruik van de prioriteitswaarde 100.

In mijn eigen functie zat code die de huidige post bijwerkt in de database. Hiervoor maakte ik gebruik van $post_id die als parameter aan mijn functie werd meegegeven.

Tijdens het testen blijkt mijn code niet te werken. De post werd niet bijgewerkt in de database. Op basis van de documentatie bleek dat ik mijn eigen functie moest verwijderen met remove_action() voordat ik de post bijwerkte in de database. Na het bijwerken moest ik de functie weer opnieuw als actie toevoegen. Doe je dit niet dan kom je vast te zitten in een oneindige loop.

Ik paste mijn code aan zodat het eruit ziet zoals hieronder:

// verwijder mijn functie
remove_action( 'save_post', 'functie_naam' );

// $data bevat een array met key values die in de database moeten worden bijgewerkt
$data = array();
wp_update_post( $data );

// re-hook mijn functie weer
add_action( 'save_post', 'functie_naam' );

Belangrijk:
Na opnieuw testen bleek het nog steeds niet te werken. De code was hetzelfde als op de save_post() documentatie pagina. Opeens besef ik me dat ik in bovenstaande code geen prioriteitswaarde had toegevoegd. Als je geen prioriteitswaarde opgeeft wordt standaard het getal 10 gebruikt.

Initieel voegde ik mijn functie toe met prioriteitswaarde 100 wat niet gelijk is aan 10. Ik heb bovenstaand aangepast door bij remove_action() en add_action() het getal 100 toe te voegen. Hierna heb ik opnieuw de functionaliteit getest en die werkte zoals het zou moeten.

Conclusie:
Gebruik je prioriteitswaardes in je  code? Zorg dan dat je die overal consistent gebruikt. Doe je dit niet dan kan bepaalde functionaliteit zich vreemd gaan gedragen.

Laat een reactie achter

Your email address will not be published. Required fields are marked *

Deze site gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.