ordtryk er et CMS, og derfor er indholdsmanipulation en af de vigtigste søjler i værktøjet. I dette indlæg vil du forstå den proces, der bruges af VP til at hente, hvad der skal vises, og også hvordan det er muligt at ændre denne proces.
formålet med denne tekst er på ingen måde en erstatning for officiel dokumentation, som altid skal konsulteres. Dit mål er at placere et sted, hvad begyndere skal vide, før de begynder at søge efter mere information.
- hvad er et spørgsmål?
- hvad er det?
- oprettelse af dine egne sløjfer:
- oprettelse af en loop med Vp_forespørgsel
- oprettelse af en loop med get_posts ()
- forskel mellem Get_posts og get_posts()
- global tekst og tekst tekst
- hvorfor skal ikke forespørgselsindlæg() bruges i temafiler?
- Sådan ændres hovedforespørgslen? Brug pre_get_posts
- et andet eksempel: Slet en kategori fra listen over blogindlæg
- konklusion
hvad er et spørgsmål?
forespørgsel på engelsk betyder forespørgsel og er normalt det udtryk, der bruges til at henvise til en erklæring i KVM (struktureret forespørgselssprog). Vi kalder forespørgsler for forespørgsler til indhold, der er foretaget gennem klassen.
hvad er det?
er PHP-klassen bag alle søgninger efter indhold. Det accepterer flere parametre i sin konstruktion, herunder posttyper, metadata, taksonomier og datoer, samt gør det muligt at oprette brugerdefinerede parametre.
klassen udløses på alle anmodninger til din hjemmeside, med undtagelse af måske meget sjældne undtagelser for Plugin-kontrollerede adresser, der afbryder den normale strømning. Hver gang vi kalder en side, et indlæg, en taksonomi sigt og etc. Den ønskede adresse fortolkes via omskrivnings-API ‘ en og opretter en anmodning baseret på de fortolkede argumenter.
oprettelse af dine egne sløjfer:
når vi henviser til sløjfen i ordtryk taler vi om iteration (uden n) af de valgte indlæg. Normalt har vi kun en løkke, som altid ligner koden nedenfor:
hvis der er indlæg, skal du gentage dem. Den første sætning inde i while
er the_post()
, som fortæller ordtryk at sætte variablerne i det næste indlæg af sløjfen i den globale variabel $post
via setup_postdata()
– metoden i klassen.
dette er udseendet af hovedsløjfen, det vil sige iterationen af det sæt indlæg, som ordtryk fandt ved afkodning af anmodningen og søgning efter det tilsvarende indhold. Hvis vi har brug for et andet sæt indlæg (relateret indhold, indhold i en bestemt kategori uden for din fil eller indlæg, der er offentliggjort efter det, der vises, for eksempel), kan vi gøre dette på to måder: oprette et nyt objekt eller kalde funktionen get_posts (). De gør begge det samme, men de vil vende tilbage til dig forskellige ting.
oprettelse af en loop med Vp_forespørgsel
et simpelt eksempel på, hvordan man opretter en loop med Vp_forespørgsel:
bemærk, hvordan testen og iterationen på have_posts()
forbliver der, ligesom the_post()
, men denne gang som metoder til den variabel, vi oprettede.
funktionen vp_reset_postdata () tjener til at gendanne den globale variabel $post
til sin tilstand før vores forespørgsel, det vil sige, den vil sætte tilbage i global $post
stillingen som global $wp_query
, som vi vil se senere.
oprettelse af en loop med get_posts ()
det samme eksempel ved hjælp af funktion get_posts()
:
funktionen get_the_title () accepterer som parameter et indlæg, der er forskelligt fra hvad der er i den globale variabel $post
. Hvis du har brug for at bruge funktionen_content (), skal du for eksempel ændre den globale som følger:
forskel mellem Get_posts og get_posts()
den grundlæggende forskel er, hvad du har adgang til. Du har f.eks. adgang til antallet af indlæg fundet i alt ($query->found_posts
) og antallet af mulige sider ($query->max_num_pages
). Funktionen get_posts()
bringer på den anden side nogle allerede udfyldte argumenter ud over, at de som standard er lidt hurtigere: den passerer parameteren no_found_rows
som sand, hvilket forhindrer den endelige forespørgsel i at have indstillingen SQL_CALC_FOUND_ROWS
og dermed fritager Myskl fra at passere det samlede antal fundne rækker.
global tekst og tekst tekst
i denne proces med fortolkning af anmodningen og generering af klasseobjektet skaber to globale variabler: $wp_query
, som du sikkert har set et sted, og $wp_the_query
, som altid vil være den originale kopi af det, der blev anmodet om af brugeren. Hvis nogen messer med $wp_query
, kan vi i det mindste få det tilbage til sin normale tilstand med $wp_the_query
. Dette er præcis, hvad funktionen() gør.
hvorfor skal ikke forespørgselsindlæg() bruges i temafiler?
dette er standardstrømmen af en anmodning til en adresse på din side uden for instrumentbrættet:
du bør ikke bruge
Personsøgning er et andet eksempel på, hvordan brug af query_posts()
kan forstyrre dit arbejde. Hvis du vil vise 15 indlæg pr.side i en bestemt kategori og forsøge at overskrive STANDARDPR-beløbet gennem query_posts()
, vil du have en situation, hvor det første element på den anden side skal være den 16., men det er faktisk kun den 11.
Sådan ændres hovedforespørgslen? Brug pre_get_posts
brug af query_posts()
har været uhensigtsmæssigt i nogen tid. Siden da har mange forklaret hvorfor og opfordret udviklere til at bruge handlingen pre_get_posts, med særlig vægt på Leo Bahiano, der kærligt kaldte handlingen preguetinho (brugen af ordspil med preguetinho do Leo Bahiano er godkendt i kommentarerne).
brugen er enkel. For at eliminere Personsøgning i søgning kan du for eksempel bruge følgende kode i dit temas functions.php
:
koden tildeler sin funktion til hook pre_get_posts
, så dens funktion udføres hver gang en forespørgsel behandles. Inden for det skal vi sørge for, at vi kun skal arbejde på de nødvendige forespørgsler, så vi tester, om vi virkelig er i den “forreste” del af siden (på denne måde forstyrrer vi ikke noget fra panelet), hvis vi er i hovedforespørgslen på siden, det vil sige, hvis den pågældende forespørgsel er $wp_the_query
, og hvis alt dette er sandt, ændrer vi attributten posts_per_page
til -1
, hvilket betyder ingen grænse for indlæg.
et andet eksempel: Slet en kategori fra listen over blogindlæg
hvis du har brug for mange ændringer, kan du deltage i dem alle i en enkelt funktion: