有点奇怪,甚至不确定这是可能的,还是有更好的方法。
基本上,我有一个包含各种数据的“工作包”。主要的是名为CV Credits的东西 - 用户必须购买“CV Credits”来查看简历。一旦退出CV Credits,他们必须购买更多。更复杂的是,他们可以同时拥有许多不同的包。
所以我的逻辑是检查每个包,检查第一个并先用掉那里的积分,然后是第二个等等。如果没有,他们必须买 - 跟我一起?
好的,所以这里是我的代码(只收集第一个包中的信息)它是完美的,但是当变量$ how_many_left =“0”时,如何调整代码来检查第二个
PHP
$first = true;
foreach ( $packages as $package ) {
if ( $first ) {
$package = wc_paid_listings_get_package( $package );
$package_id = $package->get_id();
$cv_credit = $wpdb->get_row( "SELECT cv_credit, cv_credit_count, cv_credit_duration, date_purchased, credit_value FROM `wp_wcpl_user_packages` WHERE id = $package_id" );
$amount_of_credits = $cv_credit->cv_credit; // AMOUNT OF CREDITS THE PACKAGE HAS
$how_many_used = $cv_credit->cv_credit_count; // THE AMOUNT THEY HAVE USED
$credit_value = $cv_credit->credit_value; // WHAT THEY HAVE SEEN (COMMA SEPARATED)
$how_many_left = $amount_of_credits - $how_many_used;
$credit_duration = $cv_credit->cv_credit_duration;
$date_purchased = $cv_credit->date_purchased;
$timestamp = strtotime($date_purchased);
$date_purchased_yday = date("d", $timestamp); // day of the year
$dayend = $date_purchased_yday + $credit_duration - 1; // when it ends
$today = getdate();
$today_yday = $today["yday"]; // todays day of the year
$timeleft = $dayend - $today_yday;
if ($timeleft >= "0") {
if ($how_many_left >= "1") {
$createarrayofvalues = explode(',', $credit_value);
if (in_array($post->ID, $createarrayofvalues)) {
?>
<div class="contact-information">
<p>Mobile Number: <?php echo $mobile_number; ?> </p>
<p>Email Address: <?php echo $email; ?> </p>
<p>Links:
<?php the_resume_links(); ?>
</p>
</div>
<?php
} // IF they have paid for the CV before
else {
?> <a href="#" class="et_pb_button cv_credit">View contact information (<?php echo $how_many_left ?> credit/s left)</a> <?php
}
} // how many left
else {
echo "You have no more credits for this package";
}
}// time left on package
else {
}
$first = false;
} // if First
else {
}
}
然后我使用ajax在点击“查看联系信息”按钮时用另一个CV计数和其他信息更新数据库,如果他们有信用并且之前没有查看联系人详细信息。
我希望我有意义,请提出任何问题,因为那里有信息是代码的一部分,但没有必要在这个例子。
确认:我想检查循环中的第一个包 - 一旦没有更多的积分可供使用,我就转到下一个包等等。
提前致谢
答案 0 :(得分:1)
基本上findPackageWithCredits
会查找剩余信用额或返回null
的包。这仍然可以做得更好,但也许它给你一些东西开始;)
<?php
handle($packages);
function handle($packages)
{
global $post;
$package = findPackageWithCredits($packages);
if (null === $package) {
echo "no credits left, buy more!";
return;
}
if (in_array($post->ID, explode(',', $package->credit_value))) {
showContact();
return;
}
showCVInfo($package->cv_credit - $package->cv_credit_count);
}
function findPackageWithCredits($packages)
{
foreach ($packages as $package) {
$db_package = getValidatedDatabasePackage($package);
if (null !== $db_package) {
return $db_package;
}
}
return null;
}
function getValidatedDatabasePackage($package)
{
global $wpdb;
$package = wc_paid_listings_get_package($package);
$package_id = $package->get_id();
$cv_credit = $wpdb->get_row("SELECT cv_credit, cv_credit_count, cv_credit_duration, date_purchased, credit_value FROM `wp_wcpl_user_packages` WHERE id = $package_id");
$amount_of_credits = $cv_credit->cv_credit; // AMOUNT OF CREDITS THE PACKAGE HAS
$how_many_used = $cv_credit->cv_credit_count; // THE AMOUNT THEY HAVE USED
$how_many_left = $amount_of_credits - $how_many_used;
$credit_duration = $cv_credit->cv_credit_duration;
$date_purchased = $cv_credit->date_purchased;
$timestamp = strtotime($date_purchased);
$date_purchased_yday = date("d", $timestamp); // day of the year
$dayend = $date_purchased_yday + $credit_duration - 1; // when it ends
$today = getdate();
$today_yday = $today["yday"]; // todays day of the year
$timeleft = $dayend - $today_yday;
if ($timeleft >= "0" && $how_many_left >= "1") {
return $cv_credit;
}
return null;
}
function showContact()
{
global $mobile, $email, $links;
$message = '<div class="contact-information">
<p>Mobile Number: %s </p>
<p>Email Address: %s </p>
<p>Links: %s
</p>
</div>';
echo sprintf($message, $mobile, $email, $links);
}
function showCVInfo($remaining_credits)
{
$message = '<a href="#" class="et_pb_button cv_credit">View contact information (%s credit/s left)</a>';
echo sprintf($message, $remaining_credits);
}