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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

0回答

1176閲覧

wordpressでカスタムフィールドの「入力エリア」を2ヵ所に表示したい。

退会済みユーザー

退会済みユーザー

総合スコア0

WordPress

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/01/23 12:50

編集2018/01/23 16:11

###■目的
ユーザー投稿サイトです。

「記事をツイッターに投稿するかどうか」のチェックボックスを、

①管理画面
②ユーザー投稿画面

2ヵ所に表示したいです。

###■現状(①管理画面は表示できている)
管理画面への表示は次のコードを【functions.php】と【post-twitter.php】に書くことで表示できています。

【functions.php】

php

1/** 2 * ツイッター自動投稿 3 * ---------------------------------------------------------------------------- 4 */ 5 6// ここではTwitterの投稿だけを行う 7add_action('transition_post_status', 'post_twitter', 10, 3); 8function post_twitter($new_status, $old_status, $post) { 9 if ($new_status == 'publish') { 10 // コマンドでTwitterに投稿するファイルを実行(引数にpost_idを渡している) 11 $command = "/usr/bin/php ".__DIR__."/post-twitter.php $post->ID > /dev/null &"; 12 exec($command); 13 } 14} 15 16// 管理画面が開いたときに実行 17add_action('admin_menu', 'add_post_twitter_fields'); 18// カスタムフィールドを投稿画面に追加 19function add_post_twitter_fields() { 20 // フィールドを追加 21 add_meta_box('post_twitter', 'Twitter', 'post_twitter_field', 'post', 'side', 'high'); 22} 23 24// 投稿画面に表示するフォームのHTMLソース 25function post_twitter_field() { 26 global $post; 27 28 $twitter_body = get_post_meta($post->ID, 'twitter_body', true); 29 $checked = get_post_meta($post->ID, 'whether_to_post', true); 30 if ($checked == 'checked') { 31 $checked = 'checked="'.$checked.'""'; 32 } 33 34 echo '<div style="margin-bottom:5px;"><label><input type="checkbox" name="whether_to_post" id="whether_to_post" value="checked" '.$checked.'>Twitterに投稿する</label></div>'; 35 echo '<textarea name="twitter_body" id="twitter_body" cols="50" rows="5" style="width: 100%;" readonly>'.$twitter_body.'</textarea>'; 36 echo <<< EOF 37<script> 38(function($) { 39 // ロード時にチェックが入っていれば編集可に、入っていなかったら可に。 40 if($("#whether_to_post").prop('checked')) { 41 $("#twitter_body").prop('readonly', false); 42 $('#twitter_body').css({'background-color':'','color':'', 'pointer-events':''}); 43 } else { 44 $("#twitter_body").prop('readonly', true); 45 $('#twitter_body').css({'background-color':'#fff','color':'#ccc', 'pointer-events':'none'}); 46 } 47 48 // タイトルを自動入力(フォーカスが外れた時に反映) 49 $('#title').change(function() { 50 if ($('#twitter_body').val() == '') { 51 var title = $('input[name="post_title"]').val(); 52 $('#twitter_body').val(title + "\n"); 53 } 54 }); 55 56 // チェックを入れると編集可能に、外すと不可に。 57 $('input[name="whether_to_post"]').change(function() { 58 if($("#whether_to_post").prop('checked')) { 59 $("#twitter_body").prop('readonly', false); 60 $('#twitter_body').css({'background-color':'','color':'', 'pointer-events':''}); 61 } else { 62 $("#twitter_body").prop('readonly', true); 63 $('#twitter_body').css({'background-color':'#fff','color':'#ccc', 'pointer-events':'none'}); 64 } 65 }); 66 67})(jQuery); 68</script> 69EOF; 70 71} 72 73// 下書き・公開・更新ボタンが押されたときに実行される(ゴミ箱に移動したときも呼ばれるかも?) 74add_action('save_post', 'save_post_twitter', 10, 3); 75// 設定したカスタムフィールドの値をDBに書き込むコード 76function save_post_twitter($post_id, $post) { 77 if (isset($_POST['whether_to_post']) || isset($_POST['twitter_body'])) { 78 $post_type = $post->post_type; 79 if ($post_type == 'post') { 80 $whether_to_post = $_POST['whether_to_post'] == '' ? '': $_POST['whether_to_post']; 81 update_post_meta($post_id, 'whether_to_post', $whether_to_post); 82 83 $twitter_body = $_POST['twitter_body'] == '' ? '': $_POST['twitter_body']; 84 update_post_meta($post_id, 'twitter_body', $twitter_body); 85 } 86 } 87}

【post-twitter.php】

php

1<?php 2require __DIR__. '/../../../wp-load.php'; 3require_once __DIR__."/twitteroauth/autoload.php"; 4use Abraham\TwitterOAuth\TwitterOAuth; 5 6class Twitter { 7 private static $consumer_key = "hogehoge"; 8 private static $consumer_secret = "hogehoge"; 9 private static $access_token = "hogehoge"; 10 private static $access_token_secret = "hogehoge"; 11 12 public function post($post) { 13 14 // Twitterへ投稿 15 $connection = new TwitterOAuth(self::$consumer_key, self::$consumer_secret, self::$access_token, self::$access_token_secret); 16 $result = $connection->post("statuses/update", ["status" => $post]); 17 18 if ($connection->getLastHttpCode() == 200) { 19 echo "succes"; 20 return; 21 } else { 22 // 投稿に失敗したらエラー内容をメールで送る 23 mb_language("Japanese"); 24 mb_internal_encoding("UTF-8"); 25 26 $to = 'to@example.com'; 27 $subject = 'Twitter Debug'; 28 $message = "Twitterへの投稿に失敗しました。\n$post\n\nエラーコード:".$result->errors[0]->code."\nエラーメッセージ:".$result->errors[0]->message; 29 $headers = 'From: from@example.com' . "\r\n"; 30 31 mb_send_mail($to, $subject, $message, $headers); 32 } 33 } 34} 35// functions.phpに書いたtransition_post_statusは、 36// save_postより先に実行されるので、念のためここで2秒遅らせてる。 37sleep(2); 38 39// post_id取得 40$post_id = isset($argv[1]) ? $argv[1] : null; 41 42$whether_to_post = get_post_meta($post_id, 'whether_to_post', true); 43 44// checkedじゃなかったら処理中断 45if ($whether_to_post != 'checked') return; 46 47$twitter = new Twitter(); 48 49// 投稿内容を取得 50$post = get_post_meta($post_id, 'twitter_body', true); 51// post_url取得 52$post_url = get_permalink($post_id); 53if(strpos($post_url,'http://') !== false){ 54 $post_url = str_replace('http://', 'https://', $post_url); 55} 56// 投稿内容とpost_urlを結合 57$post .= "\n".$post_url; 58$twitter->post($post);

###■問題(ユーザー投稿画面で表示出来ない)
ユーザー投稿型のサイトなので、【page.php】でも表示させたいのですけれど、これがうまくいきません。

【page.php】

php

1<div class="twareadayo"> 2<?php 3function post_twitter_field() { 4 global $post; 5 6 $twitter_body = get_post_meta($post->ID, 'twitter_body', true); 7 $checked = get_post_meta($post->ID, 'whether_to_post', true); 8 if ($checked == 'checked') { 9 $checked = 'checked="'.$checked.'""'; 10 } 11 12 echo '<div style="margin-bottom:5px;"><label><input type="checkbox" name="whether_to_post" id="whether_to_post" value="checked" '.$checked.'>Twitterに投稿する</label></div>'; 13 echo '<textarea name="twitter_body" id="twitter_body" cols="50" rows="5" style="width: 100%;" readonly>'.$twitter_body.'</textarea>'; 14 echo <<< EOF 15<script> 16(function($) { 17 // ロード時にチェックが入っていれば編集可に、入っていなかったら可に。 18 if($("#whether_to_post").prop('checked')) { 19 $("#twitter_body").prop('readonly', false); 20 $('#twitter_body').css({'background-color':'','color':'', 'pointer-events':''}); 21 } else { 22 $("#twitter_body").prop('readonly', true); 23 $('#twitter_body').css({'background-color':'#fff','color':'#ccc', 'pointer-events':'none'}); 24 } 25 26 // タイトルを自動入力(フォーカスが外れた時に反映) 27 $('#title').change(function() { 28 if ($('#twitter_body').val() == '') { 29 var title = $('input[name="post_title"]').val(); 30 $('#twitter_body').val(title + "\n"); 31 } 32 }); 33 34 // チェックを入れると編集可能に、外すと不可に。 35 $('input[name="whether_to_post"]').change(function() { 36 if($("#whether_to_post").prop('checked')) { 37 $("#twitter_body").prop('readonly', false); 38 $('#twitter_body').css({'background-color':'','color':'', 'pointer-events':''}); 39 } else { 40 $("#twitter_body").prop('readonly', true); 41 $('#twitter_body').css({'background-color':'#fff','color':'#ccc', 'pointer-events':'none'}); 42 } 43 }); 44 45})(jQuery); 46</script> 47EOF; 48 49} 50?> 51</div>

長くなってしまってすみません。

ユーザー投稿画面に表示するためには、【page.php】のどこを直せばいいか、ご指摘いただけませんでしょうか?

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/01/23 14:48

現状、single.phpに投稿用のフォームを表示していて投稿の仕組みはできあがっているということでしょうか。そうであれば、その部分をどのように実装しているのかを記載していただけますか。
退会済みユーザー

退会済みユーザー

2018/01/23 15:59 編集

>single.phpに投稿用のフォームを表示していて投稿の仕組みはできあがっているということでしょうか。 ☞ はい、できています(あ、でもsingle.phpでなくpage.phpでした)。 投稿用のフォームはプラグイン「WP User Frontend」によって実装しております。 ■参考サイト:http://www.hp-fuzy.com/?p=354/■ ■プラグインサイト:https://ja.wordpress.org/plugins/wp-user-frontend/■ お手すきの折りにヒントだけでも頂戴できれば幸いです。
退会済みユーザー

退会済みユーザー

2018/01/26 21:49

質問の補足は質問文へ記載していただけますか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問