Cómo obtener ID de publicación en WordPress Admin

Estoy desarrollando un plugin de WordPress y necesito obtener el ID de publicación actual
en la pantalla de edición de Escribir / Escribir página (fuera del ciclo).

También necesito hacerlo antes del enlace “admin_print_scripts”, ya que me gustaría pasar algunos datos a un archivo javascript.

No puedo usar:

$id = $_GET['post']; 

porque la URL no incluye esta variable cuando agrega una nueva publicación o página.

Hasta ahora he probado estas opciones, pero ninguna de ellas funcionó:

A) Esto devuelve una ID de 0

 function myplugin_setup() { global $wp_query; $id = $wp_query->get_queried_object_id(); var_dump($id); } add_action('admin_init', 'myplugin_setup' ); 

B) Esto devuelve una ID de nulo

 function myplugin_setup() { global $wp_query; $id = $wp_query->post->ID; var_dump($id); } add_action('admin_init', 'myplugin_setup' ); 

C) Esto también devuelve una ID de nulo

 function myplugin_setup() { global $post; $id = $post->ID; var_dump($id); } add_action('admin_init', 'myplugin_setup' ); 

Asegúrese de llamar a la publicación global $ después de la consulta de WordPress. Si agrega una acción a init o admin_init, la consulta no está lista, por lo que no hay nada que pueda obtener de la variable global $ post.

Mi consejo sería verificar la referencia de acción de esta página: http://codex.wordpress.org/Plugin_API/Action_Reference y elegir una que funcione para usted.

Por ejemplo, hice esto:

 add_action( 'admin_head', 'check_page_template' ); function check_page_template() { global $post; if ( 'page-homepage.php' == get_post_meta( $post->ID, '_wp_page_template', true ) ) { // The current page has the foobar template assigned // do something } } 

Y pude obtener la identificación de la página en el administrador de WP

Utilizar:

 global $post 

al comienzo de tu función. A continuación, debe tener acceso a $ post-> ID para obtener la identificación de la publicación actual. Esto funcionará para publicaciones nuevas y existentes.

El problema es que estás usando admin_init hook. Si nos fijamos en Action Reference – http://codex.wordpress.org/Plugin_API/Action_Reference – verá que este gancho se llama ANTES de buscar publicaciones, por eso esas variables que usted utiliza todavía no están completas.

Puede usar alguna acción posterior (con alguna comprobación de is_admin ()), o puede usar el gancho de inicio de administrador para agregar acción a un enlace posterior, por lo que nuevamente se usará solo en admin.

La acción ‘admin_init’ se activa antes que cualquier otro enlace cuando un usuario accede al área de administración. Se activa antes de que la nueva publicación obtenga una identificación.

Para obtener la nueva identificación postal, puede usar ‘save_post’, que es una acción que se activa cada vez que se crea o actualiza una publicación o una publicación ( http://codex.wordpress.org/Plugin_API/Action_Reference/save_post ).

Primero puede incluir sus scripts usando ‘admin_enqueue_scripts’, luego use ‘save_post’ para obtener la nueva identificación de la publicación. El ‘admin_print_scripts’ se activa después de ‘save_post’ y puede usar wp_localize_script ( https://codex.wordpress.org/Function_Reference/wp_localize_script ), u otro método para pasar el nuevo id. De publicación a su javascript.

Necesitaba algo similar, pero se usó en una clase.

 class Foo { // this will hold the id of the new post private $postId = null; public function __construct() { // the actions are triggered in this order add_action('admin_enqueue_scripts', array($this, 'EnqueueScripts')); add_action('save_post', array($this, 'SavePost')); add_action('admin_print_scripts', array($this, 'LocalizeScripts')); } // enqueue your scripts and set the last parameter($in_footer) to true public function EnqueueScripts() { wp_enqueue_script('myJs', 'js/my.js', array('jquery'), false, true); } // use wp_localize_script to pass to your script the post id public function LocalizeScripts() { wp_localize_script('myJs', 'myJsObject', array('postId'=>$this->GetPostId())); } // if $post_id is different from global post id you are in the write/create post page, else you are saving an existing post public function SavePost($post_id) { if($post_id != $this->GetPostId()) { $this->SetPostId($post_id); } } private function GetPostId() { if (!$this->postId) { global $post; if($post) { $this->SetPostId($post->ID); } } return $this->postId; } private function SetPostId($postId) { $this->postId = $postId; } } 

Ahora, en tu javascript puedes usar:

 myJsObject.postId 

Si se trata de una nueva publicación / página, creo que la identificación aún no existe, porque la publicación no se ha publicado / agregado a DB. Si está intentando editar una publicación / página, creo que puede usar $id = $_GET['post'] ;

esto puede funcionar:

 $id = get_the_ID();