我创建了一个名为“工资存根”的自定义帖子类型,以及两个自定义元字段“净工资”和“链接”(指向工资存根文件的链接),以及两个自定义分类法“状态”和“员工”。
我在admin中设置自定义字段,然后单击save。然后,前端的其他人检查工资存根并单击approved,此时,仅当“net pay”自定义元不为空时,才会触发wp\\u set\\u post\\u terms以将“status”从“pending”更改为“approved”,也会触发wp\\u mail以发送电子邮件。单击该批准按钮,wp\\U insert\\U post也将被触发,并为下周创建两个新的工资存根帖子,其“状态”为“待定”(ID=46),“员工”设置为与当前员工相关,并且未设置自定义元。
//Create next week\'s pay stub.
function create_next_pay_stub( $employee ) {
if ( !get_last_pay_stub( \'\', $employee, \'\' ) ) {
$next_pay_stub = array(
\'post_type\' => \'pay-stub\',
\'post_title\' => next_pay_period(),
\'post_status\' => \'publish\',
\'post_author\' => 1,
\'tax_input\' => array(
\'status\' => 46,
\'employee\' => $employee,
),
);
$next_pay_stub_id = wp_insert_post( $next_pay_stub );
return $next_pay_stub_id;
}
}
除了wp\\U insert\\U post功能外,所有功能都工作正常。它成功地创建了新的工资存根,并正确设置了所有内容,但删除了最新(上周)工资存根的所有自定义元,因此,“净工资”变为空,“状态”无法设置为“已批准”,因为“净工资”为空。它还创建了一个没有设置“状态”或“员工”的额外工资存根。
我知道wp\\u insert\\u post是个问题,因为如果我直接启动上面的函数,那么我刚才描述的问题也会发生。有什么想法吗?
EDIT 1 (回应WebElaine的评论):
它被连接到wp\\u error的if/else语句中,该语句在wp\\u set\\u post\\u terms被触发时检查错误。如果出现错误(条款未更改为“已批准”),则回显错误消息,否则创建\\u next\\u pay\\u stub()(以及发送通知电子邮件等其他操作)
if ( is_wp_error( $term_taxonomy_ids ) || empty( $pay_amount ) ) { // There was an error somewhere and the terms couldn\'t be set. ?>
<span class="alert-danger pay-stub-alert loop-pay-stub-alert">ERROR!</span>
<?php $success = 0; }
else { // Success! The terms were set. echo \'APPROVED!\';
$success = 1;
send_email_on_approval ( $employee_data->user_email, $employee_data->first_name, $title, $pay_amount );
}
EDIT 2 (缩小罪魁祸首):
我一直在做大量测试,只有在工资单循环中运行此函数时,问题才会出现:
function publish_announcement_on_approval () {
$announcement_id = get_last_announcement( \'\' );
$announcement_publish = array(
\'ID\' => $announcement_id,
\'post_status\' => \'publish\',
);
wp_update_post( $announcement_publish );
}
(公告只是来自
WP HR Manager plugin)
这个publish_announcement_on_approval ()
正在上述中调用函数wp_error
上述功能,仅在send_email_on_approval
.
我原来有publish_announcement_on_approval ()
包含在send_email_on_approval
作用但现在我把他们分开了,这让我意识到create_next_pay_stub
是not 罪魁祸首。
我目前正在测试publish_announcement_on_approval ()
超出工资存根循环。目前,该函数在循环外不起作用,但这可能是我的编码错误。因此,我目前正在研究这一问题,并将报告我的发现。
谢谢
EDIT 3 (SOLVED... 目前)
我认为这段代码是我的问题:
// use reset postdata to restore orginal query
wp_reset_postdata();
if ( $current_slug == $approve_slug && $success === 1 && isset ($success) ) {
$next_pay_stub_id = create_next_pay_stub( $term->term_id );
}
} //this is the closing bracket of my foreach statement
我改成了
if ( $current_slug == $approve_slug && $success === 1 && isset ($success) ) {
$next_pay_stub_id = create_next_pay_stub( $term->term_id );
}
} //this is the closing bracket of my foreach statement
// use reset postdata to restore orginal query
wp_reset_postdata();
所以我认为自从
create_next_pay_stub();
函数在之后
wp_reset_postdata();
, 它不在循环中,但某种程度上是。。。?当我将reset postdata放在foreach语句的右括号后时,它就可以工作了,这也解释了为什么它现在可以工作,而不是以前。
我不是WP或PHP专家,我将许多教程和google搜索结合在一起,编译了整个pay stub功能。
感谢WebElaine的帮助性评论!