仅在视图模式下修改WordPress帖子标题和正文


Alter WordPress post title and body in view mode only

我正在寻找如何在显示给普通用户时更改WordPress帖子标题和正文的方法。但不能在任何其他上下文中使用,例如在admin模块中。

手头的任务是获取一个查询参数,执行一些对外部web服务和数据库操作的调用,并替换标题和正文中的一些文本。<title>标签也应该包含更改后的标题。

我不寻找一个插件解决方案,而是我应该包括一个php文件与所有的代码,做所有必要的处理。

我的期望是我不需要深入干预主题文件。当然,我可以将我的代码注入到各自主题的page.phpcontent.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";(

  1. 为特定的帖子类型创建一个模板,并使用PHP生成一个帖子ID指示器:

    $post = get_post(); echo "var post_id = '".$post->ID."';";

  2. 我创建了一个自定义API,它"接受"$_POST请求"post_id"参数,它将从数据库中获取适当的/自定义(在您的情况下,将显示给用户的内容)内容与post_id从$_POST请求。

  3. 然后对于每个帖子将有一个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 );