我写了以下内容来计算产品页面上的每月付款。基本上,如果贷款金额高于或低于5000,则需要增加管理费,价格将分别增加99或49美元。
然后,我计算了36个月内每月付款的12.99%,并将其输出到产品登录页面。
我使用get_post_meta(get_the_ID(), '_regular_price', true);
来提取产品的价格。
<?php
function FinanceCalc() {
function AddAdminFee() {
$a = get_post_meta(get_the_ID(), '_regular_price', true);
if ($a >= 5000) {
return $a + 99;
} else {
return $a + 49;
}
}
$loanamount = AddAdminFee();
function calcPmt( $amt , $i, $term ) {
$int = $i/1200;
$int1 = 1+$int;
$r1 = pow($int1, $term);
$pmt = $amt*($int*$r1)/($r1-1);
return $pmt;
}
$payment = calcPmt ( $loanamount, 12.99, 36 );
return round($payment*100)/100;
}
$monthlypayment = FinanceCalc();
?>
然后我按照下面的输出价格打电话。由于并非所有产品都需要此计算器,因此仅限于某一类别。
<?php if ( has_term ( 'the-category-term-here', 'product_cat')) {
echo 'Finance this for $' . number_format($monthlypayment, 2) . ' per month';
}
?>
我已将所有这些代码放在content-single-product-default.php
上,但它确实有效。当我尝试在content-product.php
上作为分类结果循环的一部分时,我得到以下错误:
无法在第131行的... / content-product.php中重新声明FinanceCalc()(之前在... / content-product.php:100中声明)
任何线索我做错了什么?关于如何清理它以及是否有更好的方法的任何建议?
我只是通过使用简单的数学和谷歌来搞乱PHP。
我很惊讶那里没有可用的插件。
答案 0 :(得分:1)
您的功能代码需要位于主题的function FinanceCalc() {
$price = get_post_meta(get_the_ID(), '_regular_price', true);
$loanamount = $price >= 5000 ? $price + 99 : $price + 49;
$i = 12.99;
$term = 36;
$int = $i / 1200;
$int1 = 1 + $int;
$r1 = pow($int1, $term);
$payment = $loanamount * $int * $r1 / ($r1 - 1);
return round($payment * 100) / 100;
}
文件中(只需一次),但不能多次出现在不同的模板中。然后,您可以在不同的模板中多次调用它(执行它),而不会出现任何错误消息。请记住,函数只能声明一次。
现在你并不需要在主函数代码中使用子函数,因为它们不会被多次调用...所以你的函数可以这样编写:
<?php if ( has_term ( 'the-category-term-here', 'product_cat')) {
$monthlypayment = FinanceCalc();
echo 'Finance this for $' . number_format($monthlypayment, 2) . ' per month';
} ?>
代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。
现在,在您的模板文件中,您可以调用它并以这种方式执行:
FinanceCalc()
您可以调用<?php if ( has_term ( 'the-category-term-here', 'product_cat')) {
$price = get_post_meta(get_the_ID(), '_regular_price', true);
if( $price >= 1000 ){
$monthlypayment = FinanceCalc();
echo 'Finance this for $' . number_format($monthlypayment, 2) . ' per month';
}
} ?>
函数并以类似的方式在其他模板文件中执行...
更新:将显示限制为特定价格(与评论相关):
string uniqueId="";
Random randomizer = new Random();
for (int i = 0; i < 12; i++)
{
uniqueId+= randomizer.Next(0, 10);
}