对函数进行排序和优化

时间:2014-09-18 作者:Jon C

我一直在努力构建一些功能,以便在我的网站上显示产品。这些产品的价格是根据许多变量计算的。

我认为第一组函数可以工作,但我不确定调用这些函数以防止多次数据库调用的最佳位置。我不确定这些函数是否仅仅通过在函数文件中设置来缓存值,或者是否应该在头文件或其他地方调用它们。

编辑:虽然我觉得我有很多对数据库的调用,包括所有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).

    如果有一种更简单的方法可以减少数据库调用,请告诉我。

  • 1 个回复
    SO网友:Mark Kaplun

    如果您认为发出的DB请求太多,则需要重新组织存储数据的方式,以提高效率。

    如果您使用正确的缓存类型,它甚至可能是完全相关的。如果您的访问者通常没有登录,那么W3TC、超级缓存或其他插件所做的完整页面缓存将消除这种担忧。即使没有,使用对象缓存的结果缓存也可能会缓解问题。

    结束

    相关推荐

    theme functions (hooks)

    WordPress已经提出了这个问题,但没有答案。我只是想在这个论坛上试试,如果有人知道的话,因为我也有同样的问题。要使用jquery滑块编辑我的主题,如何转到该脚本?,显示“$主题->挂钩(\'content\\u before\');”在content div标记中。有人能帮忙吗?我的主题索引。php包含以下内容<div id=\"main\"> <?php $theme->hook(\'main_before\'); ?> &#x