PHP fatal error on WP update to 4.4
-
Updating to the latest WordPress broke my site and gave me a 500 error.
“PHP Fatal error: Cannot redeclare add_term_meta() (previously declared in /…/wp-includes/taxonomy.php:1571) in /…/wp-content/plugins/taxonomy-metadata/taxonomy-metadata.php on line 97”
-
Ok I am working on it check back later on i will resolve your problem with in 24 hours… ?? cheers
The same problem here:
Fatal error: Cannot redeclare add_term_meta() (previously declared in /…/wp-includes/taxonomy.php:1571) in /…/wp-content/themes/legenda/framework/inc/taxonomy-metadata.php on line 101Can you help to fix please?
Paste your file or code here let me help you to solve
<?php
/*
Plugin Name: Taxonomy Metadata
Description: Infrastructure plugin which implements metadata functionality for taxonomy terms, including for tags and categories.
Version: 0.4
Author: mitcho (Michael Yoshitaka Erlewine), sirzooro
Author URI: https://mitcho.com/
*/class Taxonomy_Metadata {
function __construct() {
add_action( ‘init’, array($this, ‘wpdbfix’) );
add_action( ‘switch_blog’, array($this, ‘wpdbfix’) );
add_action(‘wpmu_new_blog’, array($this, ‘new_blog’), 10, 6);
}/*
* Quick touchup to wpdb
*/
function wpdbfix() {
global $wpdb;
$wpdb->taxonomymeta = “{$wpdb->prefix}taxonomymeta”;
}/*
* TABLE MANAGEMENT
*/function activate( $network_wide = false ) {
global $wpdb;// if activated on a particular blog, just set it up there.
if ( !$network_wide ) {
$this->setup_blog();
return;
}$blogs = $wpdb->get_col( “SELECT blog_id FROM {$wpdb->blogs} WHERE site_id = ‘{$wpdb->siteid}'” );
foreach ( $blogs as $blog_id ) {
$this->setup_blog( $blog_id );
}
// I feel dirty… this line smells like perl.
do {} while ( restore_current_blog() );
}function setup_blog( $id = false ) {
global $wpdb;if ( $id !== false)
switch_to_blog( $id );$charset_collate = ”;
if ( ! empty($wpdb->charset) )
$charset_collate = “DEFAULT CHARACTER SET $wpdb->charset”;
if ( ! empty($wpdb->collate) )
$charset_collate .= ” COLLATE $wpdb->collate”;
$tables = $wpdb->get_results(“show tables like ‘{$wpdb->prefix}taxonomymeta'”);
if (!count($tables)) {
$wpdb->query(“CREATE TABLE {$wpdb->prefix}taxonomymeta (
meta_id bigint(20) unsigned NOT NULL auto_increment,
taxonomy_id bigint(20) unsigned NOT NULL default ‘0’,
meta_key varchar(255) default NULL,
meta_value longtext,
PRIMARY KEY (meta_id),
KEY taxonomy_id (taxonomy_id),
KEY meta_key (meta_key)
) $charset_collate;”);
}
}function new_blog( $blog_id, $user_id, $domain, $path, $site_id, $meta ) {
if ( is_plugin_active_for_network(plugin_basename(__FILE__)) )
$this->setup_blog($blog_id);
}
}
$taxonomy_metadata = new Taxonomy_Metadata;
//register_activation_hook( __FILE__, array($taxonomy_metadata, ‘activate’) );add_action(‘init’, array($taxonomy_metadata, ‘activate’));
// THE REST OF THIS CODE IS FROM https://core.trac.www.ads-software.com/ticket/10142
// BY sirzooro//
// Taxonomy meta functions
///**
* Add meta data field to a term.
*
* @param int $term_id Post ID.
* @param string $key Metadata name.
* @param mixed $value Metadata value.
* @param bool $unique Optional, default is false. Whether the same key should not be added.
* @return bool False for failure. True for success.
*/function add_term_meta($term_id, $meta_key, $meta_value, $unique = false) {
return add_metadata(‘taxonomy’, $term_id, $meta_key, $meta_value, $unique);
}/**
* Remove metadata matching criteria from a term.
*
* You can match based on the key, or key and value. Removing based on key and
* value, will keep from removing duplicate metadata with the same key. It also
* allows removing all metadata matching key, if needed.
*
* @param int $term_id term ID
* @param string $meta_key Metadata name.
* @param mixed $meta_value Optional. Metadata value.
* @return bool False for failure. True for success.
*/function delete_term_meta($term_id, $meta_key, $meta_value = ”) {
return delete_metadata(‘taxonomy’, $term_id, $meta_key, $meta_value);
}/**
* Retrieve term meta field for a term.
*
* @param int $term_id Term ID.
* @param string $key The meta key to retrieve.
* @param bool $single Whether to return a single value.
* @return mixed Will be an array if $single is false. Will be value of meta data field if $single
* is true.
*/
function get_term_meta($term_id, $key, $single = false) {
return get_metadata(‘taxonomy’, $term_id, $key, $single);
}/**
* Update term meta field based on term ID.
*
* Use the $prev_value parameter to differentiate between meta fields with the
* same key and term ID.
*
* If the meta field for the term does not exist, it will be added.
*
* @param int $term_id Term ID.
* @param string $key Metadata key.
* @param mixed $value Metadata value.
* @param mixed $prev_value Optional. Previous value to check before removing.
* @return bool False on failure, true if success.
*/
function update_term_meta($term_id, $meta_key, $meta_value, $prev_value = ”) {
return update_metadata(‘taxonomy’, $term_id, $meta_key, $meta_value, $prev_value);
}<?php
/*
Plugin Name: Taxonomy Metadata
Description: Infrastructure plugin which implements metadata functionality for taxonomy terms, including for tags and categories.
Version: 0.4
Author: mitcho (Michael Yoshitaka Erlewine), sirzooro
Author URI: https://mitcho.com/
*/class Taxonomy_Metadata {
function __construct() {
add_action( ‘init’, array($this, ‘wpdbfix’) );
add_action( ‘switch_blog’, array($this, ‘wpdbfix’) );
add_action(‘wpmu_new_blog’, array($this, ‘new_blog’), 10, 6);
}/*
* Quick touchup to wpdb
*/
function wpdbfix() {
global $wpdb;
$wpdb->taxonomymeta = “{$wpdb->prefix}taxonomymeta”;
}/*
* TABLE MANAGEMENT
*/function activate( $network_wide = false ) {
global $wpdb;// if activated on a particular blog, just set it up there.
if ( !$network_wide ) {
$this->setup_blog();
return;
}$blogs = $wpdb->get_col( “SELECT blog_id FROM {$wpdb->blogs} WHERE site_id = ‘{$wpdb->siteid}'” );
foreach ( $blogs as $blog_id ) {
$this->setup_blog( $blog_id );
}
// I feel dirty… this line smells like perl.
do {} while ( restore_current_blog() );
}function setup_blog( $id = false ) {
global $wpdb;if ( $id !== false)
switch_to_blog( $id );$charset_collate = ”;
if ( ! empty($wpdb->charset) )
$charset_collate = “DEFAULT CHARACTER SET $wpdb->charset”;
if ( ! empty($wpdb->collate) )
$charset_collate .= ” COLLATE $wpdb->collate”;
$tables = $wpdb->get_results(“show tables like ‘{$wpdb->prefix}taxonomymeta'”);
if (!count($tables)) {
$wpdb->query(“CREATE TABLE {$wpdb->prefix}taxonomymeta (
meta_id bigint(20) unsigned NOT NULL auto_increment,
taxonomy_id bigint(20) unsigned NOT NULL default ‘0’,
meta_key varchar(255) default NULL,
meta_value longtext,
PRIMARY KEY (meta_id),
KEY taxonomy_id (taxonomy_id),
KEY meta_key (meta_key)
) $charset_collate;”);
}
}function new_blog( $blog_id, $user_id, $domain, $path, $site_id, $meta ) {
if ( is_plugin_active_for_network(plugin_basename(__FILE__)) )
$this->setup_blog($blog_id);
}
}
$taxonomy_metadata = new Taxonomy_Metadata;
//register_activation_hook( __FILE__, array($taxonomy_metadata, ‘activate’) );add_action(‘init’, array($taxonomy_metadata, ‘activate’));
// THE REST OF THIS CODE IS FROM https://core.trac.www.ads-software.com/ticket/10142
// BY sirzooro//
// Taxonomy meta functions
///**
* Add meta data field to a term.
*
* @param int $term_id Post ID.
* @param string $key Metadata name.
* @param mixed $value Metadata value.
* @param bool $unique Optional, default is false. Whether the same key should not be added.
* @return bool False for failure. True for success.
*/function add_term_meta($term_id, $meta_key, $meta_value, $unique = false) {
return add_metadata(‘taxonomy’, $term_id, $meta_key, $meta_value, $unique);
}/**
* Remove metadata matching criteria from a term.
*
* You can match based on the key, or key and value. Removing based on key and
* value, will keep from removing duplicate metadata with the same key. It also
* allows removing all metadata matching key, if needed.
*
* @param int $term_id term ID
* @param string $meta_key Metadata name.
* @param mixed $meta_value Optional. Metadata value.
* @return bool False for failure. True for success.
*/function delete_term_meta($term_id, $meta_key, $meta_value = ”) {
return delete_metadata(‘taxonomy’, $term_id, $meta_key, $meta_value);
}/**
* Retrieve term meta field for a term.
*
* @param int $term_id Term ID.
* @param string $key The meta key to retrieve.
* @param bool $single Whether to return a single value.
* @return mixed Will be an array if $single is false. Will be value of meta data field if $single
* is true.
*/if(!function_exists(‘get_term_meta’)){
// my_function is defined
function get_term_meta($term_id, $key, $single = false) {
return get_metadata(‘taxonomy’, $term_id, $key, $single);
}
}/**
* Update term meta field based on term ID.
*
* Use the $prev_value parameter to differentiate between meta fields with the
* same key and term ID.
*
* If the meta field for the term does not exist, it will be added.
*
* @param int $term_id Term ID.
* @param string $key Metadata key.
* @param mixed $value Metadata value.
* @param mixed $prev_value Optional. Previous value to check before removing.
* @return bool False on failure, true if success.
*/
function update_term_meta($term_id, $meta_key, $meta_value, $prev_value = ”) {
return update_metadata(‘taxonomy’, $term_id, $meta_key, $meta_value, $prev_value);
}Meanwhile I have changed to back-up but will try to fix with your solution.
Thanks and best regards,
nofeletI will let you know!
What is your website ?
Hello, I also have a fatal error for the taxonomy widget at line 97. I have tried your fix and am still coming up with the same fatal error on line 97.
I have solved my own problem. Taxonomy has release an update to their code. replaced the file and all is well. Thanks!
They uploaded a new release but if you have some problem about this error then check this solve. [ Redacted, these forums are not for sharing your link to your site. ]
<?php /* Plugin Name: Taxonomy Metadata Description: Infrastructure plugin which implements metadata functionality for taxonomy terms, including for tags and categories. Version: 0.4 Author: mitcho (Michael Yoshitaka Erlewine), sirzooro Author URI: https://mitcho.com/ */ class Taxonomy_Metadata { function __construct() { add_action( 'init', array($this, 'wpdbfix') ); add_action( 'switch_blog', array($this, 'wpdbfix') ); add_action('wpmu_new_blog', array($this, 'new_blog'), 10, 6); } /* * Quick touchup to wpdb */ function wpdbfix() { global $wpdb; $wpdb->taxonomymeta = "{$wpdb->prefix}taxonomymeta"; } /* * TABLE MANAGEMENT */ function activate( $network_wide = false ) { global $wpdb; // if activated on a particular blog, just set it up there. if ( !$network_wide ) { $this->setup_blog(); return; } $blogs = $wpdb->get_col( "SELECT blog_id FROM {$wpdb->blogs} WHERE site_id = '{$wpdb->siteid}'" ); foreach ( $blogs as $blog_id ) { $this->setup_blog( $blog_id ); } // I feel dirty... this line smells like perl. do {} while ( restore_current_blog() ); } function setup_blog( $id = false ) { global $wpdb; if ( $id !== false) switch_to_blog( $id ); $charset_collate = ''; if ( ! empty($wpdb->charset) ) $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset"; if ( ! empty($wpdb->collate) ) $charset_collate .= " COLLATE $wpdb->collate"; $tables = $wpdb->get_results("show tables like '{$wpdb->prefix}taxonomymeta'"); if (!count($tables)) { $wpdb->query("CREATE TABLE {$wpdb->prefix}taxonomymeta ( meta_id bigint(20) unsigned NOT NULL auto_increment, taxonomy_id bigint(20) unsigned NOT NULL default '0', meta_key varchar(255) default NULL, meta_value longtext, PRIMARY KEY (meta_id), KEY taxonomy_id (taxonomy_id), KEY meta_key (meta_key) ) $charset_collate;"); } } function new_blog( $blog_id, $user_id, $domain, $path, $site_id, $meta ) { if ( is_plugin_active_for_network(plugin_basename(__FILE__)) ) $this->setup_blog($blog_id); } } $taxonomy_metadata = new Taxonomy_Metadata; //register_activation_hook( __FILE__, array($taxonomy_metadata, 'activate') ); add_action('init', array($taxonomy_metadata, 'activate')); // THE REST OF THIS CODE IS FROM https://core.trac.www.ads-software.com/ticket/10142 // BY sirzooro // // Taxonomy meta functions // /** * Add meta data field to a term. * * @param int $term_id Post ID. * @param string $key Metadata name. * @param mixed $value Metadata value. * @param bool $unique Optional, default is false. Whether the same key should not be added. * @return bool False for failure. True for success. */ if(!function_exists('add_term_meta')){ function add_term_meta($term_id, $meta_key, $meta_value, $unique = false) { return add_metadata('taxonomy', $term_id, $meta_key, $meta_value, $unique); } } /** * Remove metadata matching criteria from a term. * * You can match based on the key, or key and value. Removing based on key and * value, will keep from removing duplicate metadata with the same key. It also * allows removing all metadata matching key, if needed. * * @param int $term_id term ID * @param string $meta_key Metadata name. * @param mixed $meta_value Optional. Metadata value. * @return bool False for failure. True for success. */ function delete_term_meta($term_id, $meta_key, $meta_value = '') { return delete_metadata('taxonomy', $term_id, $meta_key, $meta_value); } /** * Retrieve term meta field for a term. * * @param int $term_id Term ID. * @param string $key The meta key to retrieve. * @param bool $single Whether to return a single value. * @return mixed Will be an array if $single is false. Will be value of meta data field if $single * is true. */ if(!function_exists('get_term_meta')){ // my_function is defined function get_term_meta($term_id, $key, $single = false) { return get_metadata('taxonomy', $term_id, $key, $single); } } /** * Update term meta field based on term ID. * * Use the $prev_value parameter to differentiate between meta fields with the * same key and term ID. * * If the meta field for the term does not exist, it will be added. * * @param int $term_id Term ID. * @param string $key Metadata key. * @param mixed $value Metadata value. * @param mixed $prev_value Optional. Previous value to check before removing. * @return bool False on failure, true if success. */ function update_term_meta($term_id, $meta_key, $meta_value, $prev_value = '') { return update_metadata('taxonomy', $term_id, $meta_key, $meta_value, $prev_value); }
Here is the server error
mod_fcgid: stderr: PHP Fatal error: Cannot redeclare add_term_meta() (previously declared in /wordpress/wp-includes/taxonomy.php:1577) in /wordpress/wp-content/plugins/taxonomy-metadata/taxonomy-metadata.php on line 95
Hi Jeff, how did you solve your taxonomy problem?
I have tried Altaf’s way and still receive the same fatal error problem.
Hello Isaac, I downloaded the updated files and manually updated the server file. Once I did that I was able to get the site back up. Once I did that I ran the update for taxonomy. I am out at the moment, but when I’m back I can provide more details.
Hey Jeff, thanks for your feedback. Looking forward for your details.
- The topic ‘PHP fatal error on WP update to 4.4’ is closed to new replies.