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

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

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

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

PHP

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

プラグイン

プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。

Q&A

1回答

1238閲覧

phpでのエラーメッセージの解釈

135

総合スコア8

WordPress

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

PHP

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

プラグイン

プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。

0グッド

2クリップ

投稿2019/09/24 01:23

編集2019/09/24 09:06

前提・実現したいこと

$product->get_dollPrice_html()の値を1.2で割りたい。そこでwc_get_price_to_displayの連想配列に'price'を1.2で割った'dollPrice' => $dollPriceを追加して解決しようと試みた。

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

自分で作った$product->get_dollPrice_html()(詳細は該当のコードエリアにて)で出力した結果が、既存の$product->get_price_html()で出力した結果と変わらない。

試したこと

get_price_html()を見てみると以下の記述があった。

php

1public function get_price_html( $deprecated = '' ) { 2 if ( '' === $this->get_price() ) { 3 $price = apply_filters( 'woocommerce_empty_price_html', '', $this ); 4 } elseif ( $this->is_on_sale() ) { 5 $price = wc_format_sale_price( wc_get_price_to_display( $this, array( 'price' => $this->get_regular_price() ) ), wc_get_price_to_display( $this ) ) . $this->get_price_suffix(); 6 } else { 7 $price = wc_price( wc_get_price_to_display( $this ) ) . $this->get_price_suffix(); 8 } 9 10 return apply_filters( 'woocommerce_get_price_html', $price, $this ); 11 }

自分の状況はelseの場合のみしかないのでwc_price()とwc_get_price_to_display()のみを考え、それらの内容は以下の通りだった。

php

1function wc_price( $price, $args = array() ) { 2 $args = apply_filters( 3 'wc_price_args', 4 wp_parse_args( 5 $args, 6 array( 7 'ex_tax_label' => false, 8 'currency' => '', 9 'decimal_separator' => wc_get_price_decimal_separator(), 10 'thousand_separator' => wc_get_price_thousand_separator(), 11 'decimals' => wc_get_price_decimals(), 12 'price_format' => get_woocommerce_price_format(), 13 ) 14 ) 15 ); 16 17 $unformatted_price = $price; 18 $negative = $price < 0; 19 $price = apply_filters( 'raw_woocommerce_price', floatval( $negative ? $price * -1 : $price ) ); 20 $price = apply_filters( 'formatted_woocommerce_price', number_format( $price, $args['decimals'], $args['decimal_separator'], $args['thousand_separator'] ), $price, $args['decimals'], $args['decimal_separator'], $args['thousand_separator'] ); 21 22 if ( apply_filters( 'woocommerce_price_trim_zeros', false ) && $args['decimals'] > 0 ) { 23 $price = wc_trim_zeros( $price ); 24 } 25 26 $formatted_price = ( $negative ? '-' : '' ) . sprintf( $args['price_format'], '<span class="woocommerce-Price-currencySymbol">' . get_woocommerce_currency_symbol( $args['currency'] ) . '</span>', $price ); 27 $return = '<span class="woocommerce-Price-amount amount">' . $formatted_price . '</span>'; 28 29 if ( $args['ex_tax_label'] && wc_tax_enabled() ) { 30 $return .= ' <small class="woocommerce-Price-taxLabel tax_label">' . WC()->countries->ex_tax_or_vat() . '</small>'; 31 } 32 33 34/** 35 * Filters the string of price markup. 36 * 37 * @param string $return Price HTML markup. 38 * @param string $price Formatted price. 39 * @param array $args Pass on the args. 40 * @param float $unformatted_price Price as float to allow plugins custom formatting. Since 3.2.0. 41 */ 42 return apply_filters( 'wc_price', $return, $price, $args, $unformatted_price ); 43}

php

1function wc_get_price_to_display( $product, $args = array() ) { 2 $args = wp_parse_args( 3 $args, 4 array( 5 'qty' => 1, 6 'price' => $product->get_price(), 7 8 ) 9 ); 10 $price = $args['price']; 11 $qty = $args['qty']; 12 13 return 'incl' === get_option( 'woocommerce_tax_display_shop' ) ? 14 wc_get_price_including_tax( 15 $product, 16 array( 17 'qty' => $qty, 18 'price' => $price, 19 20 ) 21 ) : 22 wc_get_price_excluding_tax( 23 $product, 24 array( 25 'qty' => $qty, 26 'price' => $price, 27 28 ) 29 ); 30} 31

該当のソースコード

新たに自分で作ったget_dollPrice_html()のコード

php

1public function get_dollPrice_html( $deprecated = '' ) { 2 if ( '' === $this->get_price() ) { 3 $dollPrice = apply_filters( 'woocommerce_empty_price_html', '', $this ); 4 } elseif ( $this->is_on_sale() ) { 5 $dollPprice = wc_format_sale_price( wc_get_price_to_display( $this, array( 'price' => $this->get_regular_price() ) ), wc_get_price_to_display( $this ) ) . $this->get_price_suffix(); 6 } else { 7 $dollPrice = wc_price( wc_get_price_to_display( $this ) ) . $this->get_price_suffix(); 8 } 9 10 return apply_filters( 'woocommerce_get_price_html', $dollPrice, $this ); 11 }

改変したwc_get_price_to_display()

php

1function wc_get_price_to_display( $product, $args = array() ) { 2 $args = wp_parse_args( 3 $args, 4 array( 5 'qty' => 1, 6 'price' => $product->get_price(), 7 'dollPrice' =>intval($product->get_price()) / 1.2, 8 ) 9 ); 10 $price = $args['price']; 11 $qty = $args['qty']; 12 $dollPrice = $arg['dollPrice']; 13 14 return 'incl' === get_option( 'woocommerce_tax_display_shop' ) ? 15 wc_get_price_including_tax( 16 $product, 17 array( 18 'qty' => $qty, 19 'price' => $price, 20 'dollPrice' => $dollPrice, 21 ) 22 ) : 23 wc_get_price_excluding_tax( 24 $product, 25 array( 26 'qty' => $qty, 27 'price' => $price, 28 'dollPrice' => $dollPrice, 29 ) 30 ); 31}

お手数ですがご教示いただけましたら幸いです。

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

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

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

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

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

guest

回答1

0

この手のエラーは32行目じゃなければ31行目を疑うとよいのですが
複数行を突っ込んでいてわかりづらいです

PHP

1<p class="<?php 2echo esc_attr( apply_filters( 'woocommerce_product_price_class', 'price' ) ); 3?>"><?php 4echo $product->get_price_html(); 5echo get($product->get_price_html()); 6?></p>

のような行を分けて見るとわかりやすくなります。
もしくは

PHP

1printf('<p class="%s">%s%s</pa>', 2esc_attr( apply_filters( 'woocommerce_product_price_class', 'price' ) ), 3$product->get_price_html(), 4get($product->get_price_html()) 5);

のような処理でもよいかもしれません。

投稿2019/09/24 02:29

yambejp

総合スコア114784

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

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

135

2019/09/24 04:08

回答ありがとうございます。 試しにコードをコピーして実行してみたところ、$product->get_price_html()は文字列として出力されているようでしたので以下のようにコードを書き換えました。 ```php <?php function get($hoge){ $num = intval($hoge); $result = 1.2 * $num; var_dump($result); } <p class="<?php echo esc_attr( apply_filters( 'woocommerce_product_price_class', 'price' ) );?>"><?php $product->get_price_html(), get($product->get_price_html()); </p> ``` すると値段の下にFLOAT(0)が出てきました。 なぜ0になってしまうのでしょうか?ご回答いただけましたら幸いです。
yambejp

2019/09/24 04:11

> FLOAT(0) と表示されるなら、デバッグ処理でvar_dump的なことをしているのでは? get()がどういう挙動をするかわからないのでなんとも・・・
135

2019/09/24 04:18

get()はただ$product->get_price_html(),に格納されている値に1.2をかけるための関数を想定しております。 またおっしゃる通り、var_dumpで出力しているのでFLOATがつくのは構わないのですが本当は例えば $product->get_price_html()が100だとするとFLOAT(120)と表示させたかったです。
yambejp

2019/09/24 04:21

get_price_htmlが何か引数をうけるんじゃないですか?
135

2019/09/24 04:31

恥ずかしながら今引数を受けると0になるのを知りました。 只今ファイルを確認してまいります。
135

2019/09/24 05:21 編集

yambejp様のおっしゃる通り、引数を受けておりました。 public function get_price_html( $deprecated = '' ) { if ( '' === $this->get_price() ) { $price = apply_filters( 'woocommerce_empty_price_html', '', $this ); } elseif ( $this->is_on_sale() ) { $price = wc_format_sale_price( wc_get_price_to_display( $this, array( 'price' => $this->get_regular_price() ) ), wc_get_price_to_display( $this ) ) . $this->get_price_suffix(); } else { $price = wc_price( wc_get_price_to_display( $this ) ) . $this->get_price_suffix(); } return apply_filters( 'woocommerce_get_price_html', $price, $this ); } この場合どのようにすれば$product->get_price_html()で得た値に1.2をかけて出力するという関数を設定できますでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問