I have an action hooked up to title_save_pre, adding a custom field and custom taxonomy term based on the title of the post.
It almost works, but has two problems:
<strong>Problem 1:</strong> It adds the term to the taxonomy, but it does not connect it to the post. It seems to connect it to the revision or something.
<strong>Problem 2:</strong> When the title updates, the custom field does not update until after saving twice.
Gist is here: http://bit.ly/TKY7kN
you could try turning off the revisions in your wp-config.php :
define('WP_POST_REVISIONS', 0 );
but it is not clear why you are using the 'title_save_pre' hook to do this.
Can you use a different hook, like 'save_post' ?
<strong>Update 2</strong>: here is my suggestion using the 'save_post' hook
Thanks for looking into this. Your version successfully tags the term, but only after saving twice. And as before, the custom field does not get updated until the second save.
Is $title perhaps reflecting the version of the title that's in the database, as opposed the new version that is being submitted?
Also—unfortunately it's not an option to turn off revisions, as I use them.
I just updated the code above, using $_POST['post_title']
$_POST['post_title'] fixed it. Is there an native API way to get the post data? I've rarely dealt directly with $_GET and $_POST in WP and usually use API functions like get_query_var(), which are already escaped/sanitized etc.
ok, great ;-)
You could consider using functions like:
esc_html(), esc_attr() , wp_kses()
to escape the input.
$_REQUEST should handle both cases (i.e. POST/GET)
I'm not sure if get_query_var is accessible inside the 'save_post' hook function, even if you use the global $wp_query.
Mabye you could construct a new temporary WP query object to see if it offers the escape/sanitizing, by using
$new_query = new WP_Query( $args );
inside the hook function.