Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 354 Vote(s) - 3.47 Average
  • 1
  • 2
  • 3
  • 4
  • 5
how to get product attributes from wordpress database

#1
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

![wp_postmeta][1]
![wp-postmeta-example][2]

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


[1]:

[2]:
Reply

#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

Reply

#3
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:

[To see links please register here]


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

**Update**: Later versions of wooCommerce also have a serialized array in wp_options under the _transient_wc_attribute_taxonomies key and a new table called wp_woocommerce_attribute_taxonomies.
Reply

#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'];
}
Reply

#5
Based on [Fütemire][1]'s brilliant answer, this is how to get attributes by post ID

SELECT DISTINCT
p.ID,
t.name AS 'Term Name',
tt.taxonomy AS 'Term Type',
tt.description AS 'Term Description',
(
SELECT
wat.attribute_label
FROM
wp_woocommerce_attribute_taxonomies wat
WHERE
wat.attribute_name LIKE REPLACE(tt.taxonomy, 'pa_', '')
) AS 'Attribute Name'
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.ID = 15870
AND
p.post_type = 'product'
AND
tt.taxonomy LIKE 'pa_%'


[1]:

[To see links please register here]

Reply

#6
if you want to get every attribute as a new column you can add multiple join with filter like;

select
inv_sku.meta_value as sku,
wp.post_title as title,
inv_category.name as category,
inv_subcategory.name as subcategory,
inv_brand.name as brand,
inv_price.meta_value as sale_price
from wp_posts as wp
inner join wp_postmeta as inv_sku on inv_sku.post_id =wp.ID and inv_sku.meta_key ='_sku'
inner join wp_postmeta as inv_price on inv_price.post_id =wp.ID and inv_price.meta_key ='_sale_price'
left join (
select tr.object_id, t.name from wp_term_relationships AS tr
left join wp_term_taxonomy AS tt ON tt.term_taxonomy_id = tr.term_taxonomy_id
left join wp_terms AS t ON t.term_id = tt.term_id
where tt.taxonomy ='pa_brand'
) as inv_brand on wp.ID =inv_brand.object_id
left join (
select tr.object_id, t.name from wp_term_relationships AS tr
left join wp_term_taxonomy AS tt ON tt.term_taxonomy_id = tr.term_taxonomy_id
left join wp_terms AS t ON t.term_id = tt.parent
where tt.taxonomy ='product_cat'
) as inv_category on wp.ID =inv_category.object_id
left join (
select tr.object_id, t.name from wp_term_relationships AS tr
left join wp_term_taxonomy AS tt ON tt.term_taxonomy_id = tr.term_taxonomy_id
left join wp_terms AS t ON t.term_id = tt.term_id
where tt.taxonomy ='product_cat'
) as inv_subcategory on wp.ID =inv_subcategory.object_id
where wp.post_type ='product'

Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through