¿Cómo verifico si el estado de una publicación está configurado en borrador o pendiente?

2

Me gustaría verificar el estado de una publicación, en particular, quiero saber si una publicación está configurada como borrador o se publica de forma privada.

Tengo el siguiente código:

   if ('draft' !=  get_post_status() || is_user_logged_in()) {
        $this->render();
    }
    else {
        wp_redirect( site_url('404') );
        exit;
    }

Comprueba si el estado de las publicaciones no está configurado como borrador o verifica si están conectados y luego las publica o redirige a la página 404.

Por alguna razón, las publicaciones publicadas de forma privada son visibles para los usuarios que no han iniciado sesión y estoy intentando solucionar este problema.

    
pregunta Neelam Khan 28.02.2018 - 13:53

2 respuestas

6

Para verificar la publicación con el estado de publicación private , puede ejecutar lo siguiente:

if (get_post_status() == 'private' && is_user_logged_in()) {
     // it's private and user is logged in, do stuff
} elseif (get_post_status() == 'draft') {
     // it's draft, do stuff
} else {
      // it's something else, do stuff
}

O, en su configuración actual, solo puede mostrar publicaciones publicadas a través de:

if (get_post_status() == 'publish') {
     // it's published, do stuff
     $this->render();
}

Puede obtener más información sobre los estados de las publicaciones a través de la página de códice .

    
respondido por el Christine Cooper 28.02.2018 - 14:03
1

Creo que el problema es con tu lógica. || significa que si se cumple alguna de las condiciones, se procesará, especialmente si la primera condición se cumple, ya no se verificará la segunda. Así que tu código será como abajo-

if( !is_user_logged_in() ) {
    return; // or do whatever you want to do if the user isn't logged in.

    // Or these below things 

    // wp_redirect( site_url('404') );
    // exit;
}

if ( 'private' === get_post_status()) {
    // Only render private posts.
    $this->render();
} else {
    wp_redirect( site_url('404') );
    exit;
}

Entonces, lo que hemos hecho aquí es primero, verificamos si el usuario ha iniciado sesión o no. Si no ha iniciado sesión lo estamos devolviendo desde allí. No está llegando a la siguiente condición. De esta manera puede evitar que los usuarios que no han iniciado sesión vean esta publicación. En algunos códigos se explica cómo se satisface la primera condición y if no está comprobando la siguiente condición. Así que los usuarios que no hayan iniciado sesión podrán ver tu publicación. Ahora en el segundo bloque if estamos revisando el estado de la publicación. Si la publicación solo tiene private , se procesará. De lo contrario, será redirigido.

  

De todas formas, algunas pequeñas sugerencias, usan !== en lugar de != y === en lugar de == . Estos tipos de cheques también y lo hace estrictamente verificado. Mira mi código, usé estos.

Espero que esto te ayude.

    
respondido por el CodeMascot 28.02.2018 - 14:16

Lea otras preguntas en las etiquetas