抱歉,如果这里已经回答了这个问题。我环顾四周,看不到我的问题的任何答案,所以我想我应该发布自己的答案。
我正在为客户构建一个插件,收集客户对最近完成的项目的反馈。
管理员将使用该系统向客户发送“提示”,要求他们提供反馈,并在网站上链接表单。
我创建了一个名为“customer\\u prompts”的自定义帖子类型,它只有一个标题字段和几个自定义字段,这些字段存储在自定义数据库表中,而不是post meta中。
下面是我的save\\u post操作代码。似乎当我点击publish时,它不会启动save\\u post操作,只会将标题值保存到wp\\u posts。
add_action(\'save_post\', \'save_prompt\');
function save_prompt($post_id){
$post = get_post($post_id);
if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE )
return;
if ( \'customer_prompt\' == $_POST[\'post_type\'] )
{
if ( !current_user_can( \'edit_page\', $post_id ) )
return;
}
else
{
if ( !current_user_can( \'edit_post\', $post_id ) )
return;
}
global $wpdb;
$prompt_id = com_create_guid();
$customer_feedback_name = $_POST[\'_sdg_customer_feedback_name\'];
$customer_feedback_email = $_POST[\'_sdg_customer_feedback_email\'];
$salesperson = $_POST[\'_sdg_salesperson\'];
$values = array(
\'id\' => $prompt_id,
\'sdg_customer_name\' => $customer_feedback_name,
\'sdg_customer_email\' => $customer_feedback_email,
\'sdg_salesperson\' => $salesperson,
\'sdg_post_id\' => $post->id
);
$insert = $wpdb->insert($table_name, $values);
if($insert) {
mail($customer_feedback_email, \'hello\', \'hello\');
}
}
任何帮助都将不胜感激,因为我不知道这里发生了什么。
谢谢,杰米。
SO网友:Caleuanhopkins
编辑您是否尝试放置print_r(\'hello world\'); die();
之后function save_prompt($post_id){
要确保函数确实被动作挂钩拾取/编辑
可能存在以下几个问题:
1: 您的global wpdb
需要位于函数的最顶端,在所有if条件语句之前。
2: 您的$_POST
变量的条件应为if(isset($_POST[\'food\'))
检查正在发布的数据是否在到达您的函数之前实际设置,否则可能会导致致命错误,导致数据无法输入数据库。
3: 试试看global $post
在函数顶部,您可以调用post的变量,例如$post->post_type
通过$post
变量
4: 添加 $wpdb->print_errors; die();
之后$insert = $wpdb->insert($table_name, $values);
如果数据库查询不正确。
希望其中一个可以解决您的问题。