Get the post id from a plugin

时间:2015-04-20 作者:John Simon

在构建插件时,我需要从插件中定义的函数中获取帖子id。所以我用

global $post;

$postid = $post->ID;

echo $postid;
以及

$id = get_the_ID();
    echo $id;
但它不起作用。然后我补充道

$url = explode(\'?\', \'http://\'.$_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
    $ID = url_to_postid($url[0]);
    echo $ID;
但仍然不起作用

1 个回复
SO网友:Adam Michael Wood

我在尝试完成这样的事情时遇到的一个问题是:你什么时候试图获得这些信息。

WordPress页面请求中发生了很多事情。请参见:https://codex.wordpress.org/Plugin_API/Action_Reference

如果您的插件文件中只有raw函数,它将在插件加载时尝试运行(这是过程的早期阶段),您将无法获得您要查找的信息。

我不确定你能多早做,但我通常坚持wp.

add_action( \'wp\', \'get_post_id\' );


function get_post_id () {
    global $wp_query;
    $post_id = $wp_query->post->ID;
}
我这样做的方式是:

class Main_Plugin_Class(){

public $post_id;

public __constructor(){

 ...

 add_action( \'wp\', array( \'this\', \'at_wp\') );

}

public function at_wp(){

 $post_id = $this->get_post_id();
 $this->object_that_will_actually_do_things = new Class_For_Doing_Things($post_id);

}

private function get_post_id(){
 global $wp_query;
 $id = $wp_query->post->ID;
 return $id;
}

}

结束

相关推荐

Split posts between databases

我的客户要求为基于WP的wordpress(单站点,而不是多站点)提供一个非常具体的解决方案。基本上,他想要的是,假设在1000篇文章之后,应该创建新的数据库(只有5个表,posts,posmeta和3个与分类相关的表),新的文章应该和所有的post meta一起存储在这个数据库中,直到它达到1000篇文章,然后处理重复。具有挑战性的部分是,所有这些数据库必须同时处于活动状态,因此WP应该能够同时访问来自主数据库和所有这些新创建的数据库(有5个表)的帖子。这可能需要hyperdb. 问题包括:如何告诉wp