0

突然、wordpress プロジェクトの特定のバックエンド ページでエラーが発生しました。

警告: wpdb::prepare() の引数 2 がありません。.../wp-content/plugins/wpml-media/inc/wpml_media.class.php の 463 行目で呼び出され、.../wp-includes/ で定義されています。 992 行目の wp-db.php

次のようになります。

wpml_media.class.php

// get language of their parents
if(!empty($missing_langs)){     
    $results = $wpdb->get_results($wpdb->prepare("
        SELECT p.ID, t.language_code 
        FROM {$wpdb->posts} p JOIN {$wpdb->prefix}icl_translations t ON p.ID = t.element_id AND t.element_type = CONCAT('post_', p.post_type)
        WHERE p.ID IN(".join(',', $missing_langs).")
    "));
    foreach($results as $row){
        $parent_langs[$row->ID] = $row->language_code;
    }
}

およびwp-db.php

function prepare( $query, $args ) {
    if ( is_null( $query ) )
        return;

    $args = func_get_args();
    array_shift( $args );
    // If args were passed as an array (as in vsprintf), move them up
    if ( isset( $args[0] ) && is_array($args[0]) )
        $args = $args[0];
    $query = str_replace( "'%s'", '%s', $query ); // in case someone mistakenly already singlequoted it
    $query = str_replace( '"%s"', '%s', $query ); // doublequote unquoting
    $query = preg_replace( '|(?<!%)%f|' , '%F', $query ); // Force floats to be locale unaware
    $query = preg_replace( '|(?<!%)%s|', "'%s'", $query ); // quote the strings, avoiding escaped strings like %%s
    array_walk( $args, array( $this, 'escape_by_ref' ) );
    return @vsprintf( $query, $args );
}

ここで何が起こっているのかわかりません。アイデアはありますか? 残念ながら、著者のサポートは期限切れです。

ありがとう

4

2 に答える 2

1

この問題に関する詳細情報はこちらにあります。基本的に、これは単なる警告であり、実際に問題が発生するわけではないため、パニックにならないでください。

wpml-media プラグインを変更してこのエラーを解消したい場合は、上記のリンクの開発者情報が役立ちます。警告を消したいだけなら、次のように引用します。

まず、ユーザーがこれらのエラーを取り除きたい場合は、PHP でエラーの表示をオフにする必要があります。これを行うには、php.ini、.htaccess など、さまざまな方法があります。このためには、これを wp-config.php に入れるだけです。(本番サイトでエラーを非表示にすることは、とにかく良い方法であることに注意してください。)

@ini_set('display_errors', 0);
于 2014-01-28T15:59:40.717 に答える