web-dev-qa-db-ja.com

WooCommerceは実際の店舗アドレスを取得します

WooCommerceの管理設定(/wp-admin/admin.php?page=wc-settings)には、店舗の住所(番地、市、国)を設定するためのフィールドがいくつかあります。

これをテーマのテンプレートから取得する方法を教えてください。そのような情報をテーマにハードコーディングしたくはありません。

2
Buzut

店舗の物理アドレス(および他の多くの設定)は、WPのオプションテーブル(wp_options、 "wp_"はサイトで使用されているテーブルプレフィックス)に格納されます。

オプション名は以下のとおりです。

  • woocommerce_store_address
  • woocommerce_store_address_2
  • woocommerce_store_city
  • woocommerce_store_postcode
  • woocommerce_default_country

難しいのは、woocommerce_default_countryの値です。設定の[国/州]ドロップダウンセレクターでの選択に応じて、国と州/県の情報が保存されます。国だけの場合は国コードになりますが、国の「プラス」の場合はコロン「:」で区切られます(「US:IL」など)。

したがって、以下は米国の住所の一般的なやり方です。他の国/地域は、(1)woocommerce_default_country値に含まれるもの(単なる国の場合もあります)、および(2)情報の出力方法によって多少異なる場合があります。

// The main address pieces:
$store_address     = get_option( 'woocommerce_store_address' );
$store_address_2   = get_option( 'woocommerce_store_address_2' );
$store_city        = get_option( 'woocommerce_store_city' );
$store_postcode    = get_option( 'woocommerce_store_postcode' );

// The country/state
$store_raw_country = get_option( 'woocommerce_default_country' );

// Split the country/state
$split_country = explode( ":", $store_raw_country );

// Country and state separated:
$store_country = $split_country[0];
$store_state   = $split_country[1];

echo $store_address . "<br />";
echo ( $store_address_2 ) ? $store_address_2 . "<br />" : '';
echo $store_city . ', ' . $store_state . ' ' . $store_postcode . "<br />";
echo $store_country;

これは確かにかなり要約され、よりきれいにされることができます、しかし私は明快さのためにコードで冗長でした。

また、店舗の場所などに応じて、国/州の情報をまったく含めたくない場合や、保存した値に基づいて出力内容を変更したい場合があります。例えば、米国の住所の場合、国は「米国」ではなく「米国」であり、州情報は省略されたメールコード(すなわちイリノイの場合は「IL」)である。そのため、実際の値とそれをどのように使用するつもりなのかによって、出力に使用する値が決まります。 (それが理にかなっていることを願っています。)

3
butlerblog

上記のget_option()メソッドの代わりに、WooCommerce WC()のメインインスタンスを介して組み込み関数を使用し、それによって WC_Countries クラスのメソッドにアクセスすることをお勧めします。

WC()->countries->get_base_address();
WC()->countries->get_base_address_2();
WC()->countries->get_base_city();
WC()->countries->get_base_postcode();
WC()->countries->get_base_state();
WC()->countries->get_base_country();

1つは、情報が格納される場所が変わる可能性があるということですが、それを取得する方法は変わりません。そして次に、プラグインがフィルタを使って値を変更した場合。 source を見ると明らかになります。

public function get_base_address() {
    $base_address = get_option( 'woocommerce_store_address', '' );
    return apply_filters( 'woocommerce_countries_base_address', $base_address );
}

追加情報:

2
passatgt

WooCommerceには、ショップ(または他の)URLを返すための特別な機能はありません(少なくとも私が知っていること)。しかし、名前でページIDを取得する関数wc_get_page_id()があり、そのIDはWPのget_permalink()関数でURLを返すために使用できます。

ここではいくつかの例を示します。

ショップページのURL:

echo get_permalink( wc_get_page_id( 'shop' ) );

カートページのURL:

echo get_permalink( wc_get_page_id( 'cart' ) );

チェックアウトページのURL:

echo get_permalink( wc_get_page_id( 'checkout' ) );

マイアカウントページのURL:

echo get_permalink( wc_get_page_id( 'myaccount' ) );

1
butlerblog