Vytvořil jsem si jednoduchou funkci, která přidá do wordpressu nový post přímo z PHP kódu. Používám to ve svých robotech, kteří běhají po internetu a vyhledávají na moje weby vhodný obsah :)
Dost lidí se mě na to ptalo, i na různých fórech bývají problémy s funkčností kódu…
Tak tady … máte moji funkční verzi.

Funkce má 5 parametrů.
$title
, $content, $category_id, $author_id a $tags
K čemu jsou je snad jasné z názvu. A kdyby ne, pár řádků kódu je lepší, než stránka manuálu :) takže:

function add_post($title, $content, $category_id, $author_id, $tags) {
 $post_data = array();
 $post_cat[] = (int)$category_id;
 $post_data['post_category'] = $post_cat;
 $post_data['post_title'] = $title;
 $post_data['post_content'] = $content;
 $post_data['post_status'] = "publish";
 $post_data['tags_input'] = $tags;
 $post_data['post_author'] = $author_id;
 $post_id = wp_insert_post($post_data);
 return $post_id;
}

Funkci zavoláte asi nějak takhle

add_post ("Nadpis", "Obsah", 3, 1, "tag1, tag2");

Vátí se buďto ID vloženého postu, nebo při chybě False.
Tohle už je „final“ verze funkce, kterou běžně používám. Začatky ale byly i pro mě těžké :) První pokusy vypadaly tak, že jsem data natlačil do $_POST, volal _wp_translate_postdata a pak wp_write_post. Díky tomu, že jsem neměl ID kategorie v poli mi to nešlo a post se vždy uložil do výchozí katekorie, takže pak bylo ještě nutné normálním SQL dotazem upravit tabulky term_taxonomy a term_relationships. Což samozřejmě často dělalo v databázi docela slušnej bordel :)

Ukázka:

include ("./wp-load.php");
 
$nadpis = "Článek přidaný z PHP";
 
$obsah  = "Toto je úvod článku, který přidávám přímo z php kódu";
$obsah .= "<!--more-->";
$obsah .= "A tohle už je hlavní čast textu, viditelná až po rozkliknutí postu.";
 
$tagy = "wordpress, php, wp_insert_post, jahody";
 
$kategorie = 3;
 
$autor = 1;
 
$postid = add_post ($nadpis, $obsah, $kategorie, $autor, $tagy);
 
if(!$postid) die("chyba");
echo "Byl přidán nový post. Má ID: " . $postid;
 
function add_post($title, $content, $category_id, $author_id, $tags) {
  $post_data = array();
  $post_cat[] = (int)$category_id;
  $post_data['post_category'] = $post_cat;
  $post_data['post_title'] = $title;
  $post_data['post_content'] = $content;
  $post_data['post_status'] = "publish";
  $post_data['tags_input'] = $tags;
  $post_data['post_author'] = $author_id;
  $post_id = wp_insert_post($post_data);
  return $post_id;
}