Viewing 6 replies - 1 through 6 (of 6 total)
  • We’re having the same issue. We disabled the plugin until it is sorted. If it ever will…

    You can do the following to make the plugin work again.

    Open the following file with an editor (Notepad++, Brackets etc)
    /wp-content/plugins/custom-taxonomy-sort/includes/simple-term-meta.php

    Wrap ALL functions Except:

    • simple_term_meta_install
    • simple_post_meta_define_table
    • simple_term_meta_uninstall

    With the following code:

    if(!function_exists('FUNCTION_NAME')){
    
    }
    <?php
    /**
        Plugin: Copyright 2009 C. Murray Consulting  (email : [email protected])
    
        This program is free software; you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
        the Free Software Foundation; either version 2 of the License, or
        (at your option) any later version.
    
        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.
    
        You should have received a copy of the GNU General Public License
        along with this program; if not, write to the Free Software
        Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    */
    
    /**
     * activation - setup table, store db version for future updates
     */
    
    /* This is unnecessary and this is handled in the parent plugin */
    //register_activation_hook( __FILE__, 'simple_term_meta_install' );
    
    function simple_term_meta_install()
    {
    	// setup custom table
    
    	global $wpdb;
    
    	$table_name = $wpdb->prefix . 'termmeta';
    
    	if( $wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name ) :
    
    		$sql = "CREATE TABLE " . $table_name . " (
    		  meta_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    		  term_id bigint(20) unsigned NOT NULL DEFAULT '0',
    		  meta_key varchar(255) DEFAULT NULL,
    		  meta_value longtext,
    		  PRIMARY KEY (meta_id),
    		  KEY term_id (term_id),
    		  KEY meta_key (meta_key)
    		);";
    
    		require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    		dbDelta($sql);
    
    	endif;
    
    	update_option( "simple_term_meta_db_version", '0.9' );
    }
    
    /**
     * define postmeta table in wpdb
     */
    
    add_action( 'init', 'simple_post_meta_define_table' );
    
    function simple_post_meta_define_table() {
    	global $wpdb;
    	$wpdb->termmeta = $wpdb->prefix . 'termmeta';
    }
    
    /**
     * delete term meta table and db version option upon uninstall
     */
    
    register_uninstall_hook( __FILE__, 'simple_term_meta_uninstall' );
    
    function simple_term_meta_uninstall()
    {
    	global $wpdb;
    
    	$table_name = $wpdb->prefix . 'termmeta';
    
    	$wpdb->query("DROP TABLE IF EXISTS $table_name");
    
    	delete_option( "simple_term_meta_db_version" );
    }
    
    /**
     * Updates metadata cache for list of term IDs.
     *
     * Performs SQL query to retrieve the metadata for the term IDs and updates the
     * metadata cache for the terms. Therefore, the functions, which call this
     * function, do not need to perform SQL queries on their own.
     *
     * @param array $term_ids List of post IDs.
     * @return bool|array Returns false if there is nothing to update or an array of metadata.
     */
    if(!function_exists('update_termmeta_cache')){
        function update_termmeta_cache($term_ids) {
            return update_meta_cache('term', $term_ids);
        }
    }
    
    /**
     * Add meta data field to a term.
     *
     * @param int $term_id Term 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('term', $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.
     */
    if(!function_exists('delete_term_meta')){
        function delete_term_meta( $term_id, $meta_key, $meta_value = '' ) {
            return delete_metadata('term', $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')){
        function get_term_meta( $term_id, $key, $single = false ) {
            return get_metadata('term', $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.
     */
    if(!function_exists('update_term_meta')){
        function update_term_meta( $term_id, $meta_key, $meta_value, $prev_value = '' ) {
            return update_metadata('term', $term_id, $meta_key, $meta_value, $prev_value);
        }
    }
    
    /**
     * Delete everything from term meta matching meta key.
     *
     * @param string $term_meta_key Key to search for when deleting.
     * @return bool Whether the term meta key was deleted from the database
     */
    if(!function_exists('delete_term_meta_by_key')){
        function delete_term_meta_by_key($term_meta_key) {
            if ( !$term_meta_key )
                return false;
    
            global $wpdb;
            $term_ids = $wpdb->get_col($wpdb->prepare("SELECT DISTINCT term_id FROM $wpdb->termmeta WHERE meta_key = %s", $term_meta_key));
            if ( $term_ids ) {
                $termmetaids = $wpdb->get_col( $wpdb->prepare( "SELECT meta_id FROM $wpdb->termmeta WHERE meta_key = %s", $term_meta_key ) );
                $in = implode( ',', array_fill(1, count($termmetaids), '%d'));
                do_action( 'delete_termmeta', $termmetaids );
                $wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->termmeta WHERE meta_id IN($in)", $termmetaids ));
                do_action( 'deleted_termmeta', $termmetaids );
                foreach ( $term_ids as $term_id )
                    wp_cache_delete($term_id, 'term_meta');
                return true;
            }
            return false;
        }
    }
    
    /**
     * Retrieve term meta fields, based on term ID.
     *
     * The term meta fields are retrieved from the cache, so the function is
     * optimized to be called more than once. It also applies to the functions, that
     * use this function.
     *
     * @param int $term_id term ID
     * @return array
     */
    if(!function_exists('get_term_custom')){
        function get_term_custom( $term_id ) {
            $term_id = (int) $term_id;
    
            if ( ! wp_cache_get($term_id, 'term_meta') )
                update_termmeta_cache($term_id);
    
            return wp_cache_get($term_id, 'term_meta');
        }
    }
    
    /**
     * Retrieve meta field names for a term.
     *
     * If there are no meta fields, then nothing (null) will be returned.
     *
     * @param int $term_id term ID
     * @return array|null Either array of the keys, or null if keys could not be retrieved.
     */
    if(!function_exists('get_term_custom_keys')){
        function get_term_custom_keys( $term_id ) {
            $custom = get_term_custom( $term_id );
    
            if ( !is_array($custom) )
                return;
    
            if ( $keys = array_keys($custom) )
                return $keys;
        }
    }
    
    /**
     * Retrieve values for a custom term field.
     *
     * The parameters must not be considered optional. All of the term meta fields
     * will be retrieved and only the meta field key values returned.
     *
     * @param string $key Meta field key.
     * @param int $term_id Term ID
     * @return array Meta field values.
     */
    if(!function_exists('get_term_custom_keys')){
        function get_term_custom_keys( $key = '', $term_id ) {
            if ( !$key )
                return null;
    
            $custom = get_term_custom($term_id);
    
            return isset($custom[$key]) ? $custom[$key] : null;
        }
    }
    ?>
    Thread Starter samazgor

    (@samazgor)

    thanx @novastream

    Here is the approximate solution and it worked – Open this file …../wp-content/plugins/custom-taxonomy-sort/includes/simple-term-meta.php

    Copy paste the following code. I’ve modified the code

    <?php
    /**
        Plugin: Copyright 2009 C. Murray Consulting  (email : [email protected])
    
        This program is free software; you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
        the Free Software Foundation; either version 2 of the License, or
        (at your option) any later version.
    
        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.
    
        You should have received a copy of the GNU General Public License
        along with this program; if not, write to the Free Software
        Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    */
    
    /**
     * activation - setup table, store db version for future updates
     */
    
    /* This is unnecessary and this is handled in the parent plugin */
    //register_activation_hook( __FILE__, 'simple_term_meta_install' );
    
    function simple_term_meta_install()
    {
    	// setup custom table
    
    	global $wpdb;
    
    	$table_name = $wpdb->prefix . 'termmeta';
    
    	if( $wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name ) :
    
    		$sql = "CREATE TABLE " . $table_name . " (
    		  meta_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    		  term_id bigint(20) unsigned NOT NULL DEFAULT '0',
    		  meta_key varchar(255) DEFAULT NULL,
    		  meta_value longtext,
    		  PRIMARY KEY (meta_id),
    		  KEY term_id (term_id),
    		  KEY meta_key (meta_key)
    		);";
    
    		require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    		dbDelta($sql);
    
    	endif;
    
    	update_option( "simple_term_meta_db_version", '0.9' );
    }
    
    /**
     * define postmeta table in wpdb
     */
    
    add_action( 'init', 'simple_post_meta_define_table' );
    
    function simple_post_meta_define_table() {
    	global $wpdb;
    	$wpdb->termmeta = $wpdb->prefix . 'termmeta';
    }
    
    /**
     * delete term meta table and db version option upon uninstall
     */
    
    register_uninstall_hook( __FILE__, 'simple_term_meta_uninstall' );
    
    function simple_term_meta_uninstall()
    {
    	global $wpdb;
    
    	$table_name = $wpdb->prefix . 'termmeta';
    
    	$wpdb->query("DROP TABLE IF EXISTS $table_name");
    
    	delete_option( "simple_term_meta_db_version" );
    }
    
    /**
     * Updates metadata cache for list of term IDs.
     *
     * Performs SQL query to retrieve the metadata for the term IDs and updates the
     * metadata cache for the terms. Therefore, the functions, which call this
     * function, do not need to perform SQL queries on their own.
     *
     * @param array $term_ids List of post IDs.
     * @return bool|array Returns false if there is nothing to update or an array of metadata.
     */
     if(!function_exists('update_termmeta_cache')){
    function update_termmeta_cache($term_ids) {
    	return update_meta_cache('term', $term_ids);
    }
    }
    /**
     * Add meta data field to a term.
     *
     * @param int $term_id Term 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('term', $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.
     */
     if(!function_exists('delete_term_meta')){
    function delete_term_meta( $term_id, $meta_key, $meta_value = '' ) {
    	return delete_metadata('term', $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('update_termmeta_cache')){
    function get_term_meta( $term_id, $key, $single = false ) {
    	return get_metadata('term', $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.
     */
     if(!function_exists('update_term_meta')){
    function update_term_meta( $term_id, $meta_key, $meta_value, $prev_value = '' ) {
    	return update_metadata('term', $term_id, $meta_key, $meta_value, $prev_value);
    }
    }
    /**
     * Delete everything from term meta matching meta key.
     *
     * @param string $term_meta_key Key to search for when deleting.
     * @return bool Whether the term meta key was deleted from the database
     */
    function delete_term_meta_by_key($term_meta_key) {
    	if ( !$term_meta_key )
    		return false;
    
    	global $wpdb;
    	$term_ids = $wpdb->get_col($wpdb->prepare("SELECT DISTINCT term_id FROM $wpdb->termmeta WHERE meta_key = %s", $term_meta_key));
    	if ( $term_ids ) {
    		$termmetaids = $wpdb->get_col( $wpdb->prepare( "SELECT meta_id FROM $wpdb->termmeta WHERE meta_key = %s", $term_meta_key ) );
    		$in = implode( ',', array_fill(1, count($termmetaids), '%d'));
    		do_action( 'delete_termmeta', $termmetaids );
    		$wpdb->query( $wpdb->prepare("DELETE FROM $wpdb->termmeta WHERE meta_id IN($in)", $termmetaids ));
    		do_action( 'deleted_termmeta', $termmetaids );
    		foreach ( $term_ids as $term_id )
    			wp_cache_delete($term_id, 'term_meta');
    		return true;
    	}
    	return false;
    }
    
    /**
     * Retrieve term meta fields, based on term ID.
     *
     * The term meta fields are retrieved from the cache, so the function is
     * optimized to be called more than once. It also applies to the functions, that
     * use this function.
     *
     * @param int $term_id term ID
     * @return array
     */
    function get_term_custom( $term_id ) {
    	$term_id = (int) $term_id;
    
    	if ( ! wp_cache_get($term_id, 'term_meta') )
    		update_termmeta_cache($term_id);
    
    	return wp_cache_get($term_id, 'term_meta');
    }
    
    /**
     * Retrieve meta field names for a term.
     *
     * If there are no meta fields, then nothing (null) will be returned.
     *
     * @param int $term_id term ID
     * @return array|null Either array of the keys, or null if keys could not be retrieved.
     */
    function get_term_custom_keys( $term_id ) {
    	$custom = get_term_custom( $term_id );
    
    	if ( !is_array($custom) )
    		return;
    
    	if ( $keys = array_keys($custom) )
    		return $keys;
    }
    
    /**
     * Retrieve values for a custom term field.
     *
     * The parameters must not be considered optional. All of the term meta fields
     * will be retrieved and only the meta field key values returned.
     *
     * @param string $key Meta field key.
     * @param int $term_id Term ID
     * @return array Meta field values.
     */
    function get_term_custom_values( $key = '', $term_id ) {
    	if ( !$key )
    		return null;
    
    	$custom = get_term_custom($term_id);
    
    	return isset($custom[$key]) ? $custom[$key] : null;
    }
    ?>

    That’s great! It’s fixed.
    Thank you @samazgor and @novastream.

    Thanx for the fix. But perhaps it’s time to move to another plugin for this, I guess. ??

    Thank you so much!
    I’ve just updated our website (wordpress + various plugins) after months, and could not figure out where the error could come from.
    biberkopf, you’re advising to change plugin… any idea?

Viewing 6 replies - 1 through 6 (of 6 total)
  • The topic ‘Cannot redeclare update_termmeta_cache() (previously declared’ is closed to new replies.