質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.35%

  • WordPress

    9603questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

WP関数が使えません

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 912

chNOBUNAGA

score 37

何回も質問申し訳ありません。

環境:ロリホップ(スタンダートプラン0
wordpressを使用

wordpressのフォルダの直下に、以下の内容のファイルを作成しました。

<?php
$post_value = array(
    'post_title' => 'テストタイトル',// 投稿のタイトル。
    'post_content' => 'テスト本文' // 投稿の本文。
);
wp_insert_post($post_value);

?>

全くの真っ白になってしまいます。
全くどこが悪いかわかりません。
ちなみに、wo-loginを読み込んでもダメでした。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
追記
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

こちらが、投稿フォームになります

<?php
/**
 * Template Name: スレッド投稿フォーム
 */
get_header(); ?>
<?php
if(is_user_logged_in()): //Login check
$user = wp_get_current_user();
?>
<?php //echo $title ?>
<form action="<?php the_permalink();?>" method="post" enctype="multipart/form-data">
  <?php
  // セッション処理
  session_start();
  require_once "functions/definition.php";
  $content_txt = "";
  ini_set("session.bug_compat_42", 0);
  ini_set("session.bug_compat_warn", 0);
  if(isset($_SESSION[TITLE])) $content_txt = $_SESSION[TITLE];
  if(isset($_SESSION[CONTENT])) $content_txt = $_SESSION[CONTENT];
  show_thread_error();
  wp_nonce_field('create_thread');
  ?>
  <table class="form-table">
  <tbody>
    <tr>
      <th><label for="title">タイトル</label></th>
      <td><input id="title" type="text" name="title" value="<?php echo $title_txt; ?>" /></td>
    </tr>
    <tr>
      <th><label>画像</label></th>
      <td><input type="file" name="image" /></td>
    </tr>
    <tr>
      <th><label>カテゴリー</label></th>
      <td><?php wp_dropdown_categories(); ?></td>
    </tr>
    <tr>
      <th><label for="content">コメント</label></th>
      <td><textarea id="content" name="content"><?php echo $content_txt; ?></textarea></td>
    </tr>
  </tbody>
  </table>
  <p class="submit"><input type="submit" value="投稿する" /></p>
</form>
<?php else: //Login check else ?>
<p><a href="<?php echo wp_login_url(get_permalink()); ?>">ログイン</a>してください。</p>
<?php
endif; //Login check
get_footer();
?>

こちらが、投稿内容を確認し、投稿します

<?php
/**
 * テンプレートが読み込まれる直前で実行される
 */
global $create_thread_error;
$create_thread_error = array();
// セッション処理
session_start();
$_SESSION[TITLE] = $_POST[TITLE];
$_SESSION[CONTENT] = $_POST[CONTENT];
// 投稿する
function _my_create_thread(){
  if(
    is_page('create-thread')  //create-thredページチェック
      &&
    is_user_logged_in() //ログインチェック
      &&
    isset($_POST['_wpnonce']) //wpnonceチェック
      &&
    wp_verify_nonce($_POST['_wpnonce'], 'create_thread')  //wpnoceベリファイ
  ){
    // バリデーション
    global $create_thread_error;
    if(!isset($_POST['title']) || empty($_POST['title'])){
      $create_thread_error[] = 'タイトルが空白です。';
    }
    if(!isset($_POST['content']) || empty($_POST['content'])){
      $create_thread_error[] = '本文が空です。';
    }
    if (isset($_FILES['image']['error']) && is_int($_FILES['image']['error'])) {
      // ファイルバリデーション
      if (!$_FILES['image']['error']) {
        // サイズ上限チェック
        if ($_FILES['image']['size'] > 1000000) {
          $create_thread_error[] = 'ファイルサイズが大きすぎます。';
        }
        // getimagesizeを利用しMIMEタイプをチェック
        $imageInfo = getimagesize($_FILES['image']['tmp_name']);
        list($orig_width, $orig_height, $image_type) = $imageInfo;
        if ($imageInfo === false) {
          $create_thread_error[] = '画像ファイルではありません。';
        } else {
          $ext = substr($_FILES['image']['name'], strrpos($_FILES['image']['name'], '.') + 1);
          if (false === $ext = array_search(
            $imageInfo['mime'],
            array(
            'jpg' => 'image/jpeg',
            'png' => 'image/png',
            'gif' => 'image/gif',
            ),
            true
          )) {
            $create_thread_error[] = '画像形式が未対応です。';
          }
        }
        $user = wp_get_current_user();
        $upload_dir = wp_upload_dir();
        $image_url = $upload_dir['path'] . '/'. $user->get('user_login').'-'. date(YmdHis) .'.'. $ext;
        if (!move_uploaded_file($_FILES['image']['tmp_name'],$image_url)) {
          $create_thread_error[] = 'ファイル保存時にエラーが発生しました。';
        }
      } else {
        $create_thread_error[] = 'ファイルが選択されていません。';
      }
    }
    //エラーが無ければ投稿処理
    if(empty($create_thread_error)){
      $post_id = wp_insert_post(array(
        'post_title' => (string)$_POST['title'],
        'post_content' => (string)$_POST['content'],
        'post_status' => 'publish',
        'post_author' => get_current_user_id(),
        'post_type' => 'post',
        'post_category' => array(intval($_POST['cat']))
      ), true);
      //アイキャッチ設定
      $image_data = file_get_contents($image_url);
      $filename = basename($image_url);
      if(wp_mkdir_p($upload_dir['path']))
          $file = $upload_dir['path'] . '/' . $filename;
      else
          $file = $upload_dir['basedir'] . '/' . $filename;
      file_put_contents($file, $image_data);
      $wp_filetype = wp_check_filetype($filename, null );
      $attachment = array(
          'post_mime_type' => $wp_filetype['type'],
          'post_title' => sanitize_file_name($filename),
          'post_content' => '',
          'post_status' => 'inherit'
      );
      $attach_id = wp_insert_attachment( $attachment, $file, $post_id );
      require_once(ABSPATH . 'wp-admin/includes/image.php');
      $attach_data = wp_generate_attachment_metadata( $attach_id, $file );
      wp_update_attachment_metadata( $attach_id, $attach_data );
      set_post_thumbnail( $post_id, $attach_id );
      //データの挿入に成功していたら移動
      if(!is_wp_error($post_id)){
        //ページを移動
        header('Location: '.get_permalink($post_id));
        die();
      } else {
        $create_thread_error[] = '投稿時にエラーが発生しました。'.$post_id->get_error_message();
      }
    }
  }
}
add_action('template_redirect', '_my_create_thread');
/**
 * スレッド作成画面でエラーがあれば表示
 * @global array $create_thread_error
 */
function show_thread_error(){
  global $create_thread_error;
  if(!empty($create_thread_error)){
    echo '<div id="error">';
    echo implode('<br />', $create_thread_error);
    echo '</div>';
  }
}
?>

投稿フォームを開くと、真っ白になります

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2016/07/14 06:02

    こちらの質問が他のユーザから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

  • CHERRY

    2016/07/14 08:41

    php のエラーが出ていると思われるので、php の設定で、display_errors を有効にして、表示されるエラーを教えてください。
    https://lolipop.jp/manual/user/php-setting/

    キャンセル

  • m6u

    2016/07/14 10:00

    「wordpressのフォルダ」というのはいくつかあると思うのですが、公開用ディレクトリのことなのか、コアファイル群を置いているディレクトリなのか、テンプレートファイル群を置いているディレクトリなのか、明瞭に示してくださるようお願いします。

    キャンセル

回答 1

+1

関数リファレンス/wp insert post - WordPress Codex 日本語版
http://wpdocs.osdn.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

この関数が適切に動作すれば、WordPressに対して記事を投稿する「だけ」の動作のようです。
真っ白になる? 表示するための関数などを組み込んでいないからでしょうね。


WordPressの仕組みを理解する
http://www.nsthink.com/wordpress/

どういった流れでWordPressが動作しているか、ざっくり解説している記事です。
「WordPress ファイルの読み込み順序」の項にヒントが有ります。
通常インストールした時に見せるディレクトリ直下にindex.phpが置かれていて、
それがWordPressのコアファイルなどをどう読んでいるのか(呼んでいるのか)が示されています。
(たぶんindex.phpを読みこなせば、自ずと分かる内容だと思いますが。)

その流れとは別に勝手phpファイルを置いてWordPressの機能を使うのであれば、
そのindex.phpとそこから更に読み込まれる一連のphpファイルでやっていることをなぞって
実現する必要があります。
どうやるかって? そのものズバリを解説しているページはなかなかないと思うので、
Google先生にWordPressの仕組みを解説しているページを探してもらって、
片っ端からなんとなく理解していくしか無いかもしれません。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/07/13 21:21

    投稿されていませんでした。それどころか、get_header()などの関数も使えません。

    キャンセル

  • 2016/07/13 21:30

    質問文から、何をどうしたいのか、テーマファイル群を作りたいのか、それともプラグインを自作したいのか、など目的が分かりかねるため、ざっくりとした仕組みの理解につながるページを示すくらいしかできません。

    キャンセル

  • 2016/07/13 21:37

    目的としましては、投稿をwp-insert-postからしたいのです。

    キャンセル

  • 2016/07/13 21:41

    追記いたしました

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • WordPress

    9603questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。