付款后发布用户提交的帖子

时间:2016-02-23 22:35:55

标签: php html wordpress forms paypal

我使用名为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目录,然后在提交阶段检索它们(不成功)

2 个答案:

答案 0 :(得分:1)

我建议流程为:将用户提交的所有内容都设置为“草稿”状态,并实施IPN(即时付款通知)脚本来读取PayPal付款回拨,然后更新WP数据库以更改帖子状态从“草稿”到“已发布”

在这种情况下不应依赖付款退货/重定向,因为在自动退货之前关闭客户端浏览器时,流程会中断。虽然IPN是付款状态的异步消息POST,但您应该使用它来处理USP帖子。

不确定USP Pro插件中是否有可用的设置,但是您可以使用WP数据库更新代码自定义an sample IPN script

答案 1 :(得分:0)

Formidable Pro有一个PayPal扩展程序可以执行此操作。您可以构建用户提交表单,然后在表单设置中添加PayPal操作并填写必要的详细信息。您还可以添加“创建帖子”#39;操作并使用条件逻辑选项仅在付款成功时发布。