I'm using wp_insert_post
I loop over a text file one row at a time and for each row, I create a post. The text is set as the `post_title', for the text that is not utf8 the post inserts but with an empty title.
Why does that happen, if I'm able to create a post in the backend admin using non-utf8 chars it looks like WordPress converts the encoding in the backend.
How can I bypass this with wp_insert_post
and have it insert the post title with non-utf8 chars?
Thanks
I'm using wp_insert_post
I loop over a text file one row at a time and for each row, I create a post. The text is set as the `post_title', for the text that is not utf8 the post inserts but with an empty title.
Why does that happen, if I'm able to create a post in the backend admin using non-utf8 chars it looks like WordPress converts the encoding in the backend.
How can I bypass this with wp_insert_post
and have it insert the post title with non-utf8 chars?
Thanks
It could be due to the text encoding you are using is not set to UTF8, try to use iconv() and set.
iconv('ISO-8859-1','UTF-8', $post_info['post_content']);
This is where the WordPress data sanitization functions come in handy, specifically sanitize_text_field()
. Try using that function on your text before/while inserting it. This should also be safe for the lines that are currently working.
wp_insert_post(array(
'post_title' => sanitize_text_field( $text_from_row )
));
ā
into a custom field from the backend and it saved. WordPress is correcting the slug which is great, and keeps the title and permalink in the backend but why not when I usewp_insert_post
isn't it running the same actions as from the backend to create the posts? – Anagio Commented Sep 20, 2013 at 16:56ā
is a valid UTF-8 character, depending on the encoding. You have to make sure the correct encoding is used, or MySQL must reject the input. See this function for one way to do that. – fuxia ♦ Commented Sep 20, 2013 at 17:05