2

我正在开发一个 Wordpress 项目,在该项目中我需要动态创建一个函数(取决于页面或帖子使用哪种模板)来检索每个相关页面的评论。

因此,假设我在 Wordpress 中有 ID 为 100、110、120、130、140、150 的页面,其中 3 个页面使用名为“博客”的模板(例如:100、130 和 150)。

因此,为了使用 AJAX 从这 3 个页面中检索评论,我需要为每个页面创建一个函数:

function GetComments100() { #### }
function GetComments130() { #### }
function GetComments150() { #### }

这是我需要为每个页面单独创建的函数代码(并且位于上面的函数括号之间(而不是####):

$defaults = array( 'order' => 'DESC', 'post_id' => $functionID, 'post_type' => 'page', 'count' => false ); 
$comments = get_comments($defaults);
foreach($comments as $comment) :
echo "<div class='table-row' style='margin-bottom:1px'><div class='table-cell-1' style='width:110px;'>".$comment->comment_author.":</div><div class='table-cell-2'style='width:870px;'>".$comment->comment_content."  <em><a>".$comment->comment_date." ... ".get_the_title($comment->comment_post_ID)." (".$comment->comment_post_ID.")</a></em></div></div>";
endforeach;
die($results);

为了获取页面,我使用了一个循环函数,它将页面 ID 作为变量提供(在我的情况下,它的 $functionID (也包含在我上面的函数数组中))。

我已经设法使用以下代码行动态创建函数(我知道“eval”不是一个好的选择,但我没有找到任何其他解决方案):

$string = 'function ' . $functionName . "() { 
####
}";
eval($string);

现在我需要集成以“$defaults = array(...”开头的实际函数代码而不是####,但显然它必须完全转换为字符串——这就是我正在努力解决的问题。

任何帮助将不胜感激(同样,我知道使用“eval”并不好,但到目前为止我还没有找到任何其他解决方案)

4

2 回答 2

0

您是否尝试过使用 nowdoc 作为函数体?如果你只需要扩展 $functionName,你可以尝试这样的事情:

      $string="function {$functionName}(){".<<<'END'
$defaults = array( 'order' => 'DESC', 'post_id' => $functionID, 'post_type' => 'page', 'count' => false ); 
$comments = get_comments($defaults);
foreach($comments as $comment) :
echo "<div class='table-row' style='margin-bottom:1px'><div class='table-cell-1' style='width:110px;'>".$comment->comment_author.":</div><div class='table-cell-2'style='width:870px;'>".$comment->comment_content."  <em><a>".$comment->comment_date." ... ".get_the_title($comment->comment_post_ID)." (".$comment->comment_post_ID.")</a></em></div></div>";
endforeach;
die($results);
}
END;

eval($string);
于 2013-06-11T10:22:36.457 回答
0

我不明白你为什么不对每个模板使用一个函数,参数如下:

public function getBlogComments($id){
    //...
}

或一个检查使用的模板的功能

public function getComments($id){
    // get Template of $id
    //...
}
于 2013-06-11T11:06:50.990 回答