Ottenere l'ID dell'autore del post fuori dal loop
Ho bisogno di inserire nella dashboard di modifica del post una metabox con l'email dell'autore (o altri campi meta dell'utente). In modo che possa essere modificata quando l'amministratore rivede questo post.
$meta_id = get_the_author_meta( 'user_email', $user_id );
$meta_box = array(
'id' => 'my-meta-box',
'title' => 'DATI AZIENDA',
'page' => 'post',
'context' => 'normal',
'priority' => 'high',
'fields' => array(
array(
'name' => 'Casella e-mail',
'id' => 'mail',
'type' => 'text',
'std' => $meta_id
)
)
);
Questo codice funziona quando $user_id è un numero intero (quando inserisco manualmente ad esempio 4) ma voglio ottenere dinamicamente l'ID dell'autore corrente ($user_id
).
get_the_author_meta('user_mail')
dovrebbe funzionare senza specificare $user_id
(il codex lo dice :)) ma il codice è in functions.php
e fuori dal loop quindi non funziona. Sto iniziando con WordPress e PHP quindi non so come procedere.
Ho provato anche questo:
global $post;
$user_id=$post->post_author;

Il modo più semplice sarebbe utilizzare get_post_field()
:
$post_author_id = get_post_field( 'post_author', $post_id );
Per maggiori dettagli su questo argomento: dai un'occhiata a questa risposta su StackOverflow.

Puoi utilizzare quanto segue:
/**
* Ottiene l'autore del post specificato. Può anche essere utilizzato all'interno del loop
* per ottenere l'ID dell'autore del post corrente, senza passare un ID post.
* Al di fuori del loop è necessario passare un ID post.
*
* @param int $post_id ID del post
* @return int ID dell'autore del post
*/
function wpse119881_get_author( $post_id = 0 ){
$post = get_post( $post_id );
return $post->post_author;
}

Mmh, non funziona per me - penso che la funzione debba essere agganciata a uno dei filtri ma non so quale.

Per me funziona... sei sicuro di star passando un ID post (valido)?

Ma io voglio mostrare questo campo meta nella schermata di modifica per ogni post (non solo per uno) e l'autore del post può essere diverso, quindi $post_id deve essere caricato dinamicamente in base alla schermata di modifica.

add_action( 'edit_form_after_title', 'myprefix_edit_form_after_title' );
function myprefix_edit_form_after_title() {
global $post;
$author_id=$post->post_author;
$authord = get_the_author_meta( 'user_email', $author_id);
echo $authord;
}
Con questa funzione sono riuscito a visualizzare l'email dell'autore del post nella schermata di modifica del post. Non so ancora come farla funzionare con un campo meta personalizzato, ma penso di essere più vicino alla soluzione ora.
