非WooCommerce页面中的WC_GET_PRODUCT

时间:2018-07-31 作者:Omer

我正在创建一个新的短代码,我想在类似于评论的页面中显示有关产品的一些详细信息。

如果我做对了-我只能用wc_get_product 如果当前页面正在使用WooCommerce插件。由于这是一个帖子页面,它不包含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 个回复
SO网友:Jacob Peattie

如果我做对了-我只能用wc_get_product 如果当前页面正在使用WooCommerce插件。由于这是一个帖子页面,它不包含WooCommerce插件,因此我不能使用wc_get_product.

(如果我错了,请纠正我-我是来学习的:D)

你错了:D。

关于插件在这里的工作方式,存在一个根本性的误解。页面不“包含”插件。插件安装在站点级别,因此重要的是插件是否安装在站点上。

所以你没有理由不使用wc_get_product() 只要安装了WooCommerce,就可以在任何地方使用。您可以将其ID传递给wc_get_product() 要在任何页面上获取产品详细信息,请执行以下操作:

$product = wc_get_product( 12 ); // Assuming the ID is 12.
echo $product->get_sku();
EDIT: 根据对问题的编辑,问题变得显而易见:问题是get_product_info.php 文件只是一个单独的PHP文件。它甚至没有加载WordPress,更不用说WooCommerce了。请参阅the documentation 了解如何在WordPress中执行AJAX。

结束

相关推荐

在插件中执行AJAX调用后修改元标签

我有一个插件,可以通过检查URL中的查询变量自动从新闻发布者加载文章。如果请求了一篇文章,它会对此发布者进行AJAX调用,创建新的WP\\U帖子并将其加载到模板中。我需要在这个页面中添加open graph元标记,我不知所措。我的第一次失败尝试是一次普通尝试:add_action( \'wp_head\', \'insert_fb_in_head\', 5 ); 从函数。php的主题,我原本希望从我的构建帖子中获取信息,但事实证明global $post 返回的NULL 在这种特殊情况下。所以我