WordPressの入力画面はあまりカスタマイズできるものではありません。
カスタムフィールドの入力項目をいろいろと編集できるWordPressプラグイン「カスタムフィールドテンプレート」なども、頑張ればデザイン上のカスタマイズは結構出来ます。が、かなり苦労しますし、あくまでカスタムフィールドの話です。
実際にWordPress標準のものとは別に入力フォームを作る機会が最近ありました。
というわけで、その時に使った中から必要なWP関数をいくつかご紹介いたします。
データベースへの接続とログインチェック
恐らく、自分でMySQLホスト情報を設定して、データベースに接続することで、外部からの入力は可能になると思われます。
が、それは少し大変です。
なので、以下のようにWordPressのファイルをrequire_onceで読み込むことで、簡単にデータベースに接続できます。
require_once('../wp-blog-header.php');
このままだと入力フォームの作り方によっては、ログインしていなくてもそのフォームにアクセス出来てしまいます。誰でも入力出来てしまう可能性があり問題です。
なので、ログインのチェックをするis_user_logged_in関数を、フォームの前に使います。
if(!is_user_logged_in())
die('ログインされていないようです。');
以上でとりあえず最低限の下準備は出来ると思います。
データベース書き込み
データベースへの投稿データの書き込みにはwp_insert_post関数を使います。
$my_post = array();
$my_post['post_title'] = タイトル;
$my_post['post_content'] = 本文;
$my_post['post_author'] = 投稿者ID;
$my_post['post_status'] => 'publish'
wp_insert_post($my_post);
また、投稿データの変更には、以下のようにwp_update_post関数を使います。ここでは記事IDは必須になります。
$my_post = array();
$my_post['ID'] = 記事ID;
$my_post['post_title'] = タイトル;
$my_post['post_content'] = 本文;
$my_post['post_author'] = 投稿者ID;
wp_update_post($my_post);
このパラメーターについてはWordPress Codexのget_postページにある「戻り値」などを参照してください。
⇒ WordPress Codex get_postページ内項目「戻り値」
カスタムフィールドがある場合には、update_post_meta関数を以下のように使います。
update_post_meta($post_id,カスタムフィールド名,カスタムフィールドデータ);
この関数は、同名のカスタムフィールドがある場合には変更、無い場合には新規作成になります。
全ての入力データに言えることですが、フォームから送られてきたデータをそのままデータベースに保存しようとすると、データベースから取り出して表示しようとした時に文字化けしたり意図しない記号が入ったり、なによりセキュリティ的に問題があります。
なので、htmlspecialchars()、strip_tag()などを使って、文字列を適切な形にすることは必要だと思います。
さいごに
先述しました、制作したフォームというのは、パソコンにあまり詳しくない人が入力をしなければならず、しかもかなり多くのカスタムフィールドを使う必要がある、というものでした。
そのため、WordPress標準のフォームでは実現が難しく、外部フォームを作る必要があるという状況になりました。
普通にブログとしてWordPressを使う場合にはあまり必要ないですが、少し複雑なことをするコーポレートサイトなどだと上記の方法が便利かと思います。