Context
学习插件创建,我想在用户每次单击div外部时保存div的内容。简而言之,其目的是创建记事本的文本备份。
我在当地工作。
Steps
<有些文本是用div编写的(感谢Trumbowyg.js)在div blur事件中,插件使用ajax发送内容数据插件函数打开一个json文件,并用新文本更新其内容
Issues
几个我想我在第三步受阻了。几个小时的信息搜索让我不知所措。
Update
我尝试使用wp\\u remote\\u get()而不是file\\u get\\u contents(),它返回错误:[0]=>;未提供有效的URL。然而,我不知道它需要什么样的路径。
jdr。js公司
$path = plugin_dir_path ( __FILE__ ) . "assets/json/notes.json";
// $path = plugin_dir_url ( __FILE__ ) . "assets/json/notes.json";
// $path = ABSPATH . "assets/json/notes.json";
// $path = plugins_url("/jdr/assets/json/notes.json");
$args_for_get = array(
\'stream\' => true,
\'sslverify\' => false,
\'filename\' => $chemin3,
\'reject_unsafe_urls\' => true,
\'method\' => "POST"
);
$response = wp_remote_get( $chemin, $args_for_get );
print_r(response);
控制台中的$响应
WP_Error Object
(
[errors] => Array
(
[http_request_failed] => Array
(
[0] => L’URL fournie n’est pas valide. // A valid URL was not provided
)
)
[error_data] => Array
(
)
)
My code
Wordpress plugin structure:
plugins/
-jdr.php
-lbh-jdr/
-inc/
-enqueue-scripts.php
-fonctions.php (= functions)
-assets/
-js/
-plugin-jdr.js
-json/
-notes.json
jdr。php
<?php
/*
Plugin Name: jdr
etc..
*/
function lbh_jdr() {
defined(\'MYPLUGIN_DIR\') or define(\'MYPLUGIN_DIR\', plugin_dir_path( __FILE__ ));
include_once( MYPLUGIN_DIR . \'/inc/enqueue-scripts.php\');
include_once( MYPLUGIN_DIR . \'/inc/fonctions.php\');
$texte = $_REQUEST["texte"];
$sessionPerso = $_REQUEST["sessionPerso"];
$appelFonction = $_REQUEST["ajaxAction"];
switch($appelFonction) {
case \'sauvegarderNote\' : do_action("sauvegarderNote", $texte); break;
}
if(defined(\'DOING_AJAX\') && DOING_AJAX) die();
}
add_action("wp_ajax_lbh_jdr", "lbh_jdr");
add_action("wp_ajax_nopriv_lbh_jdr", "lbh_jdr");
?>
将脚本排队。php
注意:如果我封装排队脚本+add\\u操作,它将不起作用。不知道为什么
正确的方法:
function my_script_enqueuer() {
wp_enqueue_script( "jdr-script", plugins_url("jdr/assets/js/plugin-jdr.js", __FILE__),
array("jquery"), "", true );
wp_localize_script( "jdr-script", "myAjax", array(
"ajaxurl" => admin_url( "admin-ajax.php"
)));
}
add_action( \'wp_enqueue_scripts\', \'my_script_enqueuer\' );
为我工作的方式:
wp_enqueue_script( "jdr-script", plugins_url("jdr/assets/js/plugin-jdr.js", __FILE__),
array("jquery"), "", true );
wp_localize_script( "jdr-script", "myAjax", array(
"ajaxurl" => admin_url( "admin-ajax.php"
)));
功能。php
add_action(\'wp_ajax_nopriv_sauvegarderNote\', \'sauvegarderNote\');
add_action(\'wp_ajax_sauvegarderNote\', \'sauvegarderNote\');
function sauvegarderNote() { // sauvergarderNote means saveNote
$json = getJsondata();
$jsonTableau = $json[0]; // Tableau means array
$jsonChemin = $json[1]; // Chemin means path
$jsonTableau["notes"] = [$texte];
array_push($jsonTableau, $texte);
$newJsonString = json_encode($jsonTableau, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE |
JSON_UNESCAPED_SLASHES);
file_put_contents($jsonChemin, $newJsonString);
}
function getJsondata() {
$chemin = plugin_dir_url( __FILE__ ) . "inc/json/notes.json";
$jsonString = file_get_contents($chemin);
$tempArray = json_decode($jsonString, true);
return $tempArray;
}
插件jdr。js公司
jQuery( document ).ready( function() {
let newData = {
action: "lbh_jdr",
ajaxAction: "sauvegarderNote",
texte: jQuery("#blocNotes").text(),
sessionPerso: sessionPerso
};
jQuery.ajax({
url: myAjax.ajaxurl,
data: newData,
type: \'post\',
error: function(e) {
console.log(e);
}
})
.done(function(response) {
console.log(response);
});
});
Questions
所以如果我按照预期的方式执行,为什么我的enqueue\\u脚本不起作用?为什么file\\u get\\u contents不返回任何内容?使用wordpress+Ajax读取/写入json文件的正确方法是什么?
提前谢谢你,我将继续关注!