✅ WEB- och WordPress -nyheter, teman, plugins. Här delar vi tips och bästa webbplatslösningar.

WP_Query WordPress Block Editor (Gutenberg) Motsvarande är getEntityRecords

38

Om du är ny på att skriva plugins för WordPress Block Editor (Gutenberg), kan du vara lite förvirrad över hur du gör allt du gjorde regelbundet, som att ta tag i inlägg med WP_Query.

Du kommer att bli mycket glad att veta att du i stort sett fortfarande kan göra allt du brukade göra med WP_Query genom att använda getEntityRecords.

Till exempel kan vi ta tag i de senaste inläggen genom att använda följande kodbit:

wp.data.select( ’core’ ).getEntityRecords( ’postType’, ’posts’ );

Du kan också fråga Custom Post Types (CPT) på samma sätt, så länge du har gjort din CPT tillgänglig via REST API.

wp.data.select( ’core’ ).getEntityRecords( ’postType’, ’my_custom_post_type’ );

Vi kan till och med skicka in några argument som kanske ser lite bekanta ut:

wp.data.select( 'core' ).getEntityRecords(
    'postType', 
    'post', 
    {
        'status': 'draft', 
        'per_page': 2, 
    } 
);
`

Du kan hitta den definitiva listan över de argument du kan överföra till funktionen här i Gutenbergs utvecklarguide.

Prova det i konsolen

Om du är inloggad på en webbplats och du tittar på gränssnittet kan du testa i stort sett vilket Gutenberg-kommando som helst. WordPress lagrar dem alla i det praktiska wpobjektet.

Om jag skriver kommandot ovan i konsolen på en av mina utvecklingswebbplatser får jag följande:

Använda getEntityRecords för att fånga inlägg i konsolen

Skärmdumpen ovan visar att konsolen returnerar två WordPress-postobjekt i JavaScript, som är utkastinlägg (enligt parametrarna jag skickade in getEntityRecords).

JavaScript Post Object

Om du utforskar postobjektet längre fram i konsolen kan du se att det finns massor av egenskaper som returneras för dig att komma åt.

    id: 42
    date: "2020-03-21T14:02:00"
    date_gmt: "2020-03-21T14:02:00"
    guid: {
        rendered: "https://wholesomecode.ltd/?p=42"
        raw: "https://wholesomecode.ltd/?p=42"
    }
    modified: "2020-03-21T14:02:00"
    modified_gmt: "2020-03-21T14:02:00"
    password: ""
    slug: "wp-query-and-the-wordpress-block-editor-gutenberg"
    status: "draft"
    type: "post"
    link: "https://wholesomecode.ltd/?p=42"
    title: {
        raw: "WP_Query and the WordPress Block Editor (Gutenberg)"
        rendered: "WP_Query and the WordPress Block Editor (Gutenberg)"
    }
    content: {
        raw: "Content goes here."    
        rendered: "<p>Content goes here.</p>↵"
        protected: false
        block_version: 0
    }
    excerpt: {
        raw: ""
        rendered: "<p>Content goes here.</p>↵"
        protected: false
    }
    author: 1
    featured_media: 101
    comment_status: "open"
    ping_status: "open"
    sticky: false
    template: ""
    format: "standard"
    meta: {
        _wcltd_meta_example_1: "1"         
        _wcltd_meta_example_2: "Hello"
    }
    categories: [1]
    tags: []
    country: []
    region: []
    city: []
    permalink_template: "https://wholesomecode.ltd/%postname%/"
    generated_slug: "wp-query-and-the-wordpress-block-editor-gutenberg"

Post Meta i Gutenberg

En sak du kommer att märka från postobjektet vi utforskade ovan är att all postmeta finns i objektet i metaegenskapen. Detta sparar oss att göra motsvarande get_post_meta()för detta objekt i Gutenberg.

Men om du vill få inläggets meta för ett enda inläggsobjekt, se get_post_metamotsvarande i Gutenberg-artikeln.

Få bilddetaljerna i Gutemberg

Postobjektet kan du få utvalda media-ID, som lagras i featured_mediafastigheten.

Du kan använda getMedia( WordPress Gutenberg-motsvarigheten tillwp_get_attachment_image) för att få egenskaperna för denna bilaga.

Gutenberg Post Loop

Låt oss utöka blocket som skapats av @wordpress/create-blockskriptet som jag skrev om tidigare för att inkludera ett exempel på hur man gör motsvarigheten till en WP_Query-loop i Gutenberg.

Först måste vi importera select()funktionen från wp-data. Vi kan göra detta genom att antingen referera till NPM-modulen:

import { select } from '@wordpress/data;

Eller genom att använda wpobjektet:

const { select } = wp.data;

Vi kommer att hålla fast vid den praxis som används i det skapade blocket och använda NPM-modulen och använda @wordpress/datametoden.

Här är en grundläggande implementering av motsvarigheten till en WP_Query-loop i Gutenberg.

Utvalda bilder

Observera att utvalda bilder måste ställas in för att de senaste två inläggen ska fungera korrekt.

import { registerBlockType } from '@wordpress/blocks';
import { select, withSelect } from '@wordpress/data';
import { __ } from '@wordpress/i18n';

registerBlockType( 'wholesomecode/wholesome-plugin', {
    title: __( 'Wholesome Plugin', 'wholesomecode' ),
    description: __( 'Just an Example Plugin', 'wholesomecode' ),
    category: 'common',
    icon: 'smiley',

    edit: withSelect( (select) => {
        const posts = select( 'core' ).getEntityRecords( 'postType', 'post', { 'per_page': 2 } );
        let media = {};
        posts.forEach( post => {
            media[ post.id ] = select('core').getMedia( post.featured_media );
        });
        return {
            posts,
            media
        };
    } )( props => {

        const { media, posts } = props;

        if (! posts ||! media) {
            return (<p>{ __( 'Loading...', 'wholesomecode') }</p>
            );
        }

        return (<ul>
            { posts.map( (post) => {
                    if (media[ post.id ]) {
                        const imageThumbnailSrc = media[ post.id ].media_details.sizes.thumbnail.source_url;
                    return (<li>
                            <img src={ imageThumbnailSrc } />
                            <a href={ post.link }>
                                { post.title.raw }
                            </a>
                        </li>) }
                }) }
            </ul>
        );
    } ),

    save() {
        return (<p>
                { __( 'Wholesome Plugin – Nothing to see here.', 'wholesomecode') }
            </p>
        );
    },
} );

Notera användningen av withSelectför att ladda data innan blocket laddas. Du kan ta reda på mer om withSelect genom att läsa Gutenberg-dokumentationen.

Ovanstående kod matar ut följande (mycket grundläggande) exempel på en artikellista och deras associerade miniatyrer i redigeraren:

WP_Query WordPress Block Editor (Gutenberg) Motsvarande är getEntityRecordsExempel Post Loop i Gutenberg.

Använder REST API

Om du vill få anpassad data via REST API, kolla in mitt inlägg om att använda REST API med WordPress Block Editor (Gutenberg).

Inspelningskälla: wholesomecode.ltd

Denna webbplats använder cookies för att förbättra din upplevelse. Vi antar att du är ok med detta, men du kan välja bort det om du vill. Jag accepterar Fler detaljer