• 解決済 ryoloskin

    (@ryoloskin)


    初めて質問させていただきます。Wordpress歴10日ほどのPHPすらよく理解できていない初心者です。
    wp_insert_postを使用して、HTMLで制作したボタンから記事を投稿させたいのですが、記述の方法が分かりません。ボタンを押せば新しい記事が作成されるだけで良いのですが・・・

    なにかよい方法はあるのでしょうか?

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • 確かにwp_insert_postを使えばWordPressに投稿する事が出来ます。

    ただ、PHPがある程度理解出来ないと、具体的にはwp_insert_postのcodexを読んで内容が理出来る程度でないとちょっと辛いと思います。

    とは言え、色々と事情もあると思うので簡単なサンプルコードを紹介します。
    テーマのテンプレートなどに組み込んで動作を確認して下さい。
    WordPress外のPHPファイルに組み込む場合は /wordpress/wp-blog-header.php を読み込む必要があります。

    <?php
      $action = 'like_a_salt.'; //salt的なやつ
    
      //クエリチェック
      if(isset($_POST['_wpnonce']) &&
         wp_verify_nonce($_POST['_wpnonce'], $action) &&
         isset($_POST['title']) &&
         isset($_POST['content'])
      ){
    
        //投稿設定
        $new_post = array(
                  'post_type' => 'post',
                  'post_status' => 'publish',
                  'post_author' => 1, //投稿者のユーザーID
                  'post_title' => $_POST['title'],
                  'post_content' => $_POST['content'],
                  'comment_status' => 'closed',
                  'ping_status' => 'closed'
                );
    
        //投稿処理
        $post_id = wp_insert_post($new_post);
    
        //結果
        if($post_id){
        	$result = '投稿に成功しました!';
        }else{
        	$result = 'エラー: なんか失敗しました!!!';
        }
    
      }
    ?>
    <html>
    <head></head>
    <body>
      <?php if(isset($result)) echo '<p>'.$result.'</p>'; ?>
      <form method="post" action="<?php the_permalink(); ?>">
        <p>
          <label for="title">タイトル:</label><br />
          <input name="title" type="text" value="" id="title">
        </p>
        <p>
          <label for="content">本文:</label><br />
          <textarea name="content" id="content"></textarea>
        </p>
        <?php wp_nonce_field($action); ?>
        <input type="submit" value="送信">
      </form>
    </body>
    </html>

    上記のコードの「投稿処理」の部分がwp_insert_postの記述になります。
    wp_insert_postに与える引数はcodexを参考に適時変更して下さい。
    wp_insert_postは投稿に成功すると投稿IDを返します。失敗した場合はfalse。

    また、wp_nonce_field()という関数はCSRF対策用のトークンを生成する関数で、標準では_wpnonceという名称のhiddenフィールドを生成します。
    このhiddenフィールドに自動生成されたパラメータをformのpost先で受け取って、wp_verify_nonce()関数で送信されたパラメータの整合性を確認します。

    各関数の詳細はCodexで確認してみて下さい。

    ・wp_insert_post
    http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wp_insert_post
    ・wp_nonce_field
    http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wp_nonce_field
    ・wp_verify_nonce
    http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wp_verify_nonce

    トピック投稿者 ryoloskin

    (@ryoloskin)

    詳しい説明だけでなく、サンプルコードまで書いて頂きありがとうございます。
    Codexは確認したつもりだったのですが、きちんと理解できていなかったようです。(HTMLの書き方も学び直さないといけませんでした)

    このたびは本当にありがとうございました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「input typeで作成したボタンから記事を投稿する機能」には新たに返信することはできません。