我正在开发一个Wordpress项目,我需要动态创建一个函数(取决于用于页面或帖子的模板类型),以检索相关每个页面的注释。
所以,假设我在Wordpress中有ID为100,110,120,130,140,150的页面,其中3个使用名为“blog”的模板(例如: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”并不好,但到目前为止我没有找到任何其他解决方案)
答案 0 :(得分: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);
答案 1 :(得分:0)
我不明白为什么你不为每个模板使用一个函数,其参数如下:
public function getBlogComments($id){
//...
}
或检查使用过的模板的一个函数
public function getComments($id){
// get Template of $id
//...
}