1

私はWordpressプラグインに取り組んでいます。プラグインディレクトリ(個人のインストールによって変更される可能性があります)をjquery関数に渡す必要があります。

これを行うための最良の方法は何ですか?私が作業できるプラグインのバージョンでは、PHPファイルにすべてのJavaScriptが含まれていたため、ブラウザーでレンダリングされる前に、関数が残りのコンテンツとともに解析されました。

私はAJAXを見ていますが、必要以上に複雑かもしれないと思います。この場合、2つの変数(ディレクトリ、ユーザーが設定するものは何もありません)で済ますことができます。

その良い習慣を読んだので、私はjsとphpを別々に保とうとしています。プラグインが初期化されると、jsファイルが呼び出されます。

    //Wordpress calls the .js when the plugin loads
    wp_enqueue_script( 'wp-backitup-funtions', plugin_dir_url( __FILE__ ) . 'js/wp-backitup.js', array( 'jquery' ) );

次に、.jsファイルを使用して、次の変数を生成する方法を理解する必要があります。

    dir = '<?php echo content_url() ."/plugins"; ?>';
    dir = '<?php echo content_url() ."/themes"; ?>';
    dir = '<?php echo content_url() ."/uploads"; ?>';

そして、次のリクエストの解析を実行します。

    xmlhttp.open("POST","<?php echo plugins_url() .'/wp-backitup/includes/wp-backitup-restore.php'); ?>",true);
    xmlhttp.open("POST","<?php echo plugins_url() .'/wp-backitup/includes/wp-backitup-start.php'); ?>",true);
    xmlhttp.open("POST","<?php echo plugins_url() .'/wp-backitup/wp-backitup-directory.php'); ?>",true);
    xmlhttp.open("POST","<?php echo plugins_url() .'/wp-backitup/wp-backitup-db.php'); ?>",true);
    window.location = "<?php echo plugins_url() .'/wp-backitup/backitup-project.zip'); ?>"; 
    xmlhttp.open("POST","<?php echo plugins_url() .'/wp-backitup/wp-backitup-delete.php'); ?>",true);

コンテンツURLとプラグインURLは/plugins/だけが異なるので、私が強く押された場合、私は本当に1つのPHPリクエストを作成し、それをJSに取り込むだけで済みます。

4

3 に答える 3

1

関数は.jsファイルにロードできますが、PHPページでプラグインを初期化するときに、必要なPHP変数を指定できます。例:

$("#myDiv").startPlugin("<?php echo $directory;?>");

phpからの情報が必要な場合、プラグインのどこかにそれを提供する選択肢は実際にはありません。ajaxでクエリを実行するのは、私にとっては良い考えではありません。

于 2012-06-15T14:23:23.560 に答える
1

コードを見ずにそれはちょっと難しいですが、一般的に言えば、私は次のようにphpからどこかにディレクトリを出力します:

<script type="text/javascript">
  var dirs = <?php echo empty($dirs) ? "{}" : json_encode($dirs); ?>;
</script>
于 2012-06-15T14:24:25.987 に答える
1

速くて汚い:

<script type="text/javascript">
<?php
    echo 'var myJsObject =' . json_encode(array(
        'dir1' => $directory1,
        'dir2' => $directory2
    ));
?>
    alert(myJsObject.dir1);
</script>
于 2012-06-15T14:26:46.227 に答える