WooCommerce从产品标题中获取产品对象

时间:2017-07-25 11:41:54

标签: php wordpress woocommerce product page-title

我正在制作一个代码来从产品标题中获取产品对象。 我正在从我的记事本文件中读取产品标题并将其传递给Wordpress函数。

以下是<script> var handler = StripeCheckout.configure({ key: 'pk_test_mykey', image: 'https://stripe.com/img/documentation/checkout/marketplace.png', locale: 'sv', token: function(token) { // You can access the token ID with `token.id`. // Get the token ID to your server-side code for use. } }); document.getElementById('customButton').addEventListener('click', function(e) { stripe_spots = document.getElementById("spots").value; stripe_total = (stripe_spots) * 70; // Open Checkout with further options: handler.open({ name: 'Revy!', description: stripe_spots + " platser", zipCode: true, currency: 'sek', amount: stripe_total * 100 }); e.preventDefault(); }); // Close Checkout on page navigation: window.addEventListener('popstate', function() { handler.close(); }); </script> 是产品标题的功能。

$pval

产品标题是这样的: $productdetail_by_title = get_page_by_title($pval, OBJECT, 'product'); print_r($productdetail_by_title); exit;

但我无法获得产品对象。如果我静静地通过这个标题:

200x Slopupovací pleťová Rusk

然后我就能得到产品对象。请帮忙。

1 个答案:

答案 0 :(得分:2)

使用get_page_by_title() WordPress功能,您将无法获得WC_Product对象,但如果它正常工作,您将获得WP_Post对象。

所以这是一个自定义构建的函数,如果标题与实际产品标题匹配,将输出WC_Product对象:

function get_wc_product_by_title( $title ){
    global $wpdb;

    $post_title = strval($title);

    $post_table = $wpdb->prefix . "posts";
    $result = $wpdb->get_col("
        SELECT ID
        FROM $post_table
        WHERE post_title LIKE '$post_title'
        AND post_type LIKE 'product'
    ");

    // We exit if title doesn't match
    if( empty( $result[0] ) ) 
        return;
    else
        return wc_get_product( intval( $result[0] ) );
}

代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。

示例用法:

// Your title set in a variable
$title = "200x Slopupovací pleťová Rusk";

// Using our custom function to get an instance of the WC_Product object
$product_obj = get_wc_product_by_title( $title );

// Testing the output
print_r($product_obj);

此代码在WooCommerce 3+上进行测试并正常运行。