it-swarm.dev

Volání funkce po vytvoření nového příspěvku pro vlastní příspěvek typu WordPress?

Předpokládám, že jsem vytvořil nový typ příspěvku 'product'. Existuje způsob, jak provést funkci (uživatel vytvořil), když byl tento nový příspěvek 'product' vytvořen?

7
dotty

V function.php:

function mynewproduct(){
    myfunction();
}
add_action( 'new_product', 'mynewproduct' );

Další a oficiální dokumentaci naleznete zde:

http://codex.wordpress.org/Post_Status_Transitions

5
Tom J Nowell

Hi @dotty:

Podívejte se na konec funkce wp_insert_post() v souboru /wp-includes/post.php (na řádcích 2148 až 2392 ve WordPress 3.0.1. WordPress tuto funkci používá jak pro přidávání, tak pro aktualizaci příspěvků.) )

Na konci má následující kód. Z tohoto kódu můžete identifikovat volání na wp_transition_post_status() (více o tom v bit) a máme akční háčky edit_post, post_updated, save_post a wp_insert_post ( upřímně řečeno, nevím, proč máme ty druhé místo namísto jen ) Můžete použít některý z těch, které odpovídají vašim potřebám:

<?php
wp_transition_post_status($data['post_status'], $previous_status, $post);
if ( $update ) {
  do_action('edit_post', $post_ID, $post);
  $post_after = get_post($post_ID);
  do_action( 'post_updated', $post_ID, $post_after, $post_before);
}
do_action('save_post', $post_ID, $post);
do_action('wp_insert_post', $post_ID, $post);
return $post_ID;

A jako @ Jan Fabry zmínil se, že v wp_transition_post_status() jsou nalezeny akční háky (na 2713 až 2717 z /wp-includes/post.php ve WordPressu 3.0.1.) Všimněte si, že jsou tři; použít podle potřeby:

<?php
function wp_transition_post_status($new_status, $old_status, $post) {
  do_action('transition_post_status', $new_status, $old_status, $post);
  do_action("${old_status}_to_$new_status", $post);
  do_action("${new_status}_$post->post_type", $post->ID, $post);
}
3
MikeSchinkel

Funkce wp_transition_post_status bude volána, a to spustí akci "${new_status}_$post->post_type", takže pokud se product přesune do stavu publish, akce publish_product se spustí.

2
Jan Fabry