我正在尝试通过一个插件在Wordpress中构建一个动态页面。我已经注册了一个操作,如下所示:
add_action('the_post', 'createDynamicPage');
这会起作用,并且函数会像预期的那样被调用。然后,我接收WP_Post
对象,并像这样检查它:
public static function createDynamicPage(WP_Post $post)
{
if (is_page('my-dynamic-page')) {
// Do the processing etc
$post->post_title = 'My New Title';
$post->post_content = $whatIProcessedAbove;
}
return $post;
}
对post_title
属性的更改会反映在页面中,但内容不会。
因此,我想出的解决方案是修改WP_Post
对象,将其传递给wp_update_post()
,然后强制页面重新加载。
这是可行的,页面内容就是它应该的样子,但这绝对不是正确的方式。首先,如果其他人在我的第一次点击和从DB重新加载页面之间点击了这个页面,我就会看到他们的内容。
那么,我到底该如何让我对post_content
属性所做的更改立即可见呢?也许我在add_action()
中使用了错误的钩子?
帮助!
发布于 2018-06-09 03:38:54
好吧,我用错了钩子。我实际上需要使用过滤器来代替
首先,在the_content
钩子上注册过滤器:
add_filter('the_content', 'createDynamicContent');
现在,修改页面中的内容:
public static function createDynamicContent(string $content)
{
if (is_page('my-dynamic-page')) {
// Do the processing etc
$content = $whatIProcessedAbove;
}
return $content;
}
只见树木不见森林!
https://stackoverflow.com/questions/50767130
复制相似问题