Sziasztok!
Már napok óta küszködök a Wordpress Charitable pluginnel.
Lényeg, hogy amikor Jóska rábök a Támogatás gombra az adományozói űrlapon, akkor lefusson egy ellenőrzés, hogy a beírt összeget hozzáadva az eddig összegyűlthöz, megnézze, összegyűlt-e a célösszeg.
Ehhez írtam az alábbi sorokat egy Facebook-os WP csoporttag segítségével:
//Valóra vált a cél.
function modositsuk_a_kategoriat($donation_id, $donation_processor){
$campaign = $donation_processor->get_campaign();
/* elérte-e a kampány a célját */
$endtime_timestamp=(strtotime(get_field('expire_campaign')));
$now=strtotime(date("Y-m-d H:i:s"));
if ( $_POST['donated_amount']+$campaign->get_donated_amount() >= $campaign->get_goal() OR $now >= $endtime_timestamp) {
$campaign_id = $campaign->__get('ID');
$category = array( 103 ); // ez a kategória azonosítója, amelybe a kategóriát át akarjuk helyzeni
wp_set_post_terms( $campaign_id, $category, 'campaign_category', false );
}
}
add_action('charitable_after_save_donation','modositsuk_a_kategoriat',99,2);
A gond az, hogy ha összegyűlt a pénz, ha nem, mindenképpen átkerül a 103 ID-el rendelkező csoportba a kampány.
Itt lehet megnézni, miről beszélek: http://www.sandbox.tegyjot.hu/gyujtes/eszter-nazarov-mutetre-gyujt/
Köszönöm előre is a segítséget!
- 1054 megtekintés
Hozzászólások
Tipp:
if ( (int) $_POST['donated_amount']+
- A hozzászóláshoz be kell jelentkezni
Nekem az gyanús benne, hogy nem látszik, hogy az expire_campaign honnan jön (ha egyáltalán jön :)).
(és, hogy a plugin mindenhol get_donated_amount(true) azaz a sanitized értékével számol. ;))
- A hozzászóláshoz be kell jelentkezni
Az expire_campaign egy ACF mező, aminek a típusa datetime, és éééé-hh-nn óó-pp-mm formában tér vissza egy dátum-idő párossal.
Azzal nincs gond szerintem.
--
-- GKPortál Blog
Tégy Jót!®
Legyen neked is Dropbox tárhelyed! :)
- A hozzászóláshoz be kell jelentkezni
Szerintem azért lehet, mert ha jól láttam akkor a támogatás gomb egy formra és kitöltés után egy köszönöm oldalra. A get_field pedig nem kap post_id-t így lehet nem azt olvassa amit te szeretnél. (értsd gondolom nem az adománynak van lejárati ideje, hanem magának a kampánynak és jó eséllyel az előbbi id-jét kapja meg :))
Próbáld meg kiíratni az értékeket, JS konzolba vagy egy fileba és kiderül:
file_put_contents(
dirname(__FILE__)."/whatshappening.log",
$_POST['donated_amount']."+".
$campaign->get_donated_amount().">=". $campaign->get_goal()."OR".$now.">=".$endtime_timestamp);
- A hozzászóláshoz be kell jelentkezni
Jól gondoltam, hogy a $_POST['donated_amount'] értéke üres, de, miért?
--
-- GKPortál Blog
Tégy Jót!®
Legyen neked is Dropbox tárhelyed! :)
- A hozzászóláshoz be kell jelentkezni
Nem tudom, de ott már elvileg el van mentve az adomány.
Ha jól olvasom a plugin kódját ezzel azt kapod vissza:
$donation = new Charitable_Donation( $donation_id );
$donated_amount=$donation->get_total_donation_amount();
- A hozzászóláshoz be kell jelentkezni
A helyes megfejtés: $_POST['donation_amount']
Még a campaign_expire változóval van bajom:
$now=2017-02-25 10:57:42
$campaign_expire=1970-01-01 (zanzásítva másoltam az értékeket)
A gond, hogy a $campaign_expire értéke elméletileg 2017-03-01 00:00:00 -re van beállítva.
Ebben ha tudnál/tudnátok még segíteni, sínen lennék.
--
-- GKPortál Blog
Tégy Jót!®
Legyen neked is Dropbox tárhelyed! :)
- A hozzászóláshoz be kell jelentkezni
Az szerintem azért van mit amit fent írtam. Mi történik, ha a campaign idt átpasszolod neki?
$campaign = $donation_processor->get_campaign();
$campaign_id = $campaign->__get('ID');
$endtime_timestamp=(strtotime(get_field('expire_campaign',$campaign_id)));
- A hozzászóláshoz be kell jelentkezni
Sajnos ez se nyert, amúgy ezzel próbálkoztam, semmi változás.
--
-- GKPortál Blog
Tégy Jót!®
Legyen neked is Dropbox tárhelyed! :)
- A hozzászóláshoz be kell jelentkezni