81行から成るWordPressの自作投稿フォーム

モバイルからの投稿を最終目標に色々調べていますが、WP投稿用のAPIがあるので楽ですね。
難点はAPIに関するドキュメントが少ない‥‥というか現行バージョンのタグ周りに関しては皆無に近いので、コードを読んで使い方を調べないと‥‥ってくらいですが、PHPのコードを読む勉強になるので良しとしましょう。

んで、とりあえず投稿だけするスクリプトをテストで作りました。
ユーザー認証もサニタイズも文字コード変換もしてないですが、テストなのでその辺はご愛敬。

WPへの投稿は基本的に配列に色々つっこんで、wp_insert_post()の呼び出しでOK。
成功すればポストID(管理ページで見られる各記事の番号)が帰ってきて、失敗したら0。

iG:Syntax Hiliterのテストをかねてソースを貼ってみる。

PHP:
  1. <?php
  2. // これをするだけでWordPressのAPIが呼び出し放題!
  3. require_once '../../wp-config.php';
  4. ?>
  5. <html>
  6.   <head>
  7.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  8.   </head>
  9.   <body>
  10.     <h1>WP投稿テスト</h1>
  11.     <form method="post" action="index.php">
  12.       <table border="0">
  13.         <tr>
  14.           <td>タイトル</td>
  15.           <td><input type="text" name="title" value="" /></td>
  16.         </tr>
  17.         <tr>
  18.           <td>内容</td>
  19.           <td><textarea name="content"></textarea></td>
  20.         </tr>
  21.         <tr>
  22.           <td>投稿者名</td>
  23.           <td><input type="text" name="author" value="" /></td>
  24.         </tr>
  25.         <tr>
  26.           <td>タイプ</td>
  27.           <td><input type="text" name="type" value="post" /></td>
  28.         </tr>
  29.         <tr>
  30.           <td>ステータス</td>
  31.           <td><input type="text" name="status" value="publish" /></td>
  32.         </tr>
  33.         <tr>
  34.           <td>閲覧パスワード</td>
  35.           <td><input type="text" name="password" value="" /></td>
  36.         </tr>
  37.         <tr>
  38.           <td>カテゴリ</td>
  39.           <td>
  40. <?php
  41. $categories = get_categories();
  42. foreach( $categories as $category )
  43.     echo '<input type="checkbox" name="categories[]" value="'.$category->cat_ID.'" />'.$category->cat_name . '<br />' . "\n";
  44. ?>
  45.           </td>
  46.         </tr>
  47.         <tr>
  48.           <td>日付</td>
  49.           <td><input type="text" name="date" value="" /></td>
  50.         </tr>
  51.         <tr>
  52.           <td>タグ</td>
  53.           <td><input type="text" name="tags" value="test,foo" /></td>
  54.         </tr>
  55.       </table>
  56.     <input type="submit" value="送信">
  57.     </form>
  58.  
  59. <?php
  60. // とりあえずタイトルと本文は必須ってことにしとく
  61. if( $_POST['title'] == '' ||  $_POST['content'] == '' )
  62.     exit;
  63.  
  64. $postarr['post_status']     = $_POST['status'];    // publish, draft, private, inherit, future
  65. $postarr['post_type']       = $_POST['type'];      // post, page, attachment
  66. $postarr['post_author']     = get_profile('ID', $_POST['author']);
  67. $postarr['post_password']   = $_POST['password'];
  68. $postarr['post_category']   = $_POST['categories'];
  69. $postarr['post_content']    = $_POST['content'];
  70. $postarr['post_title']      = $_POST['title'];
  71. $postarr['post_date']       = $_POST['date'];
  72. $postarr['tags_input']      = split(',', $_POST['tags'] );
  73. $postarr['post_excerpt']    = ' '// とりあえず空っぽにしとく
  74.  
  75. if( wp_insert_post($postarr) == 0 )
  76.     echo '<div style="color:#ff0000">投稿失敗!!</div>';
  77. else
  78.     echo '<div style="color:#ff0000">投稿成功しました</div>';
  79. ?>
  80.   </body>
  81. </html>


関連記事