it-swarm.com.de

Wie erkenne ich, ob auf einer Seite ein Shortcode aufgerufen wird?

Ich versuche, einige Variablen auf Google Analytics zu pushen und möchte feststellen können, ob auf einer Seite überhaupt ein Shortcode enthalten ist.

Kennt jemand eine clevere Vorgehensweise?

Vielen Dank!

Noel

1
Noel Tock

Ich habe mich manchmal gefragt, ob wp vielleicht auf save gecheckt und ein Register geführt hat usw

Ich hatte einen kurzen Blick auf den Code, und es scheint nicht.

Es gibt jedoch einen globalen $shortcode_tags und wp hat diese Funktion

function get_shortcode_regex() {
    global $shortcode_tags;
    $tagnames = array_keys($shortcode_tags);
    $tagregexp = join( '|', array_map('preg_quote', $tagnames) );

    // WARNING! Do not change this regex without changing do_shortcode_tag() and strip_shortcodes()
    return '(.?)\[('.$tagregexp.')\b(.*?)(?:(\/))?\](?:(.+?)\[\/\2\])?(.?)';
}

hier verwendet, um den Shortcode anzuwenden:

$pattern = get_shortcode_regex();
return preg_replace_callback('/'.$pattern.'/s', 'do_shortcode_tag', $content);

Mein Regex ist nicht so toll, aber vielleicht könntest du etwas damit anfangen?

Alternativ:

Dann gibt es den Brute-Force-Weg - für jedes der Shortcode-Tags 'einfach' prüfen, ob '['.$tag im Inhalt enthalten ist? Aber dann machen einige Entwickler/ältere Plugins ihre eigenen funky Filter für den Inhalt mit Kommentaren oder anderen benutzerdefinierten Tags.

Sie können also auch den globalen wp-$wp_filter auf $wp_filter['the_content'] prüfen. die inhalte sollten die funktionen für "the content" aufrufen.

Schlau sein

Sie können beim Speichern/Aktualisieren nachträglich selbst eine Aktion hinzufügen, dann nach Filtern und Kurzwahlen suchen und etwas in einem Post-Meta speichern. Dann müssen Sie zur Anzeigezeit nur noch das Post-Meta überprüfen.

Puh ... ist es das wert?

3
anmari

Hier ist also meine Version des Zugunglücks (Anmari hat im Moment viele gute Ideen geliefert). Es ist überhaupt nicht wirklich flexibel für die Verwendung durch andere, aber unsere gehostete Plattform und die Art und Weise, wie die Leute sie verwenden, sind sehr flexibel (erleichtert mir das Leben):

function tfh_analytics() {

    $client_ua = trim(get_option( 'tf_ua_analytics' ));

    ?>
    <script type='text/javascript'>
        //<![CDATA[
        var _gaq = _gaq || [];
        // TF Aggregate Tracking
        _gaq.Push(['_setAccount','UA-xxxxxxx-x']);
        _gaq.Push(['_trackPageview'],['_trackPageLoadTime']);
        // Define Theme
        _gaq.Push(['_setCustomVar',1,'Theme','<?php echo TF_THEME; ?>']);
        // Define Category
        <?php
        if ( have_posts() && ( is_page() || is_single() ) ) {
            $content = get_the_content(the_post());
            // Check if Front Page
            if ( is_front_page() ) { 
                if ( is_home() ) {
                $category = 'home-blog';
                } else {
                $category = 'home-static'; 
                }
            } else {
                // Check if Events
                if ( stripos( $content , '[tf-event') ) { $category = 'events'; }
                // Check if Food Menu
                if ( stripos( $content , '[tf-food') ) { $category = 'food-menu'; }
                // Check if Location
                if ( stripos( $content , '[tf-googlemaps') ) { $category = 'location'; }
                // Check if Blog
                if ( is_home() ) { $category = 'blog'; }
                }
            if ( !$category ) { $category = 'other'; } 
        }   
        ?>
        _gaq.Push(['_setCustomVar',2,'Category','<?php echo $category; ?>']);
        // Define Yelp Bar
        _gaq.Push(['_setCustomVar',3,'YelpEnabled','<?php if( get_option( 'tf_Yelp_enabled' ) == true) { echo 'true'; } else { echo 'false';} ?>']);     
        // Define User Type
        _gaq.Push(['_setCustomVar',4,'User','<?php if( is_user_logged_in() ) { echo 'logged_in'; } else { echo 'logged_out'; } ?>',1]);

    <?php if ( $client_ua != '' ) { ?>
        // Client Tracking
        _gaq.Push(['b._setAccount','<?php echo $client_ua; ?>']);
        _gaq.Push(['b._trackPageview']);
    <?php } ?>

    (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
        })();
        //]]>
    </script>
    <?php
}
0
Noel Tock

Verwenden Sie auf einfache Weise die Variable $tag in Ihrer Shortcode-Funktion. Holen Sie sich diese Idee von hier

add_shortcode("your_shortcode_tag", "shortcode_function");

function shortcode_function($atts, $content = null, $tag){ // $tag variable is here
   // check if your shortcode is called
    if($tag == "your_shortcode_tag"){
        // do your stuff
    }

}
0
KeepMove