通过过程插入注释

时间:2014-05-05 作者:Simon B

我一直在玩弄程序,并试图将注释插入到程序中。我有点麻烦,不知道你们能不能看看。

function wp_insert_comment($commentdata) {
$comment_ID = comment_ID;
$comment_post_ID = comment_post_ID;
$comment_author = comment_author;
$comment_author_email = comment_author_email;
$comment_author_url = comment_author_url;
$comment_author_IP = comment_author_IP;
$comment_date = comment_date;
$comment_date_gmt = comment_date_gmt;
$comment_content = comment_content;
$comment_karma = comment_karma;
$comment_approved = comment_approved;
$comment_agent = comment_agent;
$comment_type = comment_type;
$comment_parent = comment_parent;
$user_id = user_id;
global $wpdb;
extract(wp_unslash($commentdata), EXTR_SKIP);

if ( ! isset($comment_author_IP) )
    $comment_author_IP = \'\';
if ( ! isset($comment_date) )
    $comment_date = current_time(\'mysql\');
if ( ! isset($comment_date_gmt) )
    $comment_date_gmt = get_gmt_from_date($comment_date);
if ( ! isset($comment_parent) )
    $comment_parent = 0;
if ( ! isset($comment_approved) )
    $comment_approved = 1;
if ( ! isset($comment_karma) )
    $comment_karma = 0;
if ( ! isset($user_id) )
    $user_id = 0;
if ( ! isset($comment_type) )
    $comment_type = \'\';
$wpdb->insert($wpdb->comments, \'$comment_ID\',\'$comment_post_ID\', \'$comment_author\', \'$comment_author_email\', \'$comment_author_url\', \'$comment_author_IP\', \'$comment_date\', \'$comment_date_gmt\', \'$comment_content\', \'$comment_karma\', \'$comment_approved\', \'$comment_agent\', \'$comment_type\', \'$comment_parent\', \'$user_id\');

$id = (int) $wpdb->insert_id;

if ( $comment_approved == 1 )
    wp_update_comment_count($comment_post_ID);

$comment = get_comment($id);


do_action( \'wp_insert_comment\', $id, $commen );

wp_cache_set( \'last_changed\', microtime(), \'comment\' );

return $id;
}

所以在这里,我只更改了顶部的变量,因为之前使用的数组对我来说不起作用。我将这些变量发送到:

function _insert_replace_helper( $table, $comment_ID, $comment_post_ID, $comment_author, $comment_author_email, $comment_author_url, $comment_author_IP, $comment_date, $comment_date_gmt, $comment_content, $comment_karma, $comment_approved, $comment_agent, $comment_type, $comment_parent, $user_id, $format = null, $type = \'INSERT\' ) {
    $sql = "CALL CommentsProcedure(\'$comment_ID\', \'$comment_post_ID\', \'$comment_author\',     \'$comment_author_email\', \'$comment_author_url\', \'$comment_author_IP\', \'$comment_date\', \'$comment_date_gmt\', \'$comment_content\', \'$comment_karma\', \'$comment_approved\', \'$comment_agent\', \'$comment_type\', \'$comment_parent\', \'$user_id\')";

        return $this->query( $this->prepare( $sql, $comment_ID, $comment_post_ID, $comment_author, $comment_author_email, $comment_author_url, $comment_author_IP, $comment_date, $comment_date_gmt, $comment_content, $comment_karma, $comment_approved, $comment_agent, $comment_type, $comment_parent, $user_id ) );
                }
这是我的存储过程

    DELIMITER $$

CREATE PROCEDURE `CommentsProcedure`(IN comment_ID bigint(20), IN comment_post_ID bigint(20), IN comment_author tinytext, IN comment_author_email VARCHAR(100), IN comment_author_url VARCHAR(200), IN comment_author_IP VARCHAR(100), IN comment_date datetime, IN comment_date_gmt datetime, IN comment_content text,
 IN comment_karma int(11), IN comment_approved VARCHAR(20), IN comment_agent VARCHAR(255), IN comment_type VARCHAR(20), IN comment_parent bigint(20), IN user_ID bigint(20))
BEGIN

    INSERT INTO wp_comments(comment_ID, comment_post_ID, comment_author, comment_author_email, comment_author_url, comment_author_IP, comment_date, comment_date_gmt, comment_content, comment_karma, comment_approved, comment_agent, comment_type, comment_parent, user_id)

    VALUES(comment_ID, comment_post_ID, comment_author, comment_author_email, comment_author_url, comment_author_IP, comment_date, comment_date_gmt, comment_content, comment_karma, comment_approved, comment_agent, comment_type, comment_parent, user_id);

END
$$

DELIMITER ;
我不知道我做错了什么,如果有人能给我一些指导,我会很有帮助的,我已经被困这么长时间了,我在拉扯我的头发!(抱歉,英语不好,不是母语,如果有什么不清楚的地方,请尽管问。)提前感谢

1 个回复
最合适的回答,由SO网友:Hybrid Web Dev 整理而成

这里没有什么注释。1,为什么要声明变量。

例如:

$comment_ID = comment_ID;
$comment_post_ID = comment_post_ID;
$comment_author = comment_author;
$comment_author_email = comment_author_email; 
如果已经设置了变量,则没有理由再次设置它。其次,除非通过如下参数将变量传递给函数:

Function wp_insert_comment($some_var, $some_other var) {
}

wp_insert_comment($some_var, $some_other_var);
然后,一旦函数运行,开始时的这些变量将=nothing,因为它们没有设置。

第三,在第二盘中,要么你错过了美元。如果您在一个类(OOP)中工作,从技术上讲,您可以不受影响,因为Php会假定这些是常量。然而,考虑到您的代码,我建议这里的问题是,这些变量没有事先传递给函数。

尝试添加echo$comment_ID或任何其他变量,看看是否有任何结果。如果不是,那就是你的问题。我想,如果您真的不想将参数传递给函数,另一种方法是使用globals,但是这是一种非常糟糕的做法,在调试时可能会导致噩梦。

就个人而言,我喜欢将参数作为数组传递,这样就可以更改参数或添加新变量,而无需更改函数调用的每个实例。例如,我会这样做:

function some_function ($array=array()) {
// do some stuff 
}

some_function (array(\'variable_1\'=>$variable, \'variable_2\'=>$variable_2));
这可能需要额外键入一些内容,但这是值得的,因为您使函数更加灵活。

要回答您的问题,您的变量看起来为空的原因是您对数组的寻址不正确。假设$commentdata是传递的数组,您可以这样处理变量:

$comment_ID = $commentdata[\'comment_ID\'];
$comment_post_ID = $commentdata[\'comment_post_ID\'];
这是因为数组将数据存储在一个称为键=>值对的东西中。尝试执行以下操作:

var_dump($commentdata);
在函数调用的开始,更好地理解我的意思。

由于您似乎对php比较陌生,我建议您利用以下资源,使学习更容易一些:

http://www.php.net/http://www.w3schools.com/PHP/

或者看看SO的php部分中的一些问题和答案。

结束

相关推荐

Disable comments

我想知道是否有任何方法可以阻止用户留下评论,但仍然显示评论表单?因此,无论何时发布新评论,都应该自动将其丢弃,或者根本不应该添加。我的评论表单仅用于演示目的,它不应该接受任何评论,但应该显示出来。我已经找到了preprocess_comment 和comment_post hooks,但我不知道如何利用它来阻止评论。我在想这样的事情:function prefix_delete_comments( $comment_id ) { wp_delete_comment( $comment_id,