【发布时间】:2016-06-06 00:05:31
【问题描述】:
我正在使用一个名为 USP Pro 的插件,它允许用户在我的 Wordpress 网站上发布帖子。按下提交按钮发布他们的帖子后,用户被重定向到 PayPal(而他们提交的帖子被发送到我的 wordpress 帖子部分进行审查和“发布”)。但是,如果用户不支付费用,他们的帖子仍然会被提交,这是需要防止的。我最初通过在提交按钮阶段之前将用户重定向到 PayPal 页面进行付款来克服这个问题,然后将他们重定向回表单以按下提交按钮(这涉及回显表单输入)。但是,由于安全限制,表单包含无法跨多个页面发送的文件上传,因此 PayPal 页面必须在按下提交按钮之后。
这是我的表格:
<form id="usp-form-990" class="usp-form" method="post" enctype="multipart/form-data" action="" data-validate="parsley" data-persist="garlic" novalidate>
<input name="usp-title" type="text" value="" data-required="true" required="required" maxlength="99" placeholder="Post Title" class="usp-input usp-input-title" />
<input name="usp-title-required" value="1" type="hidden" />
<textarea name="usp-content" rows="5" cols="30" maxlength="999" data-required="true" required="required" placeholder="Post Content" class="usp-input usp-input-content"></textarea>
<input name="usp-content-required" value="1" type="hidden" />
<input name="usp-files[]" type="file" maxlength="255" data-required="true" placeholder="File(s)" class="usp-input usp-input-files select-file multiple" multiple="multiple" id="usp-multiple-files" />
<input name="usp-file-limit" class="usp-file-limit" value="20" type="hidden" />
<input name="usp-file-count" class="usp-file-count" value="1" type="hidden" />
<input name="usp-files-required" value="0" type="hidden" />
<input type="submit" class="usp-submit" value="Publish" />
</form>
这是使用的 PayPal 按钮:
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="5F498FHQQGRR2">
<input type="image" src="http://www.aeroex.co.uk/wp-content/themes/vantage/paybutton.gif" border="0" name="submit" alt="PayPal – The safer, easier way to pay online.">
<img alt="" border="0" src="https://www.paypalobjects.com/en_GB/i/scr/pixel.gif" width="1" height="1">
</form>
我不知道这是否会有所帮助,但我发现这段代码可以防止这个确切的问题,但用于另一个名为 Formidable Pro 的表单插件。由于我对 PHP 和一般编码的经验不足,我发现自己无法自定义此代码以满足我的要求。
add_action('frm_payment_paypal_ipn', 'publish_paid_post');
function publish_paid_post($args){
if(!$args['pay_vars']['completed'])
return; //don't publish if the payment was not completed
if(!$args['entry']->post_id)
return; //don't publish if not linked to a post
wp_update_post(array('ID' => $args['entry']->post_id, 'post_status' => 'publish'));
}
我解决此问题的其他尝试: - 保存用户文件上传到 wordpress 目录,然后在提交阶段检索它们(不成功)
【问题讨论】:
标签: php html wordpress forms paypal