我正在寻找如何在显示给普通用户时更改WordPress帖子标题和正文的方法。但不能在任何其他上下文中使用,例如在admin模块中。
手头的任务是获取一个查询参数,执行一些对外部web服务和数据库操作的调用,并替换标题和正文中的一些文本。<title>
标签也应该包含更改后的标题。
我不寻找一个插件解决方案,而是我应该包括一个php文件与所有的代码,做所有必要的处理。
我的期望是我不需要深入干预主题文件。当然,我可以将我的代码注入到各自主题的page.php
或content.php
文件中。但是我想以不那么侵入性的方式来做,例如,通过在functions.php
的顶部包括我的functions_custom.php
文件,这个文件将包含函数和add_filter()
调用的集合,以便在某些事件上挂钩这些函数。这样能实现我的目标吗?
这是我的第一次尝试:
<?php
function alter_title( $title, $id = null ) {
return 'Altered title: ' . $title;
}
add_filter( 'the_title', 'alter_title', 10, 2 );
?>
这会改变所有上下文中的所有帖子标题,包括Dashboard中的帖子列表。但是我只需要在视图上下文中改变它(这也不影响<title>
标签中使用的文本)。也许我可以以某种方式嗅探这个上下文,并仅在检测到视图模式时进行更改?
不久前,我需要做类似的事情,我的快速和简短的解决方案是有一个"api";(
-
为特定的帖子类型创建一个模板,并使用PHP生成一个帖子ID指示器:
$post = get_post(); echo "var post_id = '".$post->ID."';";
-
我创建了一个自定义API,它"接受"$_POST请求"post_id"参数,它将从数据库中获取适当的/自定义(在您的情况下,将显示给用户的内容)内容与post_id从$_POST请求。
-
然后对于每个帖子将有一个ajax请求的API发送post_id和获取所有需要的信息(在你的情况下的帖子标题和正文),然后使用eg。jQuery
.append()
也将分别用响应帖子标题和正文填充帖子标题。
同样,如果你想避免额外的请求,你应该尝试用PHP生成"用户可见"的内容。这意味着您需要在加载页面之前收集内容,并将其echo
放在默认内容的位置。
我想你应该在functions.php中创建一个函数,该函数接受$post->ID并从数据库中获取标题和正文。然后你应该在每个循环和单个post模板上调用该函数,如果你理解我的话。
如果您正在查看管理页面,则is_admin()
将返回true
。你可以这样写:
function alter_title( $title, $id = null ) {
if(is_admin()){
return $title;
}else{
return 'Altered title: ' . $title;
}
}
add_filter( 'the_title', 'alter_title', 10, 2 );