我一直在努力构建一些功能,以便在我的网站上显示产品。这些产品的价格是根据许多变量计算的。
我认为第一组函数可以工作,但我不确定调用这些函数以防止多次数据库调用的最佳位置。我不确定这些函数是否仅仅通过在函数文件中设置来缓存值,或者是否应该在头文件或其他地方调用它们。
编辑:虽然我觉得我有很多对数据库的调用,包括所有get\\u post\\u meta等等,但我认为我最关心的应该是让这些函数工作起来。目前有些人没有这样做。我知道第一个函数可以工作,但我不确定调用它的最佳位置。(页眉或每页)
所有函数也依赖于另一个函数的值。还有一些我在尝试正确构建时遇到了问题。
我目前也在学习类和方法,并想知道其中一些是否更适合这种格式。如果是这样的话,我需要一些帮助。
以下是我目前的功能。
NOTE: 价值$m_type = get_post_meta(get_the_ID(), \'m_type\', true);
将在模板文件中调用。
从user meta检查客户端级别。我认为这应该在标题中调用,以便全局定义客户端级别。
function get_client_lvl ()
{$user_id = get_current_user_id();
global $client_lvl;
If ($user_id == 0)
{$client_lvl= \'high\';}
Else
{$client_lvl=get_user_meta($user_id, wpcf-client-lvl, true); }
}//End function
用于集合和产品页面,以确定基于客户端级别的计算所使用的乘数值function get_multiplier($client_lvl)
{
$p_high= get_post_meta(get_the_ID(),\'p_high\',\'single\');
$p_med= get_post_meta(get_the_ID(),\'p_med\',\'single\');
$p_low =get_post_meta(get_the_ID(),\'p_low\',\'single\');
if ($client_lvl == \'med\')
{$prices=array(\'high\'=>$p_high,\'med\'=> $p_med);}
elseif ($client_lvl == \'low\')
{$prices=array(\'high\'=>$p_high,\'low\'=> $p_low);}
else
{$prices=array(\'high\'=>$p_high);}
}//End function
这些值将在另一个函数中使用,以限制用户可以为其产品选择的图像数量。$img_min= get_post_meta(get_the_ID(),\'img_min\',\'single\');
$img_max= get_post_meta(get_the_ID(),\'img_max\',\'single\');
这些是用于计算显示价格的公式。我不知道如何处理图像和图像+佣金选项,因为它们使用所选图像的数量来确定价格。但如果没有选择图像,我想让它显示出来“这是价格/图像。我想到的一个想法是在交换机选项中包含echo语句,但我不确定如何处理数组。如果客户端级别较高,则函数将只循环一次,不会有was now价格。但如果是其他任何内容,则它将循环两次,并将有was now echo语句。如果在基于图像的计算,然后was now函数就可以正常工作了。但我不确定这些函数的条件回音放在哪里。function calculate_price($m_type)
{
global $cogs;
$cogs= get_post_meta(get_the_ID(),\'cogs\',\'single\');
$img_cost=10;
$prices= get_multiplier();
Foreach($prices as $multiplier)
{
switch ($m_type) {
case \'Area\':
$area= get_post_meta(get_the_ID(),\'area\',\'single\');
$total[]= $multiplier * $area;
break;
case \'Image\':
if(isset($img_count))
{$total[]= $multiplier * $cogs * $img_count;}
else
{$total[]= $multiplier * $cogs ;} // Displayed as $price/ Image using $img_count
break;
case \'Commission\':
$total[]= $multiplier + $cogs;
break;
case \'Flat\':
$total[]= $multiplier;
break;
case \'Commission+Image\':
if(isset($img_count))
{$total[]= $multiplier + ($img_cost*$img_count);}
else
{$total[]= $multiplier; } //Display "Price: ".$multiplier. "+".$img_cost ." /image"
break;
case \'Price\':
$total[]= $multiplier * $cogs;
break;
}}}
显示上一个函数的价格结果的函数。目前未说明图像或图像+佣金声明。我需要创建一个类似的函数,用于查找特定产品组的最低计算价格,以显示在产品的存档页面上。function was_now($client_lvl,$m_type)
{
$total=calculate_price($m_type);
$p1=number_format($total[0],2,\'.\',\',\');
If ($client_lvl == "high")
{
echo "is \\${$p1}";
}
else {
$p2=number_format($total[1],2,\'.\',\',\');
echo "WAS: \\${$p1}<br/>";
echo "NOW: \\${$p2}";
}}
这是产品页面的子循环,显示该产品的变体。尚未完全编码。(此代码当前显示在模板文件本身中,与函数相对。 function uc_list_product($ID,$m_type)
{
<div claas="clear_left">
<?php
echo $client_lvl."<br/>";
$children= new WP_Query($args);
if($children->post_count > 0) { ?>
<table width="100%" border="0" cellspacing="5" cellpadding="5">
<tbody>
<?php
while ($children->have_posts()) {
$children->the_post();
/* if($m_type==\'Image\'){
$display= \'Price \'. was_now($client_lvl,$m_type);
//if images are selected display price*img count
}
elseif($m_type==\'Commission+Image\'){
$display= \'Price \'. was_now($client_lvl,$m_type);}
//display multiplier, img cost, img count
else
{$display= \'Price \'. was_now($client_lvl,$m_type);}*/
$display= \'Price \'. was_now($client_lvl,$m_type);
echo "<tr>";
echo "<td>". the_title()."</td><td>".$display ."</td><td><a href=\'#\'>Select Product</a></td></tr>" ;
}
echo " </tbody></table>";
wp_reset_query();
}
echo \'</div>\';
我认为这样做的方式是,当用户进入站点时,函数get\\u client\\u lvl()将被调用一次。(如果用户登录,则更改)产品页面调用uc_list_product($ID,$m_type)
, 哪个呼叫was_now($client_lvl,$m_type)
, 哪个呼叫calculate_price($m_type)
, 然后get_multiplier($client_lvl)
.
如果有一种更简单的方法可以减少数据库调用,请告诉我。