从 woocommerce 3 中的一个孩子那里获取分组产品 link
Get the grouped product link from one of it's childs in woocommerce 3
在 woocommerce 2.3 中,单个产品 post_parent 是分组产品的一部分。所以可以通过以下方式 link 他们:
function parent_permalink_button() {
global $post;
if( $post->post_parent != 0 ){
$permalink = get_permalink($post->post_parent);
echo '<a class="button" href="'.$permalink.'">Link to Parent</a>';
}
}
随着 woocommerce 3.0.0 更新,情况发生了变化。其实现在正好相反。分组产品有其 _children。
如何创建 link 从单个产品到其分组?它可以是更多分组产品的一部分,因此可以有多个 link(但我的商店不是这种情况)
谢谢米哈尔
可以通过这种方式为 WooCommerce 3+ 构建该功能:
(带有可选的 $post_id
参数)
/**
* Get a button linked to the parent grouped product.
*
* @param string (optional): The children product ID (of a grouped product)
* @output button html
*/
function parent_permalink_button( $post_id = 0 ){
global $post, $wpdb;
if( $post_id == 0 )
$post_id = $post->ID;
$parent_grouped_id = 0;
// The SQL query
$results = $wpdb->get_results( "
SELECT pm.meta_value as child_ids, pm.post_id
FROM {$wpdb->prefix}postmeta as pm
INNER JOIN {$wpdb->prefix}posts as p ON pm.post_id = p.ID
INNER JOIN {$wpdb->prefix}term_relationships as tr ON pm.post_id = tr.object_id
INNER JOIN {$wpdb->prefix}terms as t ON tr.term_taxonomy_id = t.term_id
WHERE p.post_type LIKE 'product'
AND p.post_status LIKE 'publish'
AND t.slug LIKE 'grouped'
AND pm.meta_key LIKE '_children'
ORDER BY p.ID
" );
// Retreiving the parent grouped product ID
foreach( $results as $result ){
foreach( maybe_unserialize( $result->child_ids ) as $child_id )
if( $child_id == $post_id ){
$parent_grouped_id = $result->post_id;
break;
}
if( $parent_grouped_id != 0 ) break;
}
if( $parent_grouped_id != 0 ){
echo '<a class="button" href="'.get_permalink( $parent_grouped_id ).'">Link to Parent</a>';
}
// Optional empty button link when no grouped parent is found
else {
echo '<a class="button" style="color:grey">No Parent found</a>';
}
}
代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。
在 WooCommerce 3+ 中测试和工作
用法:(2 例)
1) 不使用可选参数 $post_id
例如直接在产品模板中:
parent_permalink_button();
2) 到处使用函数,定义它的参数 $post_id
:
$product_id = 37; // the product ID is defined here or dynamically…
parent_permalink_button( $product_id );
在 woocommerce 2.3 中,单个产品 post_parent 是分组产品的一部分。所以可以通过以下方式 link 他们:
function parent_permalink_button() {
global $post;
if( $post->post_parent != 0 ){
$permalink = get_permalink($post->post_parent);
echo '<a class="button" href="'.$permalink.'">Link to Parent</a>';
}
}
随着 woocommerce 3.0.0 更新,情况发生了变化。其实现在正好相反。分组产品有其 _children。
如何创建 link 从单个产品到其分组?它可以是更多分组产品的一部分,因此可以有多个 link(但我的商店不是这种情况)
谢谢米哈尔
可以通过这种方式为 WooCommerce 3+ 构建该功能:
(带有可选的 $post_id
参数)
/**
* Get a button linked to the parent grouped product.
*
* @param string (optional): The children product ID (of a grouped product)
* @output button html
*/
function parent_permalink_button( $post_id = 0 ){
global $post, $wpdb;
if( $post_id == 0 )
$post_id = $post->ID;
$parent_grouped_id = 0;
// The SQL query
$results = $wpdb->get_results( "
SELECT pm.meta_value as child_ids, pm.post_id
FROM {$wpdb->prefix}postmeta as pm
INNER JOIN {$wpdb->prefix}posts as p ON pm.post_id = p.ID
INNER JOIN {$wpdb->prefix}term_relationships as tr ON pm.post_id = tr.object_id
INNER JOIN {$wpdb->prefix}terms as t ON tr.term_taxonomy_id = t.term_id
WHERE p.post_type LIKE 'product'
AND p.post_status LIKE 'publish'
AND t.slug LIKE 'grouped'
AND pm.meta_key LIKE '_children'
ORDER BY p.ID
" );
// Retreiving the parent grouped product ID
foreach( $results as $result ){
foreach( maybe_unserialize( $result->child_ids ) as $child_id )
if( $child_id == $post_id ){
$parent_grouped_id = $result->post_id;
break;
}
if( $parent_grouped_id != 0 ) break;
}
if( $parent_grouped_id != 0 ){
echo '<a class="button" href="'.get_permalink( $parent_grouped_id ).'">Link to Parent</a>';
}
// Optional empty button link when no grouped parent is found
else {
echo '<a class="button" style="color:grey">No Parent found</a>';
}
}
代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。
在 WooCommerce 3+ 中测试和工作
用法:(2 例)
1) 不使用可选参数 $post_id
例如直接在产品模板中:
parent_permalink_button();
2) 到处使用函数,定义它的参数 $post_id
:
$product_id = 37; // the product ID is defined here or dynamically…
parent_permalink_button( $product_id );