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

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

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

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

PHP

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

Q&A

解決済

1回答

2238閲覧

WoocommerceのShip to a different addressの設定について

Biocerveau

総合スコア17

WordPress

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

PHP

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

0グッド

0クリップ

投稿2018/09/17 15:43

編集2018/09/20 12:09

質問

特定の商品が選択された場合に、チェックアウトページに表示される"Ship to a different address?"を非表示にしたいのですが、どうしたらいいでしょうか?

試してみたこと

function.phpにて

add_filter( 'woocommerce_cart_needs_shipping_address', '__return_false');

を追加し、どの商品が追加されてもship to a different address?が表示されないように設定し、その上でif文を用いて表示/非表示を切り替えようとしましたが、上記のコードを追加してもブラウザでの表示になんの変化もありませんでした。

他に参考になりそうなページ(英文)

完全にship to a different address?を取り除く場合
ユーザーによってship to a different address?の表示/非表示を切り替える場合

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

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

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

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

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

回答1

0

ベストアンサー

質問の修正依頼欄は、画像の添付ができないので、回答欄で...


その1行の追加だけで OK です。

テストサイトのfunctions.php の一番最後に

add_filter( 'woocommerce_cart_needs_shipping_address', '__return_false');

を追加してみました。

追加すると 「アカウントを作成しますか」と「注文メモ」の間にあった「別の住所へ配送しますか? □」の部分が消えています。

追加しても、消えてないとすれば、キャッシュなどの影響が考えられますので、キャッシュをクリアするとか、別の Web ブラウザで確認するとか試してみてください。

#追加後
追加後

(参考) #追加前
追加前


(コメントに対しての追記 2018.09.19 21:06)

function unset_different_shipping_address(){
if (wc_商品1_is_in_the_cart()) {
add_filter( 'woocommerce_cart_needs_shipping_address', '__return_false');
}
}

functions.php に 上記のプログラムを記載したとと書かれていますが、これは、function を定義しただけで実行されたわけではありません。

function で定義したものは、「テーマ内で関数を呼び出して実行する」か「フックを使って実行する」必要があります。

今回は、アクションフックを使うほうになります。
add_action を使って、定義したファンクションをどのタイミングで実行させるのかを指定します。

ドキュメントを読んでもらえば分かる通り、アクションフックはいろいろあるのですが、プラグインの初期化は、通常 init で行われることが多いので、プラグインの動作変更であれば、init か その次の wp_loaded あたりになると思います。
今回は、 init の一番最後の方で実行されるようにしたいと思いますので、優先順位を 99 にして下記のように記載します。

add_action( 'init', 'unset_different_shipping_address', 99 );

最終的には、上記のプログラムにadd_action を1行追加して、

function unset_different_shipping_address(){ if (wc_商品1_is_in_the_cart()) { add_filter( 'woocommerce_cart_needs_shipping_address', '__return_false'); } } add_action( 'init', 'unset_different_shipping_address', 99 );

の内容を functions.php に記載します。

参考情報

投稿2018/09/18 09:14

編集2018/09/19 12:32
CHERRY

総合スコア25171

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

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

Biocerveau

2018/09/19 10:28

回答ありがとうございます。 最初function.phpの中途半端なところに挿入していたので動作しなかったのでしょうか・・・ 一番最後に入れてみると、無事動作しました。 Ship to different addressを非表示にしたいのは、一つの商品のみなので、 function unset_different_shipping_address(){ if (wc_商品1_is_in_the_cart()) { add_filter( 'woocommerce_cart_needs_shipping_address', '__return_false'); } } というふうにコードを記述してみたのですが、反応しませんでした・・・ ちなみに、function wc_商品1_is_in_the_cartの中身は、下記のとおりです。 function wc_商品1_is_in_the_cart() { // Add your special product IDs here $ids = array( '100', '101', '102', );; // Products currently in the cart $cart_ids = array(); // Find each product in the cart and add it to the $cart_ids array foreach (WC()->cart->get_cart() as $cart_item_key => $values) { $cart_product = $values['data']; $cart_ids[] = $cart_product->id; } // If one of the special products are in the cart, return true. if (!empty(array_intersect($ids, $cart_ids))) { return true; } else { return false; }
CHERRY

2018/09/19 12:34 編集

長くなったので、回答欄に追記しました。 要点としては、ファンクションの実行タイミングを指定する add_action が足りませんので、記載したファンクションは、実行されていません。
Biocerveau

2018/09/20 08:16

いつもありがとうございます。 何度もすみません、、ご教示いただいたプログラムを追加してみるとサイト自体は希望のとおりうまく動作したのですが、wp管理画面がエラーになってしまいました。なぜなのでしょうか・・・
CHERRY

2018/09/20 08:23

ログには、どのようなエラーがでていますか?
CHERRY

2018/09/20 08:47 編集

500エラーということは、なにかと競合しているか 文法的に間違った記述があるということですね。 Webサーバーのエラーログに 具体的にどのファイルの何行目とかの情報も残っていると思うのですが、エラーログを確認することは可能でしょうか?
Biocerveau

2018/09/20 09:08

(的外れだったらすみません、、)開発環境がPHPStormなのですが、Code > Inspect codeでチェックできるものですか?
CHERRY

2018/09/20 09:21

PHPStorm ということは、設定 の フレームワークあたりに リモートサーバーの設定があったと思いますが、リモートサーバーを設定して確認されていたわけではないのでしょうか? リモートサーバーを設定しているのであれば、リモートサーバーにターミナル等のコマンドラインから、ログインすれば、Webサーバーのエラーログの確認はできると思います。
Biocerveau

2018/09/20 10:31 編集

実は、以前別の人がやっていた仕事を、わずかな経験を頼りに手探り状態で引き継いだかたちでやっておりまして、、どのような設定がされていたかも知らず、エラーログの確認等もしたこともなかったのです・・・ とりあえず、自分でも調べてみます。
Biocerveau

2018/09/25 14:24 編集

こんにちは。 このページ→ http://www.ams.eng.osaka-u.ac.jp/user/ishihara/?p=496 を参考に、エラー内容の確認ができました。 エラー内容は、以下の通りでした。 "Notice: get_cart was called incorrectly. Get cart should not be called before the wp_loaded action. Please see Debugging in WordPress for more information. (This message was added in version 2.3.) in .../wp-includes/functions.php on line 4161" ちなみに、/wp-includes/functions.phpの4161行目あたりには以下のような記述があります。 function is_lighttpd_before_150() { $server_parts = explode( '/', isset( $_SERVER['SERVER_SOFTWARE'] )? $_SERVER['SERVER_SOFTWARE'] : '' ); $server_parts[1] = isset( $server_parts[1] )? $server_parts[1] : ''; return 'lighttpd' == $server_parts[0] && -1 == version_compare( $server_parts[1], '1.5.0' );
CHERRY

2018/09/25 14:19

うーん。 Notice であれば、動作しないことないと思うのですが... PHPStorm の環境は、こちらでは確認できないので、環境依存であれば、ちょっとわかりません。
Biocerveau

2018/09/25 14:25

ちなみに、initの代わりに ①wp_loadedにすると、initと同じ結果でした ②admin_menuにすると、function.phpに記述したプログラムが実行されなくなってしまいました
Biocerveau

2018/09/26 09:44

動作はしてるんですよね・・ただ問題は、WPログイン画面に入ろうとすると500エラーが出てしまうんです。 ログイン画面ではなく、普通にサイトを閲覧する分には正常に動作しているんです
CHERRY

2018/09/26 09:58 編集

functions.php に今回追加した フックの `add_action( 'init', 'unset_different_shipping_address', 99 ); ` を コメント (行頭に # をつける) にして、wordpress に読み込ませないようにすると ログインしても 500 エラーは出なくなるのでしょうか?
Biocerveau

2018/09/26 10:19

はい、先日 // をつけてadd_actionを読み込ませないようにすると500エラーが出なくなりました。
Biocerveau

2018/09/27 12:52

レスが長くなってしまったので、新規で質問を投稿してみました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問