改变WordPress仅在查看模式下发布标题和正文

时间:2016-09-18 16:14:57

标签: php wordpress

我正在寻找如何在向普通用户显示时更改WordPress帖子标题和正文的方式。但不是在任何其他环境中,即在管理模块中。

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

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

我的期望是我不必深深介入主题文件。当然,我可以在相应主题的page.phpcontent.php文件中注入我的代码。但我想以较少侵入性的方式执行此操作,例如将functions_custom.php文件包含在functions.php的顶部,此文件将包含一组函数和add_filter()调用将这些函数挂钩到某些事件上。这样可以实现我的目标吗?

这是我的第一次尝试:

<?php
function alter_title( $title, $id = null ) {
    return 'Altered title: ' . $title;
}
add_filter( 'the_title', 'alter_title', 10, 2 );
?>

这会导致所有上下文中所有帖子标题的更改,包括仪表板中的帖子列表。但我只需要在视图上下文中进行更改(这也不会影响<title>标记中使用的文本)。也许我可以某种方式嗅探这个上下文,并且仅在检测到视图模式时才进行更改?

2 个答案:

答案 0 :(得分:0)

前段时间我需要做类似的事情,我的快速和简短的解决方法就是拥有一个“API”(

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

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

  2. 我创建了一个自定义API,用“post_id”参数“获取”$ _POST请求,它会从数据库中获取足够的/自定义(在您的情况下是将向用户显示的内容)内容使用$ _POST请求的post_id。

  3. 然后对于每个帖子都会有一个ajax请求到该API发送post_id并获取所有需要的信息(在你的情况下发布标题和正文),然后使用例如。 jQuery的 .append()分别会在帖子标题和回复标题和正文中填充。

  4. 此外,如果您想避免额外的请求,那么您应该尝试使用PHP生成“用户可见”的内容。这意味着您需要在加载页面之前收集内容,并在默认内容的位置echo收集内容。

    我想你应该在functions.php中创建一个函数,它接受$ post-&gt; ID并从数据库中获取标题和正文。那么你应该在每个循环和单个帖子模板上调用该函数,如果你理解我的话。

答案 1 :(得分:0)

如果您正在查看管理页面,

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 );