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

次のようなパラメーターを使用して、テンプレートごとに 1 つの関数を使用しない理由がわかりません。

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

または使用されたテンプレートをチェックする1つの関数

public function getComments($id){
    // get Template of $id
    //...
}
于 2013-06-11T11:06:50.990 に答える
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 に答える