OpenWebconcept / plugin-openpub-base

The OpenPub publication platform
https://openwebconcept.nl/bouwblokken
GNU General Public License v3.0
1 stars 3 forks source link

Foutieve volgorde berichten bij geüpdate publicatiedatum #21

Open sanderdekroon opened 10 months ago

sanderdekroon commented 10 months ago

Beschrijf de bug Als ik de publicatiedatum van een Openpub Item verzet, dan zie je dit niet terug in de sortering van de berichten wanneer je de berichten in een thema opvraagt.

Te reproduceren Stappen om het gedrag te reproduceren:

  1. Heb een bericht waarvan de publicatiedatum in het verleden ligt
  2. Noteer de positie van dit bericht wanneer je alle berichten in een thema opvraagt (zie Aanvullende context voor 'n voorbeeld URL)
  3. Wijzig de publicatiedatum van een bericht naar vandaag
  4. Zie dat de positie van dit bericht niet gewijzigd is, ondanks dat er op datum gesorteerd wordt

Aanvullende context Het gaat om zo'n soort API verzoek: https://website.loc/wp-json/owc/openpub/v1/items/active?limit=7&connected_type=openpub-item_to_openpub-theme&connected_items=13745&orderby=date

In dit geval hebben wij een thema 'Nieuws' die de berichten op de homepagina toont, gesorteerd op de publicatiedatum. Af en toe 'herpubliceren' we seizoensgebonden berichten (denk bijv. aan berichtgeving omtrent carbid schieten). We passen dan de publicatiedatum aan van een oud bericht naar vandaag. We zien dan alleen het bericht niet verschijnen op de homepagina; de berichten volgorde wordt niet geüpdatet in de API response.

Dit gebeurt alleen wanneer je berichte opvraagt binnen een bepaald thema.

mvdhoek1 commented 10 months ago

Ik heb even gekeken, in de code van de plug-in doen wij nu dit:

    /**
     * Get connected items of a post, for a specific connection type.
     */
    protected function getConnectedItems(int $postID, string $type): array
    {
        $connection = \p2p_type($type);

        if (! $connection) {
            return [
                'error' => sprintf(__('Connection type "%s" does not exist', 'openpub-base'), $type)
            ];
        }

        return array_map(function (WP_Post $post) {
            return [
                'id'      => $post->ID,
                'title'   => $post->post_title,
                'slug'    => $post->post_name,
                'excerpt' => $post->post_excerpt,
                'date'    => $post->post_date
            ];
        }, $connection->get_connected($postID)->posts);
    }

In bovenstaande wordt helemaal geen 'order' gebruikt. Lokaal heb ik het proberen te testen middels het toevoegen van de p2p query variabelen:

add_action('p2p_init', function(){
    $postID = 9871;
    $type = 'openpub-item_to_openpub-theme';
    $connection = \p2p_type($type);
    var_dump($connection->get_connected($postID, ['connected_orderby' => 'date', 'connected_order' => 'asc'])->posts); die;
});

Helaas lijkt het erop alsof deze variabelen niet meegenomen worden in de query. In dit voorbeeld las ik wel dat het misschien alleen werkt voor meta velden. Wellicht heb je hier wat aan.

sanderdekroon commented 10 months ago

Ja klopt, dat was mij ook al opgevallen =/

Maar is het een (te verwachten) functionaliteit dat nieuwsberichten standaard op publicatiedatum zijn gesorteerd én dat het mogelijk is om nieuwsberichten in een bepaald thema uit te lezen?

Als het antwoord ja is, moeten we opzoek gaan naar een oplossing in deze plugin. Ik zou dan willen voorstellen om een extra endpoint toe te voegen om (actieve) openpub-items uit te lezen in een gegeven thema. Dus zonder de p2p query arguments in de URL. Iets in de zin van: https://website.loc/wp-json/owc/openpub/v1/theme-items/active/naam-van-thema/?limit=7.

Als dat geen functionaliteit in deze plugin, los ik het op aan de consumer kant

mvdhoek1 commented 10 months ago

Of je voegt de sortering hier toe. Op zich vind ik het geen probleem om de connected items altijd te sorteren op datum. En anders kunnen we onderscheid maken dmv een parameter in de url.