Wie können Benutzer eine Liste von Posts speichern?

Ich bitte dich nicht, den gesamten Code zu schreiben oder ein Plugin zu fragen, ich frage nach einer Möglichkeit, diese function zu erstellen, weil ich keinen Plan habe, diese function zu erstellen.

Dies ist die Voraussetzung: Es gibt viele Beiträge auf der Website. Gespeicherte Benutzer (Frontend-Benutzer) sollten über eine function verfügen, um die Liste der Posts zu speichern.

Ex :

  • Liste 01: Meine Lieblingsbeiträge
  • Liste 02: Blogging verwandte Beiträge
  • Liste 03: Später ansehen Beiträge

Ich möchte, dass Benutzer diese Arten von Listen erstellen können. Dann können sie beliebig viele Beiträge hinzufügen. Und diese Liste ist privat. Ich meine, nur der Benutzer kann auf die Liste zugreifen.

Dies ist etwas wie wir e-Mails auf Google Mail beschriften.

Was kann ich zum Speichern der Liste verwenden? Ich habe keine Ahnung, was ich dafür verwenden kann … Ist das zumindest mit WordPress möglich?

Solutions Collecting From Web of "Wie können Benutzer eine Liste von Posts speichern?"

Ich würde vorschlagen, benutzerdefinierte Tabellen zu verwenden, um die Dinge schlank zu halten.

Habe zwei Tabellen: Eine Tabelle mit Listen und eine Tabelle mit Beiträgen und deren Listen.

Die wp_lists (nennen wir sie wp_lists ) würde folgendermaßen aussehen:

 +----+---------+----------------+ | id | user_id | name | +----+---------+----------------+ | 1 | 2 | My list | | 2 | 2 | My second list | +----+---------+----------------+ 

Sie könnten hier mehr Spalten haben, wenn Listen mehr Daten hätten, wie eine Beschreibung oder eine zugehörige Farbe. Wenn die Tabelle zu wachsen beginnt, sollten Sie sie in zwei Tabellen aufteilen, mit einer separaten Tabelle für Benutzerlistenbeziehungen.

Und die lists-posts-Tabelle (nennen wir sie wp_post_list ) würde folgendermaßen aussehen:

 +---------+---------+ | post_id | list_id | +---------+---------+ | 2 | 2 | | 3 | 2 | | 2 | 1 | +---------+---------+ 

Vielleicht möchten Sie eine ID-Spalte, aber ich bin nicht sicher, wofür Sie sie brauchen würden, da die post_id / list_id Kombinationen alle eindeutig sein sollten, da Beiträge nicht mehr als einmal in einer Liste sein können.

Wenn also jemand eine Liste erstellt, fügt man sie in wp_lists . Sie können so viele erstellen, wie sie möchten, oder Sie können sie in PHP einschränken, indem Sie überprüfen, wie viele sie bereits haben.

Um die Listen zu erhalten, die zu dem aktuellen Benutzer gehören, würden Sie wp_lists basierend auf der Spalte user_id .

Wenn jemand einen Beitrag zu einer Liste hinzufügt, fügen Sie die Beitrags-ID neben der Liste in wp_post_list . Wenn Sie alle Beiträge in einer Liste list_id möchten, die Sie basierend auf der Spalte list_id abfragen, list_id die resultierenden IDs in eine WP_Query oder get_posts() .

Wenn du Beiträge durchsuchst, möchtest du zeigen, zu welcher der Listen des Benutzers es bereits gehört. In diesem Fall würden Sie wp_post_list basierend auf post_id , aber JOIN zu wp_lists und Ergebnisse auf solche mit Listen beschränken, die die aktuelle Benutzer-ID haben.

Sie können eine Schaltfläche auf der Vorderseite verwenden und die ID des aktuell angezeigten Beitrags im Meta des Benutzers speichern. Hier ist ein einfacher Weg, dies zu tun:

Gib einen Knopf auf der Vorderseite aus

Sie müssen eine Schaltfläche in Ihrer single.php (oder der single.php Seite) erstellen, damit der Benutzer den Beitrag als Favorit festlegen kann. Die folgende Vorlage tut dies. Die like-overlay class wird verwendet, um einen Ladeeffekt zu erzeugen, während die Anfrage verarbeitet wird.

    

Fügen Sie dem Button ein Click-Ereignis hinzu

Wenn der Benutzer auf die Schaltfläche klickt, senden Sie eine AJAX-Anforderung an den Server und aktualisieren Sie die Schaltfläche basierend auf den Ergebnissen. Möglicherweise müssen Sie das Skript lokalisieren, um die Rest-URL und andere Daten zu übergeben.

 $('#like-button').on('click',function (e) { e.preventDefault(); $.ajax({ type: 'GET', url: 'http://example.com/wp-json/my_route/v1/ajax_favorite', data: { post_id: $('#current-post-id').val(), user_id : $('#current-user-id').val() }, beforeSend: function() { $('#like-button').addClass('active').prop('disabled', true); }, success: function(data){ $('#like-button').removeClass('active').prop('disabled', false); if( data != null ){ if( data == '400' ) { $('#like-button').removeClass('selected'); } else if( data == '200') { $('#like-button').addClass('selected'); } } }, error:function(){ } }); }); 

Verarbeiten Sie die Ajax-Anfrage mit der REST-API

Erstellen Sie nun eine Ruhestrecke und bearbeiten Sie die Daten. Wenn die erhaltene Post-ID im Benutzermeta nicht vorhanden ist, fügen Sie sie hinzu und geben Sie einen erfolgreichen Code zurück. Wenn dies der Fall ist, entfernen Sie es und informieren Sie Ihr Skript darüber.

 add_action( 'rest_api_init', 'my_rest_routes'); function my_rest_routes() { // Path to ajax like function register_rest_route( 'my_route/v1', '/ajax_favorite/', array( 'methods' => 'GET', 'callback' => 'ajax_favorite' ) ); } function ajax_favorite(){ // If the ID is not set, return if(!isset($_GET['post_id']) || !isset($_GET['user_id'])){ return $data['status'] = '500'; } // Store user and product's ID $post_id = sanitize_text_field($_GET['post_id']); $user_id = sanitize_text_field($_GET['user_id']); $user_meta = get_user_meta($user_id,'_favorite_posts',false); // Check if the post is favorited or not if( in_array( $post_id, $user_meta ) ){ delete_user_meta($user_id,'_favorite_posts',$post_id); return $data['status'] = '400'; } else { add_user_meta($user_id,'_favorite_posts',$post_id); return $data['status'] = '200'; } } 

Sie können dies als Vorlage verwenden, um eine Schaltfläche auszugeben, die Daten vom Front-End zur database speichert. Vergessen Sie nicht, die Daten zu bereinigen und auch nonce zu verwenden.

Alles was Sie jetzt noch brauchen, ist, den _favorite_posts Benutzer-Meta zu bekommen, wann immer Sie ihn anzeigen wollen.

Wenn ich über die Benutzeroberfläche nachdenke, kommt mir so etwas in den Sinn.

Bildbeschreibung hier eingeben

Etwas ähnliches hat YouTube unter dem Video.

Wenn der Benutzer die Eingabe füllt und auf die Schaltfläche zum Eingeben oder meta_value der Liste meta_key _list_user_1 meta_value mit dem meta_key _list_user_1 und als Datensatz in der Tabelle meta_key mit dem meta_key _list_user_1 und dem meta_value als meta_key _list_user_1 .

Um einen Beitrag zu dieser Liste hinzuzufügen, müssen Sie den Datensatz in der Tabelle wp_postmeta mit _list_post_1 Wert meta_key Feld meta_key und dem Wert von umeta_id aus der umeta_id _list_user_1 im Feld meta_value .

wp_usermeta

 +----------+---------+--------------+------------+ | umeta_id | user_id | meta_key | meta_value | +----------+---------+--------------+------------+ | 100 | 1 | _list_user_1 | List 1 | +----------+---------+--------------+------------+ 

wp_postmeta

 +---------+---------+--------------+------------+ | meta_id | post_id | meta_key | meta_value | +---------+---------+--------------+------------+ | 1 | 1 | _list_post_1 | 100 | +---------+---------+--------------+------------+ 

Um alle Listen für Benutzer zu erhalten:

 SELECT * FROM `wp_usermeta` WHERE `user_id` = 1 AND `meta_key` LIKE "_list_user_%"; 

Um alle Beiträge für Liste 1 zu erhalten:

 SELECT * FROM `wp_posts` INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id) WHERE wp_postmeta.`meta_key` LIKE "_list_post_%" AND wp_postmeta.`meta_value` = 100;