how to get product attributes from wordpress database

雨燕双飞 提交于 2019-12-18 12:09:00

问题


Writing custom code to create product detail page with wordpress database.

I have displayed product title, desc, price, stock, etc and got stuck up with product attributes. In the database, _product_attributes is stored in serialized manner in wp_postmeta table in database. And i couldn't unserailize attributes from it. But i found, each attribute value with it own price has been stored in wp_postmeta in some other post_id.

for example, product with post_id=55 has attribute name 'Size value' having values 14 and 18 and price 300 and 350, is displayed as attributes value and price in post_id=110,111

is there any formula behind? Any idea to find this product attribute value and corresponding price value?


回答1:


Product attributes are stored in two locations - in wp_terms, wp_term_taxonomy and wp_term_relationships (that's the first place - each attribute is preceded by pa_ for its taxonomy name - e.g. if you have a color attribute, it's under pa_color) then also as a PHP serialized array in wp_postmeta under '_product_attributes' meta_key.

You can find the method to construct the seriliazed attributes array here:

https://github.com/woothemes/woocommerce/blob/master/includes/class-wc-ajax.php

Look for function save_attributes() and add_attribute to see how the serialized array is constructed.




回答2:


I took a little bit of a different approach, I created a stored procedure in my database that will return all terms associated with a woocommerce product. I decided to go this route because i can call the procedure from my wordpress site and the desktop app I am creating without having to write the function in two different languages.

Though I'd post it here for others to use.

CREATE DEFINER=`database_name_here`@`%` PROCEDURE `get_product_attributes`(IN ProductName TEXT)
BEGIN
SELECT DISTINCT
     p.post_title AS 'Product Name',
     t.name AS 'Term Name',
     tt.taxonomy AS 'Term Type',
     tt.description AS 'Term Description'
FROM
     wp_posts AS p
INNER JOIN
     wp_term_relationships AS tr ON p.id = tr.object_id
INNER JOIN
     wp_term_taxonomy AS tt ON tt.term_taxonomy_id = tr.term_taxonomy_id
INNER JOIN
     wp_terms AS t ON t.term_id = tt.term_id
WHERE
     p.post_title= ProductName
AND
     p.post_type = 'product';
END



回答3:


$args = array( 'post_type' => 'product','' ); $products = get_posts( $args );

     foreach ($products as $product) {
        $data = get_post_meta($product->ID);            
        $pr['regular_price'] = $data['_regular_price']['0'];
        $pr['sale_price'] = $data['_sale_price']['0'];



回答4:


$args = array( 'post_type' => 'product','' ); $products = get_posts( $args );

 foreach ($products as $product) {
    $data = get_post_meta($product->ID);            
    $pr['regular_price'] = $data['_regular_price']['0'];
    $pr['sale_price'] = $data['_sale_price']['0'];


来源:https://stackoverflow.com/questions/22034862/how-to-get-product-attributes-from-wordpress-database

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!