2012-03-05 31 views
2

我想在我的Wordpress评论表单上放置一个自定义事件,并希望每次有人点击提交按钮时跟踪一个事件。我遇到的问题是表单提交并创建了页面请求,Google分析代码没有时间工作。使用jQuery延迟WordPress的评论形式发布以允许分析发送跟踪。

我需要延迟表单提交,以便跟踪有时间工作。我查了类似的问题,并尝试了各种解决方案,但似乎无法让他们工作。任何帮助将不胜感激。

我的代码如下,我试图延迟表单失败。

<form id="commentsForm" action="<?php echo get_option('siteurl'); ?>/wp-comments-  post.php" method="post" id="commentform"> 

<!-- Delay form submit to allow GA code to send --> 
<script type="text/javascript"> 
$(document).ready(function(){ 
    $('#commentsForm').submit(function (e) { 
    var form = this; 
    e.preventDefault(); 
    setTimeout(function() { 
     form.submit(); 
    }, 1000); // in milliseconds 
}); 
}); 
</script> 

<?php if (is_user_logged_in()) : ?> 

<p>Logged in as <a href="<?php echo get_option('siteurl'); ?>/wp-admin/profile.php"><? php echo $user_identity; ?></a>. <a href="<?php echo wp_logout_url(get_permalink()); ?>" title="Log out of this account">Log out &raquo;</a></p> 

<?php else : ?> 

<p class="textfield"> 
<input name="author" id="author" value="<?php echo esc_attr($comment_author); ?>" size="22" tabindex="1" type="text" <?php if ($req) echo "aria-required='true'"; ?>> 

<label for="author"><small>Name <?php if ($req) echo "(required)"; ?></small></label> </p> 

<p class="textfield"><input type="text" name="email" id="email" value="<?php echo esc_attr($comment_author_email); ?>" size="22" tabindex="2" <?php if ($req) echo "aria-required='true'"; ?>> 
<label for="email"><small>Mail (will not be published) <?php if ($req) echo "(required)"; ?></small></label></p> 

<p class="textfield"><input type="text" name="url" id="url" value="<?php echo esc_attr($comment_author_url); ?>" size="22" tabindex="3"> 
<label for="url"><small>Website</small></label></p> 

<?php endif; ?> 

<!--<p><small><strong>XHTML:</strong> You can use these tags: <code><?php echo allowed_tags(); ?></code></small></p>--> 

<p class="text-area"><textarea name="comment" id="comment" cols="58" rows="10" tabindex="4"></textarea></p> 

//Submit button 
<p><input class="submitButton" onClick="_gaq.push(['_trackEvent','Comment','Submit', URL]);" name="submit" type="submit" id="submit" tabindex="5" value="" /> 


<?php comment_id_fields(); ?> 
</p> 
<?php do_action('comment_form', $post->ID); ?> 

</form> 

我认为它可能无法正常工作形式是一个PHP的形式,但我不知道得到它的工作的最佳途径。

感谢您的任何帮助或想法。

+0

你的例子适合我。什么不适合你? – Basti 2012-03-05 17:04:50

+0

嗯,我可以让表单提交,但不会触发GA代码(因为它太快地加载wp-comments-post.php),或者我可以得到它,以便代码提交GA事件但不提交表格。在上面的示例中,表单提交,但是一旦遗憾地点击了提交按钮,就意味着GA事件没有时间来定制自定义事件。感谢您为我查看它。 – Simon 2012-03-05 21:01:22

回答

2

您可能会遇到提交onclick正在触发和form.submit()事件触发顺序的问题。你可以试着将提交按钮上的点击事件拉下来,然后将它放到提交函数中?

事情是这样的:

$(document).ready(function(){ 
    $('#commentsForm').submit(function (e) { 
    var form = this; 
    e.preventDefault(); 
    _gaq.push(['_trackEvent','Comment','Submit', URL]); 
    setTimeout(function() { 
     form.submit(); 
    }, 1000); // in milliseconds 
}); 
}); 

而且,也许我错过了你的榜样,但什么是URL

+0

Thatnks为您的回应。 URL变量是使用var URL = location.href位于我的标题中的页面的URL。可能应该包括这一点。 我试过你的方法,它允许自定义事件发生,但在控制台中,我得到错误Uncaught TypeError:Property'submit'object#不是函数。这会阻止表单提交,并且不幸的是不再工作。我今天晚些时候会发布一个例子,我需要从外部镜像站点。我很困惑,为什么提交不会延迟。 – Simon 2012-03-06 09:13:48

+0

Horray!我使用你的解决方案和另一个线程上的另一个解决方案(我似乎无法链接到,将在解决方案中发布)的组合解决它。我使用你的代码,并将我的提交按钮更改为,更改名称和ID 。谢谢你的帮助! – Simon 2012-03-06 09:27:49

+0

我的答案也得到检查吗?很高兴我能帮到 – shanabus 2012-03-06 14:06:05