verfallen WordPress-Benutzerbeiträge

Ich versuche, klassifiziertes WordPress-Theme zu machen, und ich muss die User-Posts zum Verfallsdatum machen und dieses Datum in den Post zeigen. Benutzer dürfen ihre Beiträge nur in Post-Typen veröffentlichen, nicht als normale WordPress-Posts.

Weiß jemand wie ich es schaffen kann?

Update: Nach den Antworten auf diese Frage bis jetzt muss ich sagen, Verfallsdatum zu den Post-Typen durch Meta-Post ist nicht das, was ich möchte, weil Benutzer ändern konnte, dass ich das 30 Tage Datum (bedeutet 30 Tage nach dem Veröffentlichen ihres Beitrags) möchte ) Der Beitrag wird permanent gelöscht und das Datum wird automatisch im Post-End nicht manuell mit Admin oder Autor hinzugefügt. Hoffe, meine Bedeutung ist jetzt klarer.

Besonderer Dank geht an: @sakibmoon. Vielen Dank.

Solutions Collecting From Web of "verfallen WordPress-Benutzerbeiträge"

Sie können das Ablaufdatum als Post-Meta-Wert festlegen. In single.php Sie dieses Datum einfach single.php , indem Sie das Post-Meta abfragen.

Siehe update_post_meta () und get_post_meta ()

Nun, der zweite Teil Ihrer Frage ist ziemlich schwierig. Ich kann mir 2 Lösungen vorstellen.

  • Cron

Sie können WordPress Cron in einem Zeitintervall verwenden, um zu überprüfen, welcher Beitrag abgelaufen ist und löschen / als draft / was auch immer Sie mit diesen Posts tun möchten. Siehe wp_cron ()

Vorteile:

  1. Sehr einfach zu implementieren.

Nachteile:

  1. Die Cron-Aufgabe wird nicht ausgetriggers, wenn niemand Ihre Website besucht. (Bei stark frequentierten Websites mit häufigen Benutzern ist dies kein Problem)

  2. Wenn Sie viel Post haben, wird die Überprüfung jedes Posts in einem Zeitintervall eine performanceseinbuße haben.

  3. Überhaupt nicht verlässlich. Der Post wird nicht genau zum angegebenen Zeitpunkt ablaufen.

(Ich habe immer wp_cron () gehasst und benutze es nie selbst)

Eine etwas bessere Option ist die Verwendung von Cron-Task von Ihrem Server. Aber auch das wird nicht nach Ablauf der Zeit zu genauem Zeitpunkt sicherstellen, wie Sie Cron in einem Zeitintervall ausführen müssen, und es gibt auch eine performanceseinbuße.

  • Ändern Sie Single.php Datei und Post Query

Eine bessere Option ist meiner Meinung nach, das Post-Ablaufdatum in Ihrer single.php zu überprüfen und eine Nachricht anzuzeigen, die expiration_date überprüft. Sie können auch als draft löschen / festlegen, wenn diese Seite zum ersten Mal von einem Benutzer nach dem Ablaufdatum angefordert wird, was 404 für einen weiteren Besuch verursacht.

Um die abgelaufenen Seiten von Archivseiten zu entfernen, können Sie den Aktions-Hook pre_get_post verwenden , um die Abfrage basierend auf dem Post-Meta zu ändern.

Pros

  1. Genaues Ablaufdatum
  2. Volle Kontrolle darüber, was Sie tun möchten.
  3. Vernachlässigbare performanceseinbußen

Nachteile:

  1. Nur ein bisschen mehr Arbeit.

(Angesichts der Vorteile, es ist nicht viel mehr Arbeit. Wenn ich du wäre, würde ich diese Option wählen)

  • Verwenden Sie ein Plugin

Es gibt viele Plugins , die genau das zu tun scheinen. Aber ich weiß nicht, wie sie funktionieren oder ob sie Ihre Anforderungen erfüllen können. Sie müssen diese selbst überprüfen.

BEARBEITEN

Ich versuche, klassifiziertes WordPress-Theme zu machen, und ich muss die User-Posts zum Verfallsdatum machen und dieses Datum in den Post zeigen. Benutzer dürfen ihre Beiträge nur in Post-Typen veröffentlichen, nicht als normale WordPress-Posts.

Sie müssen register_post_type () verwenden , um einen benutzerdefinierten Post-Typ zu erstellen. Sie müssen auch benutzerdefinierte Taxonomie erstellen, wenn Sie sie kategorisieren möchten. Verwenden Sie register_taxonomy () dafür.

Siehe auch Unterschiede zwischen Taxonomien und Kategorien?

Nach den Antworten auf diese Frage bis jetzt muss ich sagen, verfall Datum zu den Post-Typen durch Meta-Post ist nicht das, was ich möchte, weil Benutzer ändern konnte, dass ich das 30 Tage Datum (bedeutet 30 Tage nach dem Veröffentlichen ihrer Post) wollen Post wird dauerhaft gelöscht und das Datum automatisch dem Post im Backend hinzugefügt, nicht manuell mit Admin oder Autor.

Hier liegst du falsch. Das Speichern von Post-Meta wird nicht vom Back-End durchgeführt. Wie Sie Post-Metas erstellen und aktualisieren, bleibt Ihnen überlassen. In diesem Fall empfiehlt es sich, den Aktions-Hook save_post zu verwenden und das expire_date von dort zu aktualisieren. Ein Beispiel wäre

 //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); } } } 

Da das Ablaufdatum nur für den benutzerdefinierten Post-Typ funktionieren soll, fügen is_post_type_archive( 'custom-post-type-name-that-you-registered' ) in der remove_expired_post_from_main_query function, die ich bereits erwähnt habe, eine zusätzliche Bedingung für die Hauptabfrage ein, wie is_post_type_archive( 'custom-post-type-name-that-you-registered' ) Abfrage wird für keinen anderen Beitragstyp wie Post / Seite usw. geändert

expire_posts_to_404_redirect in expire_posts_to_404_redirect is_single() in is_singular('custom-post-type-name-that-you-registered') so dass nur dieser benutzerdefinierte Post-Typ zu 404 geht.

 //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 ); } } 

Hoffe das hilft.