0

I have two plugins, one uses the function wp_insert_post(), the other has a code like this:

add_action('future_to_publish', 'myFunc', 10, 1);
add_action('new_to_publish', 'myFunc', 10, 1);
add_action('draft_to_publish', 'myFunc', 10, 1);

function myFunc( $postID ) {

}

When the first plugin runs wp_insert_post(), $postID is always empty. If I use the hook "publish_post" and press update then $postID does have a value, so what I am doing wrong?

3 Answers 3

5
  1. Read the Codex,
  2. Look at the function in the core file,
  3. Modify your code as follows:

    function myFunc( $post ) {
    
        $postID = $post->ID;
    
    }
    

The post transistion does not send the post ID, it sends the complete post object. Sometimes a simple die(var_dump($postID)); (or whatever you use as parameter) helps to find out what will be send to the callback. If you don't know how many parameters are send to the callback, put a die(var_dump(func_get_args())); at the first line of your callback.

1
function myFunc( $post ) {
    global $post;
    $myPostId = $post->ID;

    //your function here

}

For getting the $postID value, you just insert global $post expression in your function. It worked for me.

6
  • 1
    This does not appear to answer the question.
    – s_ha_dum
    Jun 5, 2013 at 21:59
  • 1
    "This answer was automatically flagged as low-quality because of its length and content", which I am sure you don't want. Please explain what your code does and why it would solve the problem.
    – s_ha_dum
    Jun 5, 2013 at 22:01
  • It is answering the question. JUST READ THE ENTIRE ORIGINAL QUESTION: "$postID is always empty". For getting the $postID value, you just insert global $post expression in your function. @s_ha_dum, I appreciate your answer but you become too zealous (not jealous) in your willing to help
    – Val
    Jun 8, 2013 at 7:03
  • See the answer by @Ralf912
    – s_ha_dum
    Jun 8, 2013 at 12:16
  • 2
    The post object is passed through those filters to the callback. You don't need global anything because that function, by way of being hooked to those filters, already has access to the $post data. It doesn't matter if this a plugin or not. $postID, in the original code, should (probably) never be empty but trying to use an Object like a string or an integer might make it appear that way. That is not my downvote, by the way, and I'd appreciate it if you'd try not to be rude.
    – s_ha_dum
    Jun 8, 2013 at 16:07
0

wp_insert_posts() returns the post ID on success. The value 0 or WP_Error on failure.

$postId = wp_insert_post($args);
if(!$postId){
echo "Your post is not inserted that's why you've no post id :p"
}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.