我正在尝试构建一个wordpress网站,我想在项目购买时显示/隐藏菜单项。通过WooCommerce插件购买该项目。
e.g。如果我购买了一件商品,那么与产品相关的链接应该作为菜单项进入菜单。如果有人能暗示我怎么能这样做。无所谓如果我必须编码或编辑代码,我会。
答案 0 :(得分:1)
由于您的问题不是很明确,我想您希望获得客户购买的所有商品(用户ID)并将其显示为一种列表或菜单。
下面你会发现2个功能。
1)第一个将获得当前客户购买的所有产品ID(带有可选参数 $user_id
)。
2)第二个将显示具有标题和链接的产品的菜单(或列表)......
以下是此代码(在您的活动子主题矿石主题的function.php文件中):
function get_customer_products( $user_id = null ){
if( empty($user_id) && is_user_logged_in() )
$user_id = get_current_user_id();
if( ! empty($user_id) && ! is_admin() ){
$customer_orders = get_posts( array(
'meta_key' => '_customer_user',
'meta_value' => $user_id,
'post_type' => 'shop_order',
'numberposts' => -1,
'post_status' => 'wc-completed', // 'completed' order status
) );
$product_ids = array();
foreach($customer_orders as $customer_order){
$_order = wc_get_order( $customer_order->ID );
foreach($_order->get_items() as $item){
// Avoiding duplicates
if(!in_array($item['product_id'], $product_ids))
$product_ids[] = $item['product_id'];
}
}
return $product_ids;
}
}
function display_customer_product_list(){
// Getting current customer bought products IDs
$product_ids = get_customer_products();
if(!empty($product_ids)){
$output_html = '<div class="custom-product"><ul class="custom-menu">';
foreach( $product_ids as $product_id ){
$product = new WC_Product($product_id);
$output_html .= '<li><a href="'.$product->get_permalink().'">'.$product->get_title().'</a></li>';
}
$output_html .= '</ul></div>';
echo $output_html;
}
}
<强> USAGE 强>
然后你可以在你的主题php模板/文件中随处使用,这样:
display_customer_product_list();
这将输出如下内容:
<div class="custom-product">
<ul class="custom-menu">
<li><a href="http://www.example.com/product/slug1/">Product Title 1</a></li>
<li><a href="http://www.example.com/product/slug2/">Product Title 2</a></li>
<li><a href="http://www.example.com/product/slug3/">Product Title 3</a></li>
</ul>
</div>
使用该材料,您将能够实现您正在查看的内容,重新排列第二个功能,或者只使用活动主题的header.php模板中的第一个...
作为显示隐藏某些现有菜单的条件,您可以使用以下内容:
if(count(get_customer_products()) > 0){
// Displaying customer bought product items
} else {
// Displaying normal menu items
}