我看到的解决方案是从将 javascript 功能添加到主题的角度来看的。但是,OP 具体问:“我该如何为 single WordPress 页面添加它?”这听起来可能是我在我的 Wordpress 博客中使用 javascript 的方式,其中个别帖子可能有不同的 javascript 驱动的“小部件”。例如,帖子可能会让用户更改变量(滑块、复选框、文本输入字段),并绘制或列出结果。
从 JavaScript 角度出发:
- 在单独的“.js”文件中编写 JavaScript 函数
甚至不要考虑在您的帖子的 html 中包含重要的 JavaScript — 使用您的代码创建一个或多个 JavaScript 文件。
- 将 JavaScript 与帖子的 html 接口
如果您的 JavaScript 小部件与 html 控件和字段交互,您需要了解如何从 JavaScript 查询和设置这些元素,以及如何让 UI 元素调用您的 JavaScript 函数。这里有几个例子;首先,来自 JavaScript:
var val = document.getElementById(“AM_Freq_A_3”).value;
以及来自 html:
<input type="range" id="AM_Freq_A_3" class="freqSlider" min="0" max="1000" value="0" oninput='sliderChanged_AM_widget(this);'/>
- 使用 jQuery 调用 JavaScript 小部件的初始化函数
将此添加到您的 .js 文件中,使用您的函数的名称,该函数在页面准备好时配置和绘制 JavaScript 小部件:
jQuery(document).ready(function( $ ) {
your_init_function();
});
- 在帖子的 html 代码中,加载帖子所需的脚本
在 Wordpress 代码编辑器中,我通常会在文章末尾指定脚本。例如,我的主目录中有一个脚本文件夹。在里面我有一个实用程序目录,其中包含我的一些帖子可能共享的常用 JavaScript — 在本例中是我自己的一些数学实用程序函数和 flotr2 绘图库。我发现将特定于帖子的 JavaScript 分组到另一个目录中更方便,例如,使用基于日期的子目录而不是使用媒体管理器。
<script type="text/javascript" src="/scripts/utils/flotr2.min.js"></script>
<script type="text/javascript" src="/scripts/utils/math.min.js"></script>
<script type="text/javascript" src="/scripts/widgets/20161207/FreqRes.js"></script>
- 让 jQuery 入队
Wordpress 注册了 jQuery,但它不可用,除非你通过排队告诉 Wordpress 你需要它。否则,jQuery 命令将失败。许多来源告诉您如何将此命令添加到您的functions.php,但假设您知道一些其他重要细节。
首先,编辑主题是个坏主意——主题的任何未来更新都会清除您所做的更改。制作一个儿童主题。方法如下:
https://developer.wordpress.org/themes/advanced-topics/child-themes/
子主题的functions.php文件不会覆盖父主题的同名文件,它会添加到它。子主题教程建议如何将父子样式.css 文件排入队列。我们可以简单地在该函数中添加另一行来将 jQuery 加入队列。这是子主题的整个functions.php文件:
<?php
add_action( 'wp_enqueue_scripts', 'earlevel_scripts_enqueue' );
function earlevel_scripts_enqueue() {
// styles
$parent_style = 'parent-style';
wp_enqueue_style( $parent_style, get_template_directory_uri() . '/style.css' );
wp_enqueue_style( 'child-style',
get_stylesheet_directory_uri() . '/style.css',
array( $parent_style ),
wp_get_theme()->get('Version')
);
// posts with js widgets need jquery
wp_enqueue_script('jquery');
}