А Вы знаете, в чём разница между add_action() и add_filter()?
Google Website Optimizer — плагин, интегрирующий одноимённый сервис Google с WordPress.
У плагина есть один недостаток: на данный момент он написан криво и, как следствие, конфликтует со всеми плагинами, которые устанавливают свой фильтр на событие the_content
.
Продолжая тему об ошибках при написании плагинов: основная ошибка состоит в том, что плагин устанавливает обработчик действия (action) вместо фильтра (filter), в результате чего все обработчики the_content
, выполняющиеся после плагина, получают пустую строку (фильтры возвращают результат, а обработчики действий — нет).
Исправленная версия плагина выглядит следующим образом:
/*
Plugin Name: Google Website Optimizer for WordPress
Plugin URI: http://websiteoptimizer.contentrobot.com
Description: A plugin for integrating <a href="http://services.google.com/websiteoptimizer">Google Website Optimizer</a> into blog posts and pages. Please read the <a href="http://websiteoptimizer.contentrobot.com/2007/03/24/google-website-optimizer-plugin/#setup">setup procedure</a> for more info. Developed in coordination with <a href="http://www.futurenowinc.com">Future Now</a>.
Author: ContentRobot
Version: 0.2a
Author URI: http://www.contentrobot.com
*/
function go4wp_control_script() {
global $wp_query;
if (is_single() or is_page()) {
if ($wp_query->post) {
$post = $wp_query->post;
//if the page/post has control code, display it
if (get_post_meta($post->ID, 'go_control_script', true)) {
echo get_post_meta($post->ID, 'go_control_script', true) . "\n";
}
}
}
}
add_action('wp_head', 'go4wp_control_script');
function go4wp_tracking_script($content) {
global $wp_query;
if (is_single()) {
if ($wp_query->post) {
$post = $wp_query->post;
//if the page/post has both test and conversion code, display both
if (get_post_meta($post->ID, 'go_tracking_script_test', true) && get_post_meta($post->ID, 'go_tracking_script_conversion', true)) {
return $content . "\n" . get_post_meta($post->ID, 'go_tracking_script_test', true) . "\n\n" . get_post_meta($post->ID, 'go_tracking_script_conversion', true) . "\n";
}
//if the page/post has test code display it
if (get_post_meta($post->ID, 'go_tracking_script_test', true)) {
return $content . "\n" . get_post_meta($post->ID, 'go_tracking_script_test', true) . "\n";
}
//if the page/post has conversion code, display it
if (get_post_meta($post->ID, 'go_tracking_script_conversion', true)) {
return $content . "\n" . get_post_meta($post->ID, 'go_tracking_script_conversion', true) . "\n";
}
}
}
return $content;
}
add_filter('the_content', 'go4wp_tracking_script');
?>