原因是没有开启openssl扩展。
不过,在windows环境下还有一个需要注意的,就是php.ini文件中extension_dir需要修改为绝对路径,
如下:
extension_dir="C:\phpstudy_pro\Extensions\php\php7.4.3nts\ext"
action是两种类型的钩子之一。它们提供了一种在执行WordPress Core,插件和主题的特定点运行函数的方法。Action 的回调函数不会向调用 Action 挂钩返回任何内容。它们是过滤器的对应物。
添加操作
添加操作的过程包括两个步骤:
创建回调函数
首先,创建一个回调函数。此函数将在运行其挂钩到的操作时运行。
回调函数就像普通函数一样:它应该有前缀,并且应该在可调用的地方或某个地方。它应该接受的参数将由你挂接到的操作定义;大多数钩子都定义得很好,因此请查看钩子文档,了解您选择的操作将传递给函数的参数。functions.php
分配(挂钩)回调函数
其次,将回调函数添加到操作中。这称为挂钩,并告知操作在操作运行时运行回调函数。
当回调函数准备就绪时,使用 add_action() 将其挂接到您选择的操作。至少需要两个参数:add_action()
- string $hook_name这是您要挂钩的操作的名称,以及
- callable $callback回调函数的名称。
下面的示例将在执行钩子时运行wporg_callback():init
function wporg_callback() {
// do something
}
add_action( 'init', 'wporg_callback' );
您可以参考 Hooks 一章以获取可用钩子的列表。
随着你获得更多的经验,浏览WordPress Core源代码将让你找到最合适的钩子。
其他参数
add_action()可以接受两个附加参数int$priority, int $accepted_args,用于为回调函数提供的优先级,以及用于将传递给回调函数的参数数。
优先权
许多回调函数可以挂接到单个操作。例如,钩子得到了很多使用。在某些情况下,可能需要确保回调函数在其他回调函数之前或之后运行,即使这些其他函数可能尚未挂钩。
WordPress 根据两件事确定回调函数的运行顺序:第一种方法是手动设置优先级。这是使用第三个参数来完成的。
以下是有关优先级的一些重要事实:
- 优先级为正整数,通常介于 1 和 20 之间
- 默认优先级(即手动提供任何值时分配的优先级)为 10priority
- 优先级值没有理论上的上限,但实际的上限是100
优先级为 11 的函数将在优先级为 10 的函数之后运行;优先级为 9 的函数将在优先级为 10 的函数之前运行。
确定回调函数顺序的第二种方式只是根据它在同一优先级值中的注册顺序。因此,如果为具有相同优先级的同一钩子注册了两个回调函数,则它们将按照它们注册到钩子的顺序运行。
例如,以下回调函数都注册到钩子,
但优先级不同:init
add_action('init', 'wporg_callback_run_me_late', 11);
add_action('init', 'wporg_callback_run_me_normal');
add_action('init', 'wporg_callback_run_me_early', 9);
add_action('init', 'wporg_callback_run_me_later', 11);
在上面的示例中:
- 第一个函数运行将是 ,因为它的手动优先级为 9wporg_callback_run_me_early()
- 接下来wporg_callback_run_me_normal(),因为它没有设置优先级,所以它的优先级是 10,
- 接下来,运行wporg_callback_run_me_late(),因为它的手动优先级为 11
- 最后,是运行wporg_callback_run_me_later():它的优先级也是 11,但它在 wporg_callback_run_me_late()之后.
参数数
有时,回调函数需要接收一些与挂钩到的操作相关的额外数据。
例如,当WordPress保存帖子并运行钩子时,它会将两个参数传递给回调函数:正在保存的帖子的ID,以及帖子对象本身。
do_action( 'save_post', $post->ID, $post );
为挂钩注册回调函数时,它可以指定要接收这两个参数。它通过(在这种情况下)作为第四个参数来告诉期望它们。
add_action('save_post', 'wporg_custom', 10, 2);
为了在回调函数中实际接收这些参数,请修改回调函数将接受的参数,如下所示:
function wporg_custom( $post_id, $post ) {
// do something
}
action和filter之间的主要区别可以总结如下:
- action获取它收到的信息,对其执行某些操作,并且不返回任何内容。换句话说:它作用于某物,然后退出,不返回任何内容返回调用钩子。
- filter获取它收到的信息,以某种方式修改它,然后返回它。换句话说:它过滤一些东西并将其传递回钩子以供进一步使用。
换一种说法:
- action中断代码流以执行某些操作,然后返回到正常流而不进行任何修改。
- filter用于以特定方式修改某些内容,以便代码稍后使用该修改。
当使用 PHP 的 cURL 库时,可以使用 CURLOPT_WRITEFUNCTION
选项来指定一个回调函数,该函数将在每次接收到的数据块传输到目标时被调用。以下是一个使用 CURLOPT_WRITEFUNCTION
的示例代码:
<?php
// 目标 URL
$url = 'http://example.com';
// 初始化 cURL
$ch = curl_init();
// 设置 cURL 选项
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'writeData');
// 执行 cURL 请求
$response = curl_exec($ch);
// 关闭 cURL 资源
curl_close($ch);
// 处理响应数据
echo $response;
// 回调函数,用于处理接收到的数据块
function writeData($handle, $data) {
// 在这里可以对接收到的数据进行处理,例如输出到日志文件或进行其他操作
// 这里仅简单地输出接收到的数据块
echo 'Received data: ' . $data;
return strlen($data); // 返回实际接收到的数据长度,以便 cURL 知道下一个数据块的大小
}
?>
在上述示例中,CURLOPT_WRITEFUNCTION
被设置为 'writeData'
,这将调用 writeData
函数作为回调函数。在 writeData
函数中,可以对接收到的数据进行处理,这里只是简单地输出接收到的数据块。函数返回实际接收到的数据长度,以便 cURL 知道下一个数据块的大小。最后,通过 curl_exec
执行 cURL 请求并获取响应数据。