caducar las publicaciones de usuario de wordpress

4

Estoy tratando de hacer un tema de WordPress clasificado y tengo que hacer que las publicaciones de los usuarios expiren más la fecha en la que se publiquen. Los usuarios solo pueden publicar sus publicaciones en tipos de publicaciones, no como publicaciones normales de WordPress.

¿Alguien sabe cómo puedo hacerlo?

Actualización: De acuerdo con las respuestas dadas a esta pregunta, hasta ahora tengo que decir que la fecha de caducidad de los tipos de publicación no es lo que quiero, ya que los usuarios pueden cambiar la fecha de 30 días (es decir, 30 días después de publicar su publicación). la publicación se eliminará permanentemente y la fecha se agregará automáticamente a la publicación en el back-end, no manualmente con el administrador o el autor. Espero que mi significado sea más claro ahora.

Gracias especiales a: @sakibmoon. Gracias.

    
pregunta Scott Wolter 21.05.2015 - 02:24

1 respuesta

6

Puede establecer la fecha de caducidad como valor meta de publicación. En single.php puede mostrar esa fecha fácilmente consultando el meta de publicación.

Consulte update_post_meta () y get_post_meta ()

Ahora, la segunda parte de tu pregunta es bastante complicada. Puedo pensar en 2 soluciones.

  • Cron

Puede usar wordpress cron para ejecutarse en un intervalo de tiempo para verificar qué publicación ha caducado y eliminar / establecer como draft / lo que no quiera hacer con esas publicaciones. Consulte wp_cron ()

Pros:

  1. Muy fácil de implementar.

Cons:

  1. La tarea cron no se activará si nadie visita su sitio. (Para sitios ocupados con usuarios frecuentes, esto no es un problema)

  2. Si tienes muchas publicaciones, revisar cada publicación en un intervalo de tiempo tendrá una penalización de rendimiento.

  3. No es confiable en absoluto. La publicación no caducará exactamente a la hora especificada.

(Siempre he odiado a wp_cron () y nunca lo uso yo mismo)

Una opción un poco mejor es usar la tarea cron de su servidor. Pero incluso esto no garantizará la caducidad de la publicación en el momento exacto, ya que tiene que ejecutar cron en un intervalo de tiempo y también hay una penalización de rendimiento.

  • Modificar archivo Single.php y publicar consulta

En mi opinión, una opción mejor es verificar la fecha de caducidad posterior a su single.php y mostrar un mensaje que verifique la fecha de caducidad. También puede eliminar / establecer como draft , la primera vez que un usuario solicite esta página después de la fecha de caducidad, lo que provocará 404 visitas posteriores.

Para eliminar las páginas caducadas de las páginas de archivo, puede utilizar pre_get_post gancho de acción para modificar la consulta en función de el post meta.

Pros

  1. Fecha de vencimiento exacta.
  2. Control total sobre lo que quieres hacer.
  3. penalización de rendimiento insignificante.

Cons:

  1. Solo un poco más de trabajo.

(Teniendo en cuenta las ventajas, no es mucho más trabajo. Si yo fuera tú, elegiría esta opción)

  • Use un complemento

Hay muchos complementos que parecen hacer esto exactamente. Pero no sé cómo funcionan o si pueden cumplir sus requisitos. Tienes que revisar esto tú mismo.

EDIT

  

Estoy tratando de hacer un tema de WordPress clasificado y tengo que hacer que las publicaciones de los usuarios expiren más la fecha en la que se publiquen. Los usuarios solo pueden publicar sus publicaciones en tipos de publicaciones, no como publicaciones normales de WordPress.

Tienes que usar register_post_type () para crear un tipo de publicación personalizada. También deberá crear una taxonomía personalizada si desea categorizarlos. Use register_taxonomy () para eso.

También vea ¿Hay alguna diferencia entre taxonomías y categorías? ?

  

De acuerdo con las respuestas dadas a esta pregunta, hasta ahora tengo que decir que dar la fecha de caducidad a los tipos de publicación por meta publicación no es lo que quiero, ya que los usuarios pueden cambiar que yo quiero la fecha de 30 días (significa 30 días después de publicar sus publicación) la publicación se eliminará permanentemente y la fecha se agregará automáticamente a la publicación en el back-end, no de forma manual con el administrador o el autor.

Esto es lo que está mal. Guardar el meta del post no se hace por el back-end. Cómo vas a crear y actualizar el metadatos depende de ti. Para su caso, será mejor usar el gancho de acción save_post y actualizar el expire_date desde allí. Un ejemplo de ejemplo sería

//This hook will fire when a post is created or updated.
add_action('save_post', 'set_expire_date_meta')

function set_expire_date_meta( $post_id ) {
    //We are checking if the saved post belongs to the CPT
    if( 'custom-post-type-name-that-you-registered' == get_post_type( $post_id ) ) {
        $meta = $get_post_meta($post_id, 'expire_date', true);
        //If the meta already exists, the post is being updated and we don't need to save the meta again
        if( $meta == '' ) {
            $timestamp_30day = strtotime("+1 month");
            update_post_meta( $post_id, 'expire_date', $timestamp_30day);
        }
    }
}

Como desea que la fecha de caducidad funcione solo para el tipo de publicación personalizada, agregue una condición adicional en la consulta principal como la función is_post_type_archive( 'custom-post-type-name-that-you-registered' ) en la función remove_expired_post_from_main_query que mencioné para que la consulta principal no se modifique para ninguna otra publicación escribe como publicación / página, etc.

En expire_posts_to_404_redirect , cambie is_single() a is_singular('custom-post-type-name-that-you-registered') para que solo estos tipos de publicaciones personalizadas vayan a 404.

//This filter will show 404 page for expired posts for the cpt that you registered
add_filter('template_redirect', 'expire_posts_to_404_redirect' );
function expire_posts_to_404_redirect() {
    global $wp_query;
    global $post;

    if( is_singular('custom-post-type-name-that-you-registered') ) {
        $expire_date = get_post_meta($post->ID, 'expire_date', true);
        if( ($expire_date != '') && ($expire_date < time()) ) {
            $wp_query->set_404();
            status_header( 404 );
        }
    }
}

//This action will alter main query to remove expired posts from archive pages of the CPT that you registered
add_action('pre_get_posts', 'remove_expired_post_from_main_query');
function remove_expired_post_from_main_query($query) {
    if( $query->is_main_query() && !is_admin() && is_post_type_archive('custom-post-type-name-that-you-registered') ) {
        //We are comparing expiry date with current timestamp.
        //It will only keep the posts with expiry_date > current timestamp
        $meta_query = array(
            array(
                'key' => 'expire_date',
                'value' => time(),
                'compare' => '>'
            )
        );
        $query->set( 'meta_query', $meta_query );
    }
}

Espero que esto ayude.

    
respondido por el sakibmoon 21.05.2015 - 06:16

Lea otras preguntas en las etiquetas