いくつかの変数をGoogleアナリティクスにプッシュしようとしていますが、ショートコードがページに含まれているかどうかを検出できるようにしたいと考えています。
誰もがこれについてうまくいく方法を知っていますか?
ありがとうございました!
ノエル
私は時々同じことを不思議に思っていました - wpが保存時にチェックしてレジスタなどを保存しているかどうか
コードをちょっと見てみましたが、そうではないようです。
しかしグローバルな$shortcode_tags
があり、wpはこの機能を持っています
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\])?(.?)';
}
ショートコードを適用するためにここで使用されます。
$pattern = get_shortcode_regex();
return preg_replace_callback('/'.$pattern.'/s', 'do_shortcode_tag', $content);
私の正規表現はそれほど素晴らしいものではありませんが、それを使って何かできるかもしれません。
あるいは:
それからブルートフォースの方法があります - それぞれのショートコードタグについて、'['.$tag
が内容に含まれているかどうかを '単に'チェックしますか?しかし、その後、一部の開発者や古いプラグインは、コメントや他のカスタムタグを使って、コンテンツに対して独自のファンキーなフィルタをかけます。
そのため、$wp_filter
のwpグローバル$wp_filter['the_content']
を確認することもできます。内容は「内容」のために呼び出された関数であるべきです。
賢いことに
あなたはたぶん自分自身でpost save/updateにアクションを追加し、その後フィルターとショートコードのチェックをして何かをpost-metaに保存することができます。それから表示時にしなければならないのはpost-metaをチェックすることだけです。
うーん...それは価値がある?
だからここにそれの私のtrainrereckバージョンがあります(それがこの分立っているので、Anmariはたくさんの良いアイデアを与えました)。それは他の誰の使用にも全く柔軟ではありません、しかし私たちのホストされたプラットフォームと人々がそれを使う方法はとても柔軟です(私の人生をより簡単にします):
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
}
簡単な方法は、ショートコード関数内で$tag
変数を使用することです。このアイデアを こちらから入手してください
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
}
}