我正在使用WP作为我的站点的框架,我有一堆自定义表
现在我需要允许用户向各种实体写评论。假设一个实体是图像,我希望用户对我的图像进行评论。
我该如何使用wp_insert_comment()
当我只有图像ID而没有帖子ID时?(图像与帖子无关)。
示例:
使用jQuery,我执行以下函数:
public function addComment(){
$data = array(
\'comment_post_ID\' => 123,
\'comment_author\' => \'Steven\',
\'comment_author_email\' => \'[email protected]\',
\'comment_author_url\' => \'http://www.storelocator.com\',
\'comment_content\' => \'Lorem ipsum dolor sit amet...\',
\'comment_author_IP\' => \'127.0.0.1\',
\'comment_agent\' => \'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; fr; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3\',
\'comment_date\' => date(\'d-m-Y H:i:s\'),
\'comment_date_gmt\' => date(\'d-m-Y H:i:s\'),
\'comment_approved\' => 0,
);
$comment_id = wp_insert_comment($data);
echo \'Comment ID: \'.$comment_id;
}
这是可行的。问题是没有ID为123的帖子。因此,当我转到我的管理界面时,会收到如下错误消息:
注意:尝试在/var/www/storelocator/wp-includes/capabilities中获取非对象的属性。php在线1178
注意:正在尝试获取/var/www/storelocator/wp admin/includes/class wp comments列表中非对象的属性。php在线488
我有没有办法解决这个问题?
Update
我正在尝试添加一些元数据,但中未触发该函数functions.php
.
这是我目前使用的代码:
// Comment submit on a car
http://mysite.com/wp-content/themes/mytheme/include/jquery.php?action=addComment&entity=car&entity_id=247
// My web service
- More or less as above. I\'ve added two fields:
\'entity\' => $_REQUEST[\'entity_id\'],
\'entity_id\' => $_REQUEST[\'entity\']
I\'ve also created a post, and using this post ID for comment_post_ID.
// functions.php - This is not triggered
add_action(\'comment_post\', \'pre_handle_comment\');
function pre_handle_comment($comment_id){
add_comment_meta($comment_id, \'entity\', $_POST[\'comment_type\']);
// Also tried
add_comment_meta($comment_id, \'entity\', \'car\');
}
SO网友:fuxia
您可以创建一个隐藏的虚拟帖子,并始终将其帖子ID用作comment_post_ID
. 然后使用注释元字段存储自定义表中的相关ID。
另一个可能更好的选择是:如果需要类似于帖子的内容,请使用自定义帖子类型,而不是表。将该帖子类型注册为…
\'supports\' => array(
\'comments\',
),
…问题将不再存在。
要添加自定义数据,请挂接到wp_insert_comment
:
add_action( \'wp_insert_comment\', \'prefix_comment_meta\', 10, 2 );
function prefix_comment_meta( $id, $comment )
{
// evaluate POST request and create comment meta
}