问题描述
为了进一步开发中的调试目的,我尝试向 wordpress 站点添加一个简单的功能并在 Firefox 控制台中执行它。
就像在 https://developer.wordpress.org/reference/functions/add_action/ 中一样,我放入了我的 OceanWP 主题的 functions.PHP
:
add_action( 'hello_world','hdt_hello_world' );
function hdt_hello_world($text) {
echo 'Hello World!';
echo $text;
}
重新加载页面并尝试从 Firefox 控制台执行,得到:
hello_world('Hi!');
Uncaught ReferenceError: hello_world is not defined
<anonymous> debugger eval code:1
我好像在某处没说到点子上...你能给个提示吗?
解决方法
Hamid Reza Yazdani 的提示有助于澄清:我基本上尝试在浏览器控制台中调用 PHP 函数 - 它不打算工作 - 并且不会工作 - 这样。
(希望如此)正确的方法是创建一个 JavaScript 函数并使用 WordPress 钩子将其加入队列。
- 在 WP 主题的
assets/js
文件夹中,创建一个文件,例如my_functions.js
,使用以下代码:
function my_hello_world(text) {
console.log("Hello world!");
console.log(text);
}
- 在主题的
functions.php
文件中(不是更新安全的!),添加:
function my_functions_enqueue_script() {
wp_enqueue_script( 'my_functions',get_template_directory_uri() . '/assets/js/my_functions.js',array ( 'jquery' ),0.1,true);
}
add_action('wp_enqueue_scripts','my_functions_enqueue_script');
在浏览器控制台中执行 my_hello_world('Hi!');
然后产生所需的控制台输出。
有关详细信息,请参阅:
- https://developer.wordpress.org/themes/basics/including-css-javascript/
- https://developer.wordpress.org/plugins/hooks/actions/
- 在https://developer.wordpress.org/reference/下查找对应的WP函数
如果需要服务器端 PHP 执行(尤其是 AJAX),则需要以“WordPress 方式”实现 JS 和 PHP 代码之间更复杂的交互;可以看看: