0

I'm fairly new to Wordpress so not sure what I'm doing wrong. On my Wordpress site, users are able to create custom post types (products). I'm looking to disallow access to a page like this: example.com/post-a-listing by redirecting users to another page if they didn't create at least one product. Here's what I've tried but this isn't working..

  function yoursite_user_has_posts($user_id) {
      $result = new WP_Query(array(
        'author'=>$user_id,
        'post_type'=>'product',
        'post_status'=>'publish',
        'posts_per_page'=>1,
      ));
      return (count($result->posts)!=0);
    }

add_action( 'template_redirect', 'redirect_to_specific_page' );

    function redirect_to_specific_page() {

    if ( is_page('post-a-listing') && ! yoursite_user_has_posts($user_id) ) {

    wp_redirect( 'https://example.com/', 301 ); 
      exit;
        }
Marko I.
  • 542
  • 10
  • 38
  • I had similar issue sometime back. I have added ob_start() at the top of my script which worked like charm! – manian Apr 22 '17 at 19:58
  • thanks, but where exactly should I place it? Because this code I provided is in the functions.php – Marko I. Apr 22 '17 at 20:09
  • Try 1st & 2nd answers here http://stackoverflow.com/questions/19587154/wp-redirect-is-not-working – manian Apr 22 '17 at 20:31
  • Also, try the accepted answer here https://wordpress.stackexchange.com/questions/179070/wp-redirect-headers-already-sent – manian Apr 22 '17 at 20:32
  • answer there don't seem relative to my question or I'm missing something as non of those answers work for me.. – Marko I. Apr 22 '17 at 21:01

1 Answers1

3

The issue for the function is $user_id actually , from where you can get the $user_id with out referencing it?

Use get_current_user_id() inside the function to get the current User ID.

    function redirect_to_specific_page() {
       $user_id = get_current_user_id();
       if ( is_page('post-a-listing') && ! yoursite_user_has_posts($user_id) ) {
       wp_redirect( 'https://example.com/', 301 ); 
       exit;
       }
    }
Ahmed Ginani
  • 6,522
  • 2
  • 15
  • 33