Ich programmiere ein Wordpress-Plugin, dass einen Shortcode (ähnlich wie die BBCodes hier im Forum) registriert. Man kann ihn in den Seiten und Beiträgen benutzen. Nun benötige ich einige CSS und Javascript-Dateien. Aus Performancegründen möchte ich sie nicht auf jeder Seite hinzufügen, sondern eben nur, wenn der Shortcode auch benutzt wird. Dies ist nämlich nur auf einer einzelnen Seite der Fall. Leider kann ich die dafür vorgesehenen Actions wie wp_head nicht beim parsen des Shortcodes nutzen. Es passiert einfach nichts, ich hab es auch schon mit anderen versucht. Meine Vermutung ist daher, dass das Timing nicht passt. Also dass die ganzen Actions wie wp_head bereits gefeuert wurden, bevor mein Shortcode aufgerufen wird. Logisch würde das ja auch Sinn machen, weil der Shortcode im Body ist, also weit nach dem Header.

Mein simpler Versuch in der Plugindatei:

PHP-Code:
add_shortcode('my_shortcode', 'insert_shortcode');

function insert_shortcode() {
    ?>
    <h1>my_shortcode Ausgabe</h1>
    <?php 
    add_scripts
();
}

function 
add_scripts() {
    
add_action('wp_head', function() {
        
?>
        <script>alert("wp_head aufgerufen");</script>
        <?php 
    
});
}
In diesem Falle passiert wie gesagt genau nichts. Rufe ich die Funktion add_scripts direkt aus dem Plugin heraus auf (z.B. über add_shortcode), funktioniert es und ich sehe die alert-Meldung. Fehler in meinem Code können somit ausgeschlossen werden. Ich stehe nun vor dem Problem, dass ich außerhalb meiner insert_shortcode Funktion ja noch gar nicht weiß, ob der Shortcode auf der jeweiligen Seite aufgerufen wird. Wenn ich mir dort den Inhalt der Seite aufrufe und mit regulären Ausdrücken arbeite, dürfte der Performance-Vorteil dann wieder an anderer Stelle dahin sein.