如何在循环中使用自定义字段编写简单的计算?

时间:2013-09-02 作者:pendjer

我正在构建一个包含大量自定义字段的网站,需要实现几个自定义字段,这些自定义字段将使用其他自定义字段的值自动计算值。我需要在这些计算中使用的所有文件都在循环中,所以我希望在函数中使用挂钩。php。

有人能给我举几个例子,说明如何用一些简单的计算编写过滤器,以便我可以继续为需要解决的不同问题编写过滤器,例如:

<小时>

Example 1: Sum 2 Numbers

Custom Field 1: product_price
Custom Field 2: addon_price
Custom Field 3: price_total

Formula:

price_total = product_price + addon_price
<小时>

Example 2: Add commision on price

Custom Field 1: product_price
Custom Field 2: tax_commision - [%]
Custom Field 3: price_total

Formula:

price_total = product_price + ( tax_commision / 100 ) * product_price

2 个回复
最合适的回答,由SO网友:birgire 整理而成

定义自己的模板标记一个想法是使用模板标记:

<?php the_price();?>

<?php the_price( \'%.1f\' );?>
根据您的需要更改格式。

然后,您可以根据需要向其中添加过滤器。

在您的functions.php 可以添加的文件

// setup the price filters:
add_filter( \'the_price\' , \'xyz_add_product_price\',      1, 1 );
add_filter( \'the_price\' , \'xyz_add_commission\',         2, 1 );
add_filter( \'the_price\' , \'xyz_add_shipping\',           3, 1 );
使用优先级控制计算顺序。

这个xyz_ 只是一个可以更改的前缀。

模板标记的定义如下所示:

/**
* Template tag to display the price
* @param  string $d Output format
* @return void
*/
function the_price( $d = \'\' ){
    echo get_the_price( $d );
}
其中:

/**
* Template tag to return the price
* @param  string $d     Output format
* @return number $price Price
*/
function get_the_price( $d = \'\' ){

        $price = apply_filters( \'the_price\', 0 );

        if( empty( $d ) )
                $d =  \'%.2f\'; // with 2 decimals

        return sprintf( $d, $price );
}
检查这些模板标记是否已经存在function_exists() 或者使用其他自定义前缀。

添加价格过滤器您的第一个价格过滤器可能是添加产品价格:

/**
* Price filter #1
* Add product price 
* @param number $price
* @return number $price
*/
function xyz_add_product_price( $price ) {

        $product_price  = get_post_meta( get_the_ID(), \'product_price\', TRUE );

        if( ! empty(  $product_price ) ){

                // convert the values from string to int/float:
                $product_price = 1 * $product_price;

                // add product price:
                return ( $price + $product_price );
        }else{
                return $price;
        }
}
第二个是税务委员会:

/**
* Price filter #2
* Add tax commission to the product price
* @param number $price
* @return number $price
*/
function xyz_add_commission( $price = 0 ) {

    $tax_commision  = get_post_meta( get_the_ID(), \'tax_commision\', TRUE );

    if( ! empty(  $tax_commision ) ){
            // convert the values from string to int/float:
            $tax_commision = 1 * $tax_commision;

            // calculate the commision and add to the price:
            return ( $price  + ( $tax_commision / 100 ) * $price ) ;
    }else{
            return $price;
    }
}
最后是第三笔运费:

/**
* Price filter #3
* Add shipping fee to the product price
* @param number $price
* @return number $price
*/

function xyz_add_shipping( $price ) {
       $shipping_fee = 10;
       return ( $price + $shipping_fee );
}
。。。以后您可以添加更多内容。

SO网友:eskimo

我真的不明白为什么你有一个带有总价的自定义字段(你是手工填写的吗?)。是否要计算管理区域的总价?我不知道怎么做,但我想你会想在前端显示总价。

如果是这样,那么我将编写一个有2个输入参数的函数,它可以是$product$addon (例如2$product$tax). 然后,您可以使用该函数计算总价并将其显示在前端。

可以在中编写函数functions.php 看起来像这样:

Example 1

function sum_2_numbers($product, $addon){
    $price_total = $product + $addon;
    return $price_total;
}
在要显示总价的页面上:

<?php echo sum_2_numbers(get_post_custom(\'product_price\'), get_post_custom(\'addon_price\')); ?>

Example 2

function commission($product, $tax){
    $price_total = $product + ($tax / 100) * $product;
    return $price_total;
}
在要显示总价的页面上:

<?php echo commission(get_post_custom(\'product_price\'), get_post_custom(\'tax_commission\')); ?>

结束

相关推荐

Apply_Filters()和_Excerpt提供了意外的结果

我觉得我一定错过了一些显而易见的东西,但我似乎无法让WordPress合作。我正在用一个函数生成Facebook OG标签。除了摘录,一切都很好。自get_the_excerpt($post->ID), 有没有其他方法可以创建摘录而不必创建一个全新的循环?我觉得这太过分了。我的第一反应是apply_filters():$description = apply_filters(\'the_excerpt\', get_post($post->ID)->post_content);