我正在为使用WordPress的flickerRSS RU插件的客户工作。但是,当他们尝试在每个页面上调用多个函数时,他们会在error_log中收到此错误:
PHP Fatal error: Cannot redeclare get_and_delete_option() (previously declared
in .../wp-content/plugins/flickrrss-ru/flickrrssRU.php:21) in
.../wp-content/plugins/flickrrss-ru/flickrrssRU.php on line 21
第一个插件调用是:
get_flickrRSSRU(array(
'set' => '72157624558519886',
'num_items' => 3,
'type' => 'set',
'html' => ' <a href="%flickr_page%" title="%title%"><img src="%image_square%" alt="%title%"/ height="68px" ></a>'));
其次是:
get_flickrRSSRU(array(
'set' => '72157624558519886',
'num_items' => 11,
'type' => 'set',
'html' => ' <a href="%flickr_page%" title="%title%"><img src="%image_square%" alt="%title%"/ height="75" ></a>'));
我不确定为什么这两个调用会在尝试通过WordPress加载时再次初始化插件。
我发现正在使用的这个特定函数在插件中是这样的:
$flickrRSSRU = new flickrRSSRU();
add_action( 'admin_menu', array(&$flickrRSSRU, 'setupSettingsPage') );
add_action( 'plugins_loaded', array(&$flickrRSSRU, 'setupWidget') );
register_activation_hook( __FILE__, array( &$flickrRSSRU, 'setupActivation' ));
function get_flickrRSSRU($settings = array()) {
global $flickrRSSRU;
$flickrRSSRU->printGallery($settings);
}
答案 0 :(得分:2)
各种事情可能导致函数被定义两次(或试图被定义)。您可以使用function_exists()
来检查函数是否已经声明,并且只有在声明函数时才声明它。
if ( ! function_exists('get_and_delete_option') ) {
function get_and_delete_option( $foo, $bar ){
return $foo . $bar;
}
}
想一想,我认为这是WordPress开始时的标准方法。
如果您要使用此功能,请尝试使用include_once
或require_once
。这样,多次不会添加相同的文件。
答案 1 :(得分:1)
我的猜测是它在flickrrssRU.php中的第49行
if (!get_option('flickrRSSRU_settings')) $this->setupActivation();
这两次都可能会调用$this->setupActivation()
,这就是声明该方法内部的get_and_delete_option()
函数。当插件被激活时,应该创建选项,但是它似乎无法访问它。
查看wp_options
表,查看是否可以找到&#34; flickrRSSRU_settings&#34;关键在那里。
替代解决方案是从
更改同一文件的第21行function get_and_delete_option($setting) { $v = get_option($setting); delete_option($setting); return $v; }
到
if(!function_exists('get_and_delete_option')) {
function get_and_delete_option($setting) { $v = get_option($setting); delete_option($setting); return $v; }
}
但是,如果它没有找到设置,您可能会在以后遇到其他问题。