0

最初の関数の引数を2番目の関数の変数として使用しようとしています. 2 番目の関数 (clauseWhere) には他の引数を指定できないことに注意してください。

function filtrerDuree($time) {
    global $theTime;
    $theTime = $time;
    function clauseWhere($where = '') {
        global $theTime;
        return $where .= " AND post_date > '" . date('Y-m-d', strtotime('-' . $theTime. ' days')) . "'";
    }
    add_filter( 'posts_where', 'clauseWhere' );
}

strtotime('-' . $time. ' days')) のように、引数 $time を 2 番目の関数で直接使用することはできませんでした。これは、とにかく最初の関数に対してローカルであるためです。

最初の関数で $time=$time を実行したとしても、2 番目の関数にグローバル $time を配置しても機能しませんでした。

また、最初の関数でグローバルを $theTime に配置する必要がある理由がわかりません...この変数は関数の外には存在しないため、関数の外では変数を使用していません。グローバルに配置しないと機能しません。ただし、2 番目の関数でグローバルに配置する必要があることは理解しています。

4

2 に答える 2

0

add_filter が関数の呼び出しを設定する方法によっては、クロージャを使用してグローバル スペースが乱雑になるのを回避できる場合があります。

function filtrerDuree($time) {
    add_filter( 'posts_where',  function($where) use ($time){
        return $where .= " AND post_date > '" . date('Y-m-d', strtotime('-'.$time.' days'))."'";
    });
}
于 2013-08-17T02:36:36.710 に答える