似乎$ post仅可用于在特定时间执行的钩子。我有一个“ init”钩子,需要使用$ post-> ID从数据库中提取一些数据。
到目前为止,我唯一的解决方法是在the_content上添加另一个过滤器,该过滤器使用$ post获取我需要的信息。不幸的是,它也将返回值回显到屏幕上,而无法将其实际返回给最初调用过滤器的函数。
这是提取所需数据的代码,但是回显并无法返回值:
add_filter('the_content', 'get_keyword');
function get_keyword()
{
global $post;
$keyword = get_post_meta( $post->ID, '_wpg_def_keyword', true );
return $keyword;
}
有没有人对如何获得我所需的任何建议,并将其传递回调用函数以供以后在插件中使用?
编辑:为了更清楚一点,我在init上运行了一个筛选器,该筛选器需要能够从数据库中检索有关当前帖子的信息。为此,它需要访问$ post-> ID。但这在init中是不可能的,那么如何获得所需的结果?
谢谢,
乔纳森
解决了:
原来答案只是使用url_to_postid像这样:
$keyword = get_post_meta(
url_to_postid( "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] ),
'_wpg_def_keyword',
true
);
即使从init完美工作。
动作钩子的行为完全相同,我都尝试过。我知道初始化还为时过早,我试图弄清楚如何实现所需的结果-这是一个在初始化时运行的过滤器,该过滤器从DB接收需要$ post-ID检索的信息。
—
乔纳森
您真的需要在init上执行此操作吗?为什么以后不钩?
—
罗斯特(Rarst)2011年
如果URL中没有提供默认关键字,则必须检索该页面的默认关键字。该关键字存储在数据库中,并且在执行脚本的其余任何部分之前必须先知道该关键字。如您在我提供的示例中所看到的,我只能在the_content中获取所需的值,但随后它会回显到屏幕,并且根本不会传递回调用函数。如果您还有其他解决方案,请提出建议。
—
乔纳森
请将您的解决方案转移到答案上,这将更符合站点的机制。同样,您也无需在标题中加上已解决的标题-您将能够接受答案,并且您的问题会被标记为已回答。
—
罗斯特2011年
init
为时过早global $post;
。也许如果您描述您要完成的工作会有所帮助。