Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 付款后发布用户提交的帖子_Php_Html_Wordpress_Forms_Paypal - Fatal编程技术网

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

Php 付款后发布用户提交的帖子,php,html,wordpress,forms,paypal,Php,Html,Wordpress,Forms,Paypal,我正在使用一个名为USP Pro的插件,它允许用户在我的Wordpress网站上发布帖子。按提交按钮发布帖子后,用户将被重定向到PayPal(同时他们提交的帖子将被发送到我的wordpress帖子部分,以供审阅和“发布”)。但是,如果用户不支付费用,他们的帖子仍将被提交,这需要加以阻止。我最初克服了这个问题,在提交按钮阶段之前将用户重定向到PayPal页面进行支付,然后在之后将他们重定向回表单,以按下提交按钮(这涉及回显表单输入)。但是,由于安全限制,表单包含无法跨多个页面发送的文件上载,因此必

我正在使用一个名为USP Pro的插件,它允许用户在我的Wordpress网站上发布帖子。按提交按钮发布帖子后,用户将被重定向到PayPal(同时他们提交的帖子将被发送到我的wordpress帖子部分,以供审阅和“发布”)。但是,如果用户不支付费用,他们的帖子仍将被提交,这需要加以阻止。我最初克服了这个问题,在提交按钮阶段之前将用户重定向到PayPal页面进行支付,然后在之后将他们重定向回表单,以按下提交按钮(这涉及回显表单输入)。但是,由于安全限制,表单包含无法跨多个页面发送的文件上载,因此必须在按下submit按钮后发送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>
我解决这个问题的其他尝试:
-将用户文件上传保存到wordpress目录,然后在提交阶段检索它们(未成功)

我建议流程是:将用户提交的每件东西都设置为“草稿”状态,并实现IPN(即时支付通知)脚本以读取PayPal支付回拨,然后更新WP数据库,将post状态从“草稿”更改为“已发布”

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


不确定USP Pro插件中是否有任何可用的设置,但您可以使用WP数据库更新代码对其进行自定义。

强大的Pro有一个PayPal扩展来实现这一点。构建用户提交表单,然后在表单设置中添加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>
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'));

}