Cum să forțezi actualizarea tuturor articolelor după import

20 feb. 2018, 10:31:34
Vizualizări: 25.7K
Voturi: 2

Recent am importat un număr mare de articole personalizate în WordPress. Totul funcționează bine, cu excepția unei taxonomii care este importată, dar nu se afișează în frontend până când nu apăs butonul "actualizare" pentru fiecare articol. Am 810 articole și aceasta nu este o soluție...

Cred că ar trebui să existe o modalitate de a rula o comandă MySQL pentru a forța actualizarea tuturor articolelor fără a face modificări. Vă rog să mă ajutați cu comanda, am căutat plugin-uri și nu pot găsi nimic potrivit

Mulțumesc

4
Comentarii

Mic indiciu, interfața de utilizator are și o acțiune în masă pentru a actualiza toate articolele. Ar trebui să schimbi lista tuturor articolelor, opțiunile din dreapta sus ale ecranului pentru numărul de articole. După aceasta, folosește acțiunea în masă pentru a actualiza toate articolele listate.

bueltge bueltge
20 feb. 2018 11:05:24

Îmi pare rău, nu sunt programator... dacă te referi la acțiunea în masă din ecranul de administrare, nu funcționează. Singurul lucru care funcționează pentru mine este să merg la fiecare articol și să apăs butonul "actualizează".

AlexPTY AlexPTY
20 feb. 2018 11:14:52

Da, este pentru utilizatori, fără cunoștințe de programare. Vezi pe wp-admin/edit.php și selectează opțiunea de editare în opțiunile în masă, selectează de asemenea toate articolele și apasă Aplică. Acum primul articol selectat deschide vizualizarea rapidă de editare și poți schimba datele, care se vor actualiza în toate articolele selectate după actualizare.

bueltge bueltge
20 feb. 2018 11:35:57

cum am spus, nu funcționează din acțiunea în masă, doar butonul "actualizare" de la fiecare post funcționează

AlexPTY AlexPTY
20 feb. 2018 11:50:04
Toate răspunsurile la întrebare 3
5

Există 2 moduri în care poți face acest lucru. Primul și mai dificil este să scrii un program, celălalt este să faci o actualizare în masă. De ce să complici când metoda ușoară funcționează la fel de bine? Mai ales că aceasta este o cerință unică.

Metoda ușoară:

  1. În panoul de administrare, selectează vizualizarea cu toate articolele pentru tipul tău personalizat
  2. Selectează toate articolele (bifează-le) - Poți vedea mai multe articole făcând clic pe 'Opțiuni ecran' în dreapta sus a vizualizării și crescând numărul de elemente pe pagină
  3. Fă clic pe săgeata în jos de lângă 'Acțiuni în masă' și selectează editare
  4. Apasă 'Aplică' - vei obține un ecran cu o selecție de modificări pe care le poți face
  5. Fă o modificare, cum ar fi adăugarea unei etichete sau schimbarea autorului (orice)
  6. Apasă 'Actualizează'

Asta ar trebui să fie suficient.

Metoda 'dificilă':

În cazul în care cineva dorește să folosească soluția cu cod, poți adăuga codul de mai jos în fișierul functions.php din tema ta copil.

function my_update_posts() {
    //$myposts = get_posts('showposts=-1');//Preia articolele țintă
    $args = array(
        'post_type' => 'post',
        'numberposts' => -1
    );
    $myposts = get_posts($args);
    foreach ($myposts as $mypost){
        $mypost->post_title = $mypost->post_title.'';
        wp_update_post( $mypost );
    }
}
add_action( 'wp_loaded', 'my_update_posts' );

Ține minte să rulezi acest cod doar o dată și apoi să îl elimini sau să comentezi linia add_action, altfel va rula de fiecare dată când o pagină nouă este încărcată.

Am inclus această opțiune în cazul în care cineva dorește un model de bază pentru actualizarea tuturor titlurilor de articole sau a altor proprietăți în toate articolele.

20 feb. 2018 11:31:33
Comentarii

Sau poți folosi -1 pentru toate articolele în loc de 1000 ca în acest exemplu.

bueltge bueltge
20 feb. 2018 13:20:13

Calea ușoară nu funcționează. Editarea rapidă nu funcționează cum am menționat mai devreme, doar editarea completă a articolului funcționează. Nu știu de ce, poate pentru că acest buton declanșează comanda "publică" în loc de "actualizează". Există vreo modalitate de a forța "publicarea" articolelor în loc de "actualizare"?

AlexPTY AlexPTY
20 feb. 2018 13:38:11

nu, nu funcționează. cred că voi edita manual toate articolele mâine, va dura câteva ore, dar deja am pierdut jumătate de zi căutând soluții. Mulțumesc tuturor

AlexPTY AlexPTY
20 feb. 2018 14:44:42

La fel ca @AlexPTY, acest cod trebuie să fie similar cu actualizarea în masă. Nu are niciun efect.

Michael Rogers Michael Rogers
27 mar. 2020 21:51:28

poți elimina linia $mypost->post_title = $mypost->post_title.'';. De asemenea, dacă folosești wp_insert_post( $mypost ); va fi puțin mai rapid. (nu va insera un post nou deoarece ID-ul este același)

Jules Jules
24 dec. 2020 14:27:46
9

Primul pas: Obțineți toate articolele utilizând get_posts sau WP_Query.

$query_posts = new WP_Query( array(
    'nopaging' => true,
) );

Al doilea pas: Faceți buclă pentru articole și utilizați wp_update_post() pentru fiecare articol, setând parametrul ID.

while ( $query_posts->have_posts() ) :
    $query_posts->the_post();
    wp_update_post( array(
        'ID' => get_the_ID(),
        'post_content' => get_the_content(),
    ) );
endwhile;

Plasați acest cod în acțiunea init sau în header/footer. Actualizați pagina o dată și eliminați codul. Plasați acest cod în functions.php și toate articolele dvs. vor fi actualizate la reîncărcarea paginii.

add_action( 'init', function () {
    $query_posts = new WP_Query( array(
        'nopaging' => true,
    ) );

    while ( $query_posts->have_posts() ) :
        $query_posts->the_post();
        wp_update_post( $post );
    endwhile;
    wp_reset_postdata();
} );
20 feb. 2018 11:58:42
Comentarii

Mulțumesc Maxim, dar acest cod a șters conținutul tuturor postărilor mele la reîmprospătare. Voi restaura totul și voi încerca altă soluție

AlexPTY AlexPTY
20 feb. 2018 13:31:58

setează conținutul din postarea curentă în post_content în funcția wp_update_post(). wp_update_post( array( 'ID' => get_the_ID(), 'post_content' => get_the_content() ) );

Maxim Sarandi Maxim Sarandi
20 feb. 2018 13:33:37

scuze, nu sunt programator. pot doar să copiez/lipește ;)

AlexPTY AlexPTY
20 feb. 2018 13:48:45

Am editat postarea mea.

Maxim Sarandi Maxim Sarandi
20 feb. 2018 13:50:40

scuze, dar doar șterge conținutul postării la reîmprospătare.

AlexPTY AlexPTY
20 feb. 2018 13:56:00

Am editat postarea mea. Am testat soluțiile mele pe site-ul meu. Toate funcționează bine

Maxim Sarandi Maxim Sarandi
20 feb. 2018 14:01:26

încă nu funcționează, doar butonul de "actualizare" din editarea postării face treaba. Cred că va trebui să editez toate cele 810 postări. Oricum, mulțumesc

AlexPTY AlexPTY
20 feb. 2018 14:12:41

Ce truc? Cum funcționează trucul? Prin hook-ul save_post? Editarea manuală...drum foarte lung ))

Maxim Sarandi Maxim Sarandi
20 feb. 2018 14:15:18

Poate trebuie să adaugi global $post înainte de wp_update_post( $post );, probabil că această lipsă este motivul pentru care conținutul postării este șters la actualizare?

Iurie Iurie
30 oct. 2022 01:18:22
Arată celelalte 4 comentarii
1
-1

Pentru oricine ar fi interesat în viitor: pentru a actualiza în masă postările una câte una, puteți utiliza extensia Chrome Web Scraper care va automatiza clicurile pe butonul de actualizare pentru fiecare postare.

6 mar. 2020 12:30:13
Comentarii

cum ai reușit să o faci să funcționeze? Încerc să o folosesc dar nimic nu merge cum trebuie

moeses moeses
4 feb. 2021 18:07:18