当一篇文章发表时,我会自动地尝试一个论坛部分--就像一个讨论页面。通常情况下,我想让用户创建主题,但我意识到一个论坛类别与许多其他主题在下面将是更好的讨论。
我想要做的是在帖子第一次发布时以某种方式获取帖子的id,创建一个链接到该id的论坛类别,并在post的页面上显示到该论坛的链接。我计划在数据库中为这些通信创建一个单独的表,但是元数据表可能是一个更好的主意,我不确定。我使用bbPress插件为论坛,报纸11为主题。
我不能说我完全掌握了WordPress上的整个钩子系统,所以我现在对任何信息都开放。
发布于 2022-03-07 15:54:16
简单地说,WordPress钩子允许您修改参数或函数输出(筛选器),或者在发生某些事情(操作)时执行自定义代码。这两种类型的钩子通常将一个或多个参数传递给附加到它们的回调函数。
在页面请求期间,WordPress通过一系列步骤来呈现页面。对于在旧法典上的典型请求中运行的操作,有一个很好的总结。要让您的自定义代码在正确的步骤中运行,您需要在操作或筛选器运行之前添加回调。
WordPress使用wp_insert_post()在数据库中插入和更新帖子。当查看函数在特拉克上的源代码时,您可以看到它里面有一堆apply_filters和do_actions。前者用于调用过滤回调,后者用于操作回调。
例如,您可以看到最后一个do_action是具有三个参数- $post_ID, $post, $update的wp_insert_post。您可以阅读源代码上的注释,也可以查看行动文件页以了解更多有关它的信息。
如何使用动作钩子的基本示例,
add_action( 'wp_insert_post', 'example_wp_insert_post', 10, 3 ); // hook, callback, priority, # of accepted args
function example_wp_insert_post( int $post_ID, WP_Post $post, bool $update ) {
// is the post new or was this an update?
if ( $update ) {
// don't do anything
return;
}
// was the post published?
if ( 'publish' !== $post->post_status ) {
// bail
return;
}
// do something with ID and/or post..
}需要注意的一点是,wp_insert_post()在成功时返回post ID。因此,如果您在代码中的某个地方使用它,那么您就不必费心使用钩子了--只需直接使用返回结果即可!
// somewhere in your code
$new_post_id = wp_insert_post( $postarr, $wp_error );
if ( ! is_wp_error( $new_post_id ) ) {
// do something with the new post's ID
}https://wordpress.stackexchange.com/questions/403439
复制相似问题