web-dev-qa-db-ja.com

none woocommerceページのwc_get_product

レビューのようなページに製品に関する詳細を表示する新しいショートコードを作成しています。

うまくいけば-現在のページがWooCommerceプラグインを使用している場合にのみwc_get_productを使用できます。投稿ページなので、WooCommerceプラグインが含まれていないため、wc_get_productを使用できません。

(間違っている場合は直してください-学ぶためにここにいます:D)

ページ上のIDで製品の詳細を取得する方法はありますか?

ありがとう!

EDIT:

私はこのコードを属性付きのショートコードとして使用しています:

<?php

// Add custom Theme Functions here
// 

function gear_guide_product_view( $atts ) {
    $a = shortcode_atts( array(
        'id' => '0'
    ), $atts );
    echo var_dump(wc_get_product($a["id"]));
    wp_register_script( 'load_product_info' , '/wp-content/themes/theme-child/js/test.js' , array( 'jquery' ) );
    wp_enqueue_script( 'load_product_info' );
    wp_localize_script( 'load_product_info' , 'ids' , $atts);
}

add_action( 'woocommerce_loaded', 'my_function_with_wc_functions' );

add_shortcode( 'fsg' , 'gear_guide_product_view' );

これにより、jsスクリプトが呼び出されます。

function load_product_info() {
    jQuery.ajax({
        type: 'POST',
        url: '/wp-content/themes/theme-child/js/controllers/get_product_info.php',
        data: ids,
        dataType: 'json',
        success: function (data) {
            console.log(data);
        },
        error: function () {
            console.log("Failed to get data!");
        }
    });
}
load_product_info();

そして、そのajax関数は次のコントローラーを呼び出します。

<?php
    if (isset($_POST["id"])) {
        $product_id = $_POST["id"];
        $product = wc_get_product($product_id);
        echo json_encode($product);
    } else {
        echo "Nothing to return!";
    }
?>
1
Omer

うまくいけば-現在のページがWooCommerceプラグインを使用している場合にのみwc_get_productを使用できます。投稿ページなので、WooCommerceプラグインが含まれていないため、wc_get_productを使用できません。

(間違っている場合は直してください-学ぶためにここにいます:D)

あなたは間違っています:D。

ここでプラグインがどのように機能するかについて根本的な誤解があります。ページにはプラグインが「含まれません」。プラグインはシットレベルでインストールされるため、重要なのはプラグインがsiteにインストールされているかどうかです。

したがって、WooCommerceがインストールされている限り、wc_get_product()をどこでも使用できなかった理由はありません。次のように、IDをwc_get_product()に渡して、任意のページで製品の詳細を取得できます。

$product = wc_get_product( 12 ); // Assuming the ID is 12.
echo $product->get_sku();

EDIT:質問の編集に基づいて、問題が明らかになります。問題は、get_product_info.phpファイルがPHPであるということです。単独で座っているファイル。 WooCommerceはもちろんのこと、WordPressをロードすることすらありません。 WordPressでAJAXを実行する方法については、 ドキュメント を参照してください。

1
Jacob Peattie