我不知道有多少产品是这样的,但我知道有很多。
在db中;
这个_regular_price
岗位价值(wc产品)高于_price
价值我不知道这是如何或何时发生的,但前端正在显示_price
- 两者中较低的一个。(这很糟糕,我们正在亏损)
我正在尝试运行一个查询,以查找所有这些post_id
以便我可以更新它们。我想更新_price
价值为_regular_price
起初我试过这个;
SELECT post_id
FROM wp_postmeta
WHERE meta_key=\'_regular_price\' > meta_key=\'_price\'
这将返回一个非常长的
post_id
许多重复项,但并不总是一个产品。
然后,我尝试改编stackexchange的不同答案,我想到了这个
SELECT post_id,
post_title
FROM wp_posts
INNER JOIN wp_postmeta
ON post_id = post_id
WHERE post_type = \'product\'
AND meta_key=\'_regular_price\' > meta_key=\'_price\'
但我并不完全理解
inner join
此查询也不会返回所需的结果。
我想我需要join
wp\\U帖子(&U);这里的wp\\U Posteta是因为post_type=\'product\'
将从wp_posts
&;meta_key=\'_regular_price\' > meta_key=\'_price\'
将从wp_postmeta
会是这样吗meta_key=\'_regular_price\'
是否不返回整数?
我的下一个想法是将这些值与函数进行比较,然后根据需要进行更新;
//functions.php
add_action( \'after_theme_setup\', \'benz_update_wc_meta\' );
function benz_update_wc_meta() {
global $woocommerce, $post;
$reg_price = get_post_meta( get_the_ID(), \'_regular_price\', true );
$basic_price = get_post_meta( get_the_ID(), \'_price\', true );
if ( $reg_price > $basic_price ) {
update_post_meta( get_the_ID(), \'_price\', $reg_price );
}
}
或者诸如此类的事情,但也没有运气。
如果你有什么建议,请告诉我。谢谢
我也试过回应
$reg_price = get_post_meta( get_the_ID(), \'_regular_price\', true );
在主题模板woocommerce文件中,这将显示正确的价格,但当您将产品添加到购物车时,仍然使用错误的价格。
最合适的回答,由SO网友:Trent 整理而成
查询没有返回任何有效结果的原因是,您没有比较两个meta\\u键的meta\\u值,而是比较meta\\u键=“x”和meta\\u键=“y”的非数字结果。
SELECT post_id,
post_title
FROM wp_posts
INNER JOIN wp_postmeta
ON post_id = post_id
WHERE post_type = \'product\'
AND meta_key=\'_regular_price\' > meta_key=\'_price\'
您要做的是比较这两个键的meta\\u值。
SELECT
price.post_id,
r_price,
p_price
FROM
(
SELECT
post_id,
CAST(meta_value as SIGNED INTEGER) r_price
FROM
wp_postmeta
WHERE
meta_key = \'_regular_price\'
) regular_price,
(
SELECT
post_id,
CAST(meta_value as SIGNED INTEGER) p_price
FROM
wp_postmeta
WHERE
meta_key = \'_price\'
) price
WHERE
price.post_id = regular_price.post_id
and r_price > p_price
这将为您提供您正在查找的ID。最好是遍历结果集并更新post meta。