2017-02-27 4 views
0

J'essaye d'éditer un champ dans les méta-données d'un article avant qu'il ne soit affiché à l'écran.Wordpress hook pour éditer les méta-données post avant d'afficher une page d'édition post

J'ai regardé le hook 'load-post.php', mais ceci est appelé avant que le post ne soit chargé (si j'ai bien compris), donc l'identifiant et les méta-données sont null. J'ai essayé d'autres hooks, mais je n'ai pas réussi à faire ce travail.

Le champ post-méta suivant doit être modifié avant d'être affiché sur la page d'édition.

$post_price = get_post_meta(get_the_ID(), 'price', TRUE);

Exemple: Prix = 10 dans la base de données, mais je veux que ce soit le prix = 15 lorsqu'il est affiché sur la page d'édition de poste.

Tous les liens, astuces et idées sont très appréciés. :)

Edit:
Ma solution actuelle:

add_action('load-post.php','calculate_price'); 
function calculate_price(){ 
    $post_id = $_GET['post']; 
    //get price from post by post_id and do stuff 
} 

Est-ce la bonne façon?

Répondre

0

EDIT: okay Je pensais que vous avez juste besoin de travailler avec ID de poste. Si vous devez modifier des objets de publication (déjà chargés depuis db et prêts à être imprimés), vous pouvez utiliser 'the_post' à la place. Puisque vous avez juste besoin d'accéder à poster id, je ferais quelque chose comme ceci:

function my_the_post_action($post) { 
    $screen = get_current_screen(); 
    if(is_admin() && $screen->parent_base == 'edit' && get_post_type() == 'product') { 
     $post_id = $post->ID; 
     $price = (int) get_post_meta($post_id, 'price', true); 
     update_post_meta($post_id, 'price', $price + 5); 
    } 
} 
add_action('the_post', 'my_the_post_action'); 

Cette partie:

get_post_type() == 'produit'

n'est pas nécessaire , mais vous devez déterminer pour quel type de message (en fonction du type de message, de la catégorie, du métafield, etc.) vous souhaitez exécuter ce code. Sans cela, il sera exécuté à chaque fois dans une requête d'administration. Ce code n'est pas testé, si quelque chose ne va pas, n'hésitez pas à le signaler.

+0

merci de votre réponse, mais ce crochet ne vous permet-il pas de changer la requête? Je n'ai pas besoin de changer la requête, j'ai besoin d'un crochet qui me permette de changer les données du résultat de la requête. – aboeka

+0

Merci, regarde bien mieux que ma solution, mais le 'the_post' semble être ignoré. Des idées? l'add_action est dans une fonction de construction dans une classe si cela est important. Je suis assez nouveau pour les hooks et wordpress. – aboeka

+0

Essayez d'utiliser cet extrait en dehors de la classe, dans le thème functions.php. Alors si rien ne se passe, mettez l'écho «fonctionne»; au début de my_the_post_action pour être vraiment sûr que rien ne se passe. Dans la zone d'admin regarder le code source près du corps, beacuse 'fonctionne' peut-être caché. – keyBeatz