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

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

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

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

Q&A

1回答

2908閲覧

WP関数が使えません

chNOBUNAGA

総合スコア41

WordPress

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

0グッド

0クリップ

投稿2016/07/13 11:39

編集2016/07/13 12:41

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

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

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

PHP

1<?php 2$post_value = array( 3 'post_title' => 'テストタイトル',// 投稿のタイトル。 4 'post_content' => 'テスト本文' // 投稿の本文。 5); 6wp_insert_post($post_value); 7 8?>

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

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

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

PHP

1<?php 2/** 3 * Template Name: スレッド投稿フォーム 4 */ 5get_header(); ?> 6<?php 7if(is_user_logged_in()): //Login check 8$user = wp_get_current_user(); 9?> 10<?php //echo $title ?> 11<form action="<?php the_permalink();?>" method="post" enctype="multipart/form-data"> 12 <?php 13 // セッション処理 14 session_start(); 15 require_once "functions/definition.php"; 16 $content_txt = ""; 17 ini_set("session.bug_compat_42", 0); 18 ini_set("session.bug_compat_warn", 0); 19 if(isset($_SESSION[TITLE])) $content_txt = $_SESSION[TITLE]; 20 if(isset($_SESSION[CONTENT])) $content_txt = $_SESSION[CONTENT]; 21 show_thread_error(); 22 wp_nonce_field('create_thread'); 23 ?> 24 <table class="form-table"> 25 <tbody> 26 <tr> 27 <th><label for="title">タイトル</label></th> 28 <td><input id="title" type="text" name="title" value="<?php echo $title_txt; ?>" /></td> 29 </tr> 30 <tr> 31 <th><label>画像</label></th> 32 <td><input type="file" name="image" /></td> 33 </tr> 34 <tr> 35 <th><label>カテゴリー</label></th> 36 <td><?php wp_dropdown_categories(); ?></td> 37 </tr> 38 <tr> 39 <th><label for="content">コメント</label></th> 40 <td><textarea id="content" name="content"><?php echo $content_txt; ?></textarea></td> 41 </tr> 42 </tbody> 43 </table> 44 <p class="submit"><input type="submit" value="投稿する" /></p> 45</form> 46<?php else: //Login check else ?> 47<p><a href="<?php echo wp_login_url(get_permalink()); ?>">ログイン</a>してください。</p> 48<?php 49endif; //Login check 50get_footer(); 51?>

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

PHP

1<?php 2/** 3 * テンプレートが読み込まれる直前で実行される 4 */ 5global $create_thread_error; 6$create_thread_error = array(); 7// セッション処理 8session_start(); 9$_SESSION[TITLE] = $_POST[TITLE]; 10$_SESSION[CONTENT] = $_POST[CONTENT]; 11// 投稿する 12function _my_create_thread(){ 13 if( 14 is_page('create-thread') //create-thredページチェック 15 && 16 is_user_logged_in() //ログインチェック 17 && 18 isset($_POST['_wpnonce']) //wpnonceチェック 19 && 20 wp_verify_nonce($_POST['_wpnonce'], 'create_thread') //wpnoceベリファイ 21 ){ 22 // バリデーション 23 global $create_thread_error; 24 if(!isset($_POST['title']) || empty($_POST['title'])){ 25 $create_thread_error[] = 'タイトルが空白です。'; 26 } 27 if(!isset($_POST['content']) || empty($_POST['content'])){ 28 $create_thread_error[] = '本文が空です。'; 29 } 30 if (isset($_FILES['image']['error']) && is_int($_FILES['image']['error'])) { 31 // ファイルバリデーション 32 if (!$_FILES['image']['error']) { 33 // サイズ上限チェック 34 if ($_FILES['image']['size'] > 1000000) { 35 $create_thread_error[] = 'ファイルサイズが大きすぎます。'; 36 } 37 // getimagesizeを利用しMIMEタイプをチェック 38 $imageInfo = getimagesize($_FILES['image']['tmp_name']); 39 list($orig_width, $orig_height, $image_type) = $imageInfo; 40 if ($imageInfo === false) { 41 $create_thread_error[] = '画像ファイルではありません。'; 42 } else { 43 $ext = substr($_FILES['image']['name'], strrpos($_FILES['image']['name'], '.') + 1); 44 if (false === $ext = array_search( 45 $imageInfo['mime'], 46 array( 47 'jpg' => 'image/jpeg', 48 'png' => 'image/png', 49 'gif' => 'image/gif', 50 ), 51 true 52 )) { 53 $create_thread_error[] = '画像形式が未対応です。'; 54 } 55 } 56 $user = wp_get_current_user(); 57 $upload_dir = wp_upload_dir(); 58 $image_url = $upload_dir['path'] . '/'. $user->get('user_login').'-'. date(YmdHis) .'.'. $ext; 59 if (!move_uploaded_file($_FILES['image']['tmp_name'],$image_url)) { 60 $create_thread_error[] = 'ファイル保存時にエラーが発生しました。'; 61 } 62 } else { 63 $create_thread_error[] = 'ファイルが選択されていません。'; 64 } 65 } 66 //エラーが無ければ投稿処理 67 if(empty($create_thread_error)){ 68 $post_id = wp_insert_post(array( 69 'post_title' => (string)$_POST['title'], 70 'post_content' => (string)$_POST['content'], 71 'post_status' => 'publish', 72 'post_author' => get_current_user_id(), 73 'post_type' => 'post', 74 'post_category' => array(intval($_POST['cat'])) 75 ), true); 76 //アイキャッチ設定 77 $image_data = file_get_contents($image_url); 78 $filename = basename($image_url); 79 if(wp_mkdir_p($upload_dir['path'])) 80 $file = $upload_dir['path'] . '/' . $filename; 81 else 82 $file = $upload_dir['basedir'] . '/' . $filename; 83 file_put_contents($file, $image_data); 84 $wp_filetype = wp_check_filetype($filename, null ); 85 $attachment = array( 86 'post_mime_type' => $wp_filetype['type'], 87 'post_title' => sanitize_file_name($filename), 88 'post_content' => '', 89 'post_status' => 'inherit' 90 ); 91 $attach_id = wp_insert_attachment( $attachment, $file, $post_id ); 92 require_once(ABSPATH . 'wp-admin/includes/image.php'); 93 $attach_data = wp_generate_attachment_metadata( $attach_id, $file ); 94 wp_update_attachment_metadata( $attach_id, $attach_data ); 95 set_post_thumbnail( $post_id, $attach_id ); 96 //データの挿入に成功していたら移動 97 if(!is_wp_error($post_id)){ 98 //ページを移動 99 header('Location: '.get_permalink($post_id)); 100 die(); 101 } else { 102 $create_thread_error[] = '投稿時にエラーが発生しました。'.$post_id->get_error_message(); 103 } 104 } 105 } 106} 107add_action('template_redirect', '_my_create_thread'); 108/** 109 * スレッド作成画面でエラーがあれば表示 110 * @global array $create_thread_error 111 */ 112function show_thread_error(){ 113 global $create_thread_error; 114 if(!empty($create_thread_error)){ 115 echo '<div id="error">'; 116 echo implode('<br />', $create_thread_error); 117 echo '</div>'; 118 } 119} 120?>

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/07/14 01:00

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

回答1

0

関数リファレンス/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 12:12

編集2016/07/13 12:28
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chNOBUNAGA

2016/07/13 12:21

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

退会済みユーザー

2016/07/13 12:30

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

2016/07/13 12:37

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

2016/07/13 12:41

追記いたしました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問