🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
WordPress

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

PHP

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

Q&A

解決済

3回答

1099閲覧

Wordpressでfunction.phpに入力フォームと計算式を作って固定ページに表示させたい

tegeken

総合スコア13

WordPress

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

PHP

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

0グッド

0クリップ

投稿2021/02/16 01:36

前提・実現したいこと

wordpressでfunction.phpに計算式を作り固定ページに表示させたい。

発生している問題・エラーメッセージ

ローカル開発環境で試したところ固定ページに表示されたのですが、
本サーバーにアップすると何も表示されません。

該当のソースコード

子テーマのfunction.php

php

1 2<?php 3add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' ); 4function theme_enqueue_styles() { 5 wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' ); 6 wp_enqueue_style( 'child-style', get_stylesheet_directory_uri() . '/style.css', array('parent-style') 7); 8} 9?> 10 11<?php 12/* 味噌計算アプリ */ 13function miso_amount_calc($content) { 14 if( is_page( 'amount_of_miso' )) { //固定ページ「amount_of_miso」の時だけ処理させる 15 /* PHPで計算処理を組み込む */ 16 if( $_POST['cal_bottom'] == '計算') { 17 $misoVolume = $_POST["miso_volume"]; 18 19 $kouji = (0.6 * ($misoVolume * 10) / 10); 20 $soi = (0.4 * ($misoVolume * 10) / 10); 21 $drysoi = (0.2 * ($misoVolume * 10) / 10); 22 $awaseNijiru = (100 * $misoVolume); 23 $awaseSolt = (124 * $misoVolume); 24 } 25 ?> 26 <!-- 入力フォーム --> 27 <div class="container"> 28 <div class="row"> 29 <div class="col-md-8"> 30 <h1>味噌分量計算表</h1> 31 <p>作りたい味噌の量を入力して[計算]ボタンを押してください。</p> 32 <form name="miso_form" method="post" action="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI']); ?>"> 33 <div class="form-group form-inline"> 34 <lavel>作りたい味噌量:</lavel> 35 <input type="tel" name="miso_volume" id="input_area" class="form-control col-2" maxlength="3" /> Kg 36 </div> 37 <button type="submit" name="cal_bottom" class="btn btn-secondary btn-block col-2 form-control" value="計算">計算</button> 38 </form> 39 40 <!-- 計算結果表示 --> 41 <h3>合わせ味噌</h3> 42 <table class="table table-bordered table-striped miso-amount"> 43 <tbody> 44 <tr> 45 <th><lavel>麹量:</lavel></th> 46 <td><?php echo $kouji ?>&nbsp;Kg</td> 47 </tr> 48 <tr> 49 <th><lavel>煮大豆:</lavel></th> 50 <td><?php echo $soi ?>&nbsp;Kg</td> 51 </tr> 52 <tr> 53 <th><lavel>乾燥大豆:</lavel></th> 54 <td><?php echo $drysoi ?>&nbsp;Kg</td> 55 </tr> 56 <tr> 57 <th><lavel>煮汁:</lavel></th> 58 <td><?php echo $awaseNijiru ?>&nbsp;cc</td> 59 <tr> 60 <tr> 61 <th><lavel>塩:</lavel></th> 62 <td><?php echo $awaseSolt ?>&nbsp;g</td> 63 </tr> 64 </tbody> 65 </table> 66 </div> 67 </div><!-- /.row --> 68 </div> 69 70 <?php 71 } else { 72 return $content; 73 } 74} 75add_filter('the_content', 'miso_amount_calc'); 76?>

固定ページのスラッグを
amount_of_miso
にしました。

試したこと

使用しているテーマ(Lightning)の標準の子テーマでは、
エラーが発生したので、WordPressの子テーマで使用するfunction.phpを使うと表示できました。
その他のphpのプログラムは調べながらネットで見たコードを修正しました。

補足情報(FW/ツールのバージョンなど)

ローカル開発環境
Windows10 pro
MAMP 4.2.0.23973
PHP 7.4.1
Wordpress 5.6.1-ja

本サーバー
ロリポップ スタンダードプラン
PHP 7.4モジュール版
Wordpress 5.6.1-ja

WordpressのテーマはLightningの子テーマ
子テーマのfunction.phpは、
Lightningの標準のものではローカルでエラーが出たので、
WordPressの子テーマを作る時に使用するものを使ってローカルでは表示することが出来ました。

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

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

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

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

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

guest

回答3

0

表示されないのは、フィルターフックの中で return でコンテンツを返していないからではないでしょうか。

フォーム部分を return で返すように変更するとどうなりますか?

投稿2021/02/16 21:35

CHERRY

総合スコア25218

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

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

tegeken

2021/02/17 00:59

ありがとうございます。 フォーム部分をリターンで返すとは <?php function miso_amount_calc($content) { if( is_page( 'amount_of_miso' )) { //固定ページ「amount_of_miso」の時だけ処理させる /* PHPで計算処理を組み込む */ if( $_POST['cal_bottom'] == '計算') { $misoVolume = $_POST["miso_volume"]; $kouji = (0.6 * ($misoVolume * 10) / 10); $soi = (0.4 * ($misoVolume * 10) / 10); $drysoi = (0.2 * ($misoVolume * 10) / 10); $awaseNijiru = (100 * $misoVolume); $awaseSolt = (124 * $misoVolume); } return $content; //←これ ?> という意味でしょうか? これを試してみましたが何も表示されませんでした。 間違っていたら教えていただけると助かります。 よろしくお願いします。
KazuhiroHatano

2021/02/17 02:29

the_contentフィルタは記事の内容の"文字列"を加工して返すためのフィルタです フィルタフックで"出力"をするという使い方は間違いです "出力"を"文字列"にくっつけて返したいならば出力バッファを活用しましょう https://www.php.net/manual/ja/function.ob-get-clean.php
tegeken

2021/02/17 22:56

ご指摘ありがとうございます リンク先を参考に修正してみます
guest

0

自力解決しました。

フィルターフックについて調べていくうちに、
ひょっとしたら指定した固定ページの編集部分に、
なにか入力値がないといけないんじゃないかと思い、
適当な文字列を入力して更新すると思った結果になりました。

皆さんからのアドバイスでフィルターフックについて理解が進みました。
ありがとうございました。

投稿2021/02/18 00:46

tegeken

総合スコア13

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

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

0

自己解決

一度解決したと書きましたが、
やはり解決していませんでした。
KazuhiroHatanoさんのご指摘通りthe_contentを使った、
フィルターフックではダメでした。

出力バッファを使い
下記のようにadd_shortcodeを使って固定ページに出力しました。
今回の件で、
関数で計算させてショートコードで表示させるフローの理解が進みました。
ありがとうございました。
今後とも宜しくお願いします。

php

1<?php 2add_shortcode( 'miso_amount', 'miso_amount_calc' ); 3/* 味噌計算アプリ */ 4function miso_amount_calc() { 5 /* PHPで計算処理を組み込む */ 6 if ( $_POST[ 'cal_bottom' ] == '計算' ) { 7 $misoVolume = $_POST[ "miso_volume" ]; 8 9 $kouji = ( 0.6 * ( $misoVolume * 10 ) / 10 ); 10 $soi = ( 0.4 * ( $misoVolume * 10 ) / 10 ); 11 $drysoi = ( 0.2 * ( $misoVolume * 10 ) / 10 ); 12 $awaseNijiru = ( 100 * $misoVolume ); 13 $awaseSolt = ( 124 * $misoVolume ); 14 } 15 ob_start(); 16 ?> 17<!-- 入力フォーム --> 18<div class="container"> 19 <div class="row"> 20 <div class="col-md-8"> 21 <h1>味噌分量計算表</h1> 22 <p>作りたい味噌の量を入力して[計算]ボタンを押してください。</p> 23 <form name="miso_form" method="post" action="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI']); ?>"> 24 <div class="form-group form-inline"> 25 <lavel>作りたい味噌量:</lavel> 26 <input type="tel" name="miso_volume" id="input_area" class="form-control col-2" maxlength="3" /> 27 Kg </div> 28 <button type="submit" name="cal_bottom" class="btn btn-secondary btn-block col-2 form-control" value="計算">計算</button> 29 </form> 30 31 <!-- 計算結果表示 --> 32 <h3>合わせ味噌</h3> 33 <table class="table table-bordered table-striped miso-amount"> 34 <tbody> 35 <tr> 36 <th><lavel>麹量:</lavel></th> 37 <td><?php echo $kouji ?>&nbsp;Kg</td> 38 </tr> 39 <tr> 40 <th><lavel>煮大豆:</lavel></th> 41 <td><?php echo $soi ?>&nbsp;Kg</td> 42 </tr> 43 <tr> 44 <th><lavel>乾燥大豆:</lavel></th> 45 <td><?php echo $drysoi ?>&nbsp;Kg</td> 46 </tr> 47 <tr> 48 <th><lavel>煮汁:</lavel></th> 49 <td><?php echo $awaseNijiru ?>&nbsp;cc</td> 50 <tr> 51 <tr> 52 <th><lavel>塩:</lavel></th> 53 <td><?php echo $awaseSolt ?>&nbsp;g</td> 54 </tr> 55 </tbody> 56 </table> 57 </div> 58 </div> 59 <!-- /.row --> 60</div> 61<?php 62$str = ob_get_clean(); 63 64return $str; 65}

投稿2021/02/18 00:42

編集2021/02/19 01:42
tegeken

総合スコア13

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問