WordPress.org

Ready to get started?Download WordPress

Forums

WordPress plugin written for me broken with WP upgrade... (1 post)

  1. Jim R
    Member
    Posted 1 year ago #

    Let me start by saying, I'm not sure how long this plugin hasn't worked. It's been a few months since I've paid attention to it, but it was never deactivated, so I'm thinking since upgrading to 3.4 or 3.5.

    The gist of it is when a Post is posted it pushes the tag/term, which I only use for the names of basketball players, to one of my custom data tables. From that table, I get information to be viewed on the player's Tag archive page above the posts about the player.

    Now, when I post, I get the following error messages:

    Warning: Missing argument 2 for wpdb::prepare(), called in /home/jwrbloom/public_html/wp-content/plugins/save-on-post/save-on-post.php on line 69 and defined in /home/jwrbloom/public_html/wp-includes/wp-db.php on line 990

    Warning: Missing argument 2 for wpdb::prepare(), called in /home/jwrbloom/public_html/wp-content/plugins/save-on-post/save-on-post.php on line 69 and defined in /home/jwrbloom/public_html/wp-includes/wp-db.php on line 990

    Warning: Missing argument 2 for wpdb::prepare(), called in /home/jwrbloom/public_html/wp-content/plugins/save-on-post/save-on-post.php on line 69 and defined in /home/jwrbloom/public_html/wp-includes/wp-db.php on line 990

    Warning: Cannot modify header information - headers already sent by (output started at /home/jwrbloom/public_html/wp-includes/wp-db.php:990) in /home/jwrbloom/public_html/wp-includes/pluggable.php on line 876

    It still posts the Post, but it doesn't push the tag/term to the data table as I need it. It also just sticks on the otherwise blank page, so I have to go back or hit my Dashboard bookmark.

    I've made no changes to the code below. I started writing it and received a lot of help on it. The guy who helped me thought through the autosave, as well as my inability to make it work through an array of tags/terms. The functions being referenced in the error messages, I really can't make much of them, so I'd rather not try without getting help.

    define('S_DB','a_playerRank');
    
    add_action('save_post', '__and_upd_other');
    add_action('edit_post', '__and_upd_other');
    
    function __and_upd_other( $post_id ) {
    	global $wpdb;
    
    	if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return $post_id;
    	if ( 'page' == $_POST['post_type'] ) {
    		if ( !current_user_can( 'edit_page', $post_id ) ) return $post_id;
    	}
    	else {
    		if ( !current_user_can( 'edit_post', $post_id ) ) return $post_id;
    	}
    	$post_tag = ($_POST['tax_input']['post_tag']) ? $_POST['tax_input']['post_tag'] : '';
    
    	if('' != $post_tag) :
    
    		$post_tag = explode(',',$post_tag);
    
    		$ptc = 0;
    		// Build string of OR matches for the query
    		foreach($post_tag as $tag) {
    			$ptc++;
    			if($ptc == 1) { $tt = "terms.name = '$tag'"; }
    			else { $tt .= " OR terms.name = '$tag'"; }
    		}
    		// Get the tag ids and slugs for the saved post
    		$tags = $wpdb->get_results("
    			SELECT terms.term_id, terms.slug
    			FROM $wpdb->terms as terms
    				JOIN $wpdb->term_taxonomy as tax ON tax.term_id = terms.term_id
    				JOIN $wpdb->term_relationships as rel ON rel.term_taxonomy_id = tax.term_taxonomy_id
    			WHERE rel.object_id = '$post_id'
    			AND tax.taxonomy = 'post_tag'
    			AND $tt
    		", ARRAY_A);
    
    		// Create 2 empty strings
    		$mstr = $lstr = '';
    
    		// Build a case string for the next query
    		foreach($tags as $t => $tag) {
    			$mstr .= "when '$tag[slug]' then '$tag[term_id]' ";
    			$lstr .= "'$tag[slug]',";
    		}
    		// Unset unused data
    		unset($tags);
    
    		// Remove the last comma off the second string
    		$lstr = substr($lstr,0,-1);
    
    		// Create the a nifty query to do multiple updates in one query
    		$wpdb->query( $wpdb->prepare("
    			UPDATE ".S_DB."
    			SET ".S_DB.".wpID = case wpSlug
    			$mstr end
    			WHERE ".S_DB.".wpSlug in($lstr)
    		"));
    
    	endif;
    	return;
    }

Topic Closed

This topic has been closed to new replies.

About this Topic