
🔒 4 Viisi WordPressi postituse programmiliselt avaldamise tühistamiseks
Sait läks pärast pluginauuendust maas, sul on vaja kiiresti probleemne postitus peita, enne kui on liiga hilja. Ja nädal hiljem, kui viga on parandatud, see tagasi tuua. Või klient palub sul aegunud artikli otsingutulemustest eemaldada, kuid mitte jäädavalt kustutada.
Postituse staatuse käsitsi muutmine adminipaneelis töötab ühe või kahe postituse puhul. Aga kui neid on kümneid või loogika peab käivituma automaatselt, on vaja programmilist lähenemist. WordPress pakub sulle nelja võimalust postituse avaldamise lõpetamiseks PHP kaudu: alates turvalisest mustandist kuni täieliku kustutamiseni.
Allpool on iga meetod koos kasutusvalmis koodi, selgituse ja vihjega, millal millist kasutada.
💡 Kiire ülevaade:
- Postituse mustandiks muutmine
wp_update_postabil staatusegadraft, kõige turvalisem ja pööratavam viis - Postituse privaatseks (
private) muutmine, nähtav ainult administraatoritele ja toimetajatele - Postituse tulevikku saatmine
post_datekaudu, postitus kaob otsingutulemustest kuni määratud kuupäeva saabumiseni - Postituse jäädav kustutamine
wp_delete_postabil, viimane abinõu koos hoiatuste ja varukoopiaga
1. Samm. Mustand: avalda postitus andmeid kaotamata
Kõige tavalisem stsenaarium: sul on vaja postitus ajutiselt peita, kuid säilitada kogu sisu, URL ja võimalus see ühe klõpsuga tagasi tuua. Mustandiks muutmine on ideaalne valik.
Ainult post_status väli wp_posts tabelis muutub. Postitus ise, selle metaväljad, manused ja URL jäävad puutumata. Kui otsustad selle tagasi tuua, muudad staatuse tagasi publish peale.
Kood staatuse muutmiseks draft peale. Lisa see oma alamteema functions.php faili või Code Snippets pluginaga:
1 /** 2 * Converts a post to draft by ID. 3 * 4 * @param int $post_id ID of the post to unpublish. 5 */ 6 function sd_unpublish_to_draft( $post_id ) { 7 wp_update_post( array( 8 'ID' => $post_id, 9 'post_status' => 'draft', 10 ) ); 11 } 12 13 // Example call: unpublish post with ID = 42 14 sd_unpublish_to_draft( 42 );
wp_update_post() uuendab kirjet andmebaasis. Anname kaasa ainult ID ja uue post_status väärtuse, WordPress teeb kõik muu ise. Ühtegi teist välja ei muudeta.
Millal kasutada: postituse ajutine peitmine ülevaatamiseks, aegunud asjakohasusega postituste (nt kampaaniad) automaatne deaktiveerimine, kasutajate loodud sisu programmiline modereerimine.
2. Samm. Privaatne postitus: peida külastajate eest, hoia toimetajatele
Privaatne staatus on kuldne kesktee avaliku ja peidetu vahel. Postitus ei ole tavakülastajatele nähtav, kuid on administraatoritele ja toimetajatele adminipaneelis ligipääsetav. Mugav sisemiste materjalide jaoks: meeskonna juhised, kliendisisu mustandid, privaatsed lehed.
Erinevus mustandist: privaatne postitus on tehniliselt „avaldatud" ja sellel võib olla oma URL, kuid WordPress kontrollib kasutaja õigusi enne selle kuvamist. Külastaja, kellel pole read_private_posts õigust, näeb 404 veateadet.
Kood on sarnane eelmisele, muutub ainult staatus:
1 /** 2 * Makes a post private — visible only to admins and editors. 3 * 4 * @param int $post_id Post ID. 5 */ 6 function sd_unpublish_to_private( $post_id ) { 7 wp_update_post( array( 8 'ID' => $post_id, 9 'post_status' => 'private', 10 ) ); 11 } 12 13 // Example call 14 sd_unpublish_to_private( 42 );
Märkus: kui saidil on kohandatud kasutajarollid koos kohandatud õigustega, kontrolli neid enne masskasutust. Vaikimisi on privaatsed postitused nähtavad editor ja administrator rollidele.
Millal kasutada: premium-tellimuse sisu (koos liikmelisuse pluginatega), sisemine meeskonnadokumentatsioon, postituste peitmine kliendiga uuesti kinnitamiseks enne taasalaldamist.
3. Samm. Tuleviku kuupäev: viivitusega avaldamise lõpetamine
Huvitav nipp: staatuse muutmise asemel võid „postituse tulevikku saata", määrata avaldamiskuupäevaks aasta 2050. Postitus kaob koheselt otsingutulemustest, sest WordPress näitab ainult postitusi, mille kuupäev on ≤ praegune hetk.
See meetod ei muuda post_status välja: postitus jääb publish staatusesse. WordPressi vaatenurgast lihtsalt „pole seda veel juhtunud". Pluss: vajadusel saad taastada tegeliku kuupäeva ja postitus ilmub uuesti.
Kood kasutab post_date ja post_date_gmt välju:
1 /** 2 * Hides a post by setting its publication date far into the future. 3 * 4 * @param int $post_id Post ID. 5 */ 6 function sd_unpublish_to_future( $post_id ) { 7 $future_date = '2050-12-31 23:59:59'; 8 9 wp_update_post( array( 10 'ID' => $post_id, 11 'post_date' => $future_date, 12 'post_date_gmt' => get_gmt_from_date( $future_date ), 13 ) ); 14 } 15 16 // Example call 17 sd_unpublish_to_future( 42 );
get_gmt_from_date() teisendab kohaliku aja GMT-ks, WordPress salvestab mõlemad kuupäeva versioonid. Ära jäta GMT välja tähelepanuta: ilma selleta muutub käitumine saidi ajavööndi muutmisel ettearvamatuks.
Millal kasutada: „ajastatud" sisu avaldamine, uudiste ajutine peitmine staatust muutmata, stsenaariumid, kus post_status peab jääma publish tagasiühilduvuse tõttu teiste pluginatega.
4. Samm. Kustutamine: kui postitust pole üldse vaja
wp_delete_post() on pöördumatu operatsioon. Postitus kustutatakse andmebaasist koos kõigi oma metaväljade, taksonoomia seoste ja (valikuliselt) manustega.
See ei ole „avaldamise lõpetamine" ranges tähenduses. Kuid programmilise sisuhalduse kontekstis on kustutamine neljas, kõige drastilisem tööriist. Ja see nõuab turvameetmeid.
Enne käivitamist tee täielik andmebaasi varukoopia. Allolev skript väljastab esmalt nimekirja sellest, mis kustutatakse, ja alles seejärel tootmisversiooni.
1 /** 2 * Deletes a post. First — dry-run with info output, then — actual deletion. 3 * 4 * WARNING: irreversible operation. Backup before running. 5 * 6 * @param int $post_id Post ID. 7 * @param bool $force_delete true — delete permanently (skip trash), false — move to trash. 8 */ 9 function sd_delete_post_safe( $post_id, $force_delete = false ) { 10 $post = get_post( $post_id ); 11 12 if ( ! $post ) { 13 error_log( "Post with ID {$post_id} not found." ); 14 return; 15 } 16 17 // Dry-run: output info without deleting 18 error_log( sprintf( 19 'READY TO DELETE: ID=%d, title="%s", status=%s, attachments=%d', 20 $post->ID, 21 $post->post_title, 22 $post->post_status, 23 count( get_attached_media( '', $post_id ) ) 24 ) ); 25 26 // Uncomment the following line for actual deletion: 27 // wp_delete_post( $post_id, $force_delete ); 28 } 29 30 // Dry-run: only outputs info 31 sd_delete_post_safe( 12341, false );
$force_delete lipp:
false, postitus läheb prügikasti, seda saab taastada 30 päeva jooksul.true, jäädav kustutamine, ei saa taastada isegi andmebaasi kaudu (ilma varukoopiata).
Funktsioon logib error_log() kaudu, teated ilmuvad faili wp-content/debug.log, kui WP_DEBUG on lubatud. Tootmiskeskkonnas asenda see oma teavitussüsteemiga.
Millal kasutada: rämpspostituste automaatne puhastamine, aegunud sisu (tööpakkumised, sündmused) kustutamine, programmiline sisu rotatsioon koos vanade kirjete täieliku eemaldamisega.
Nelja meetodi võrdlus
Meetod | Postituse staatus | Pööratavus | Nähtavus lugejatele | Nähtavus adminis | Millal kasutada |
|---|---|---|---|---|---|
Mustand |
| Täielik | Peidetud | Kõik rollid, kellel on postituse ligipääs | Ajutine peitmine, ülevaatamine |
Privaatne |
| Täielik | Peidetud | Adminid ja toimetajad | Sisemine sisu, premium |
Tuleviku kuupäev |
| Täielik | Peidetud kuni kuupäevani | Kõik | Ajastatud avaldamine, ajakava |
Kustutamine | - | Ainult prügikastist (30 päeva) | - | Ainult adminid | Täielik kustutamine, puhastamine |
⁉️🤔 Korduma kippuvad küsimused
Mis vahe on avaldamise lõpetamisel ja kustutamisel?
Avaldamise lõpetamine (mustand/privaatne/tulevik) hoiab postitust andmebaasis: sisu, URL, manused ja SEO ajalugu säilivad. Kustutamine (
wp_delete_post) kustutab kirje täielikult. Ajutiseks peitmiseks kasuta alati mustandit, see on turvaline ja sekundiga pööratav.
Milline meetod ei nõua post_status muutmist?
Tulevikku saatmine
post_datekaudu. Postitus jääbpublishstaatusesse, kuid WordPress peab seda „veel mittetoimunuks" ega näita seda külastajatele. See võib olla oluline, kui teised pluginad või koodijupid sõltuvadpublishstaatusest.
Kas ma saan mitu postitust korraga avaldamise lõpetada?
Jah, ümbritse funktsiooni väljakutse tsükliga üle ID-de massiivi. Lisa
wp_die()või piirang postituste arvule ühe käitamise kohta, et vältida saidi kokkujooksmist massoperatsiooni ajal:array_slice($post_ids, 0, 50)50 kaupa töötlemiseks.
Kas ma pean pärast programmilist staatuse muutmist vahemälu tühjendama?
Absoluutselt. WordPress tühjendab sisemise postituse vahemälu, kui
wp_update_post()välja kutsutakse, kuid väline vahemälu (pluginad nagu WP Rocket, serveri vahemälu, CDN) tuleb eraldi tühjendada. Lisawp_cache_flush()väljakutse võiclean_post_cachekonks pärast staatuse muutmist.
Kas wp_delete_post käivitamine tootmiskeskkonnas on ohutu?
Ainult turvameetmetega. Enne väljakutsumist: (1) kontrolli
current_user_can('delete_posts'), (2) nõua kinnitust eraldi nonce-tõendi kaudu, (3) logi kustutatava postituse ID ja pealkiri. Ja mis kõige tähtsam, varukoopia. Isegi prügikastis elab postitus 30 päeva, mille järel WordPress kustutab selle automaatselt.
Mida sinu puhul kasutada: kokkuvõte
Neli meetodit katavad peaaegu kõik programmilise avaldamise haldamise stsenaariumid. Valik taandub ühele küsimusele: kas sul on vaja postitust säilitada?
- Kui sul on vaja postitus ajutiselt ülevaatamiseks peita, vali mustand (
draft). Paar rida, null riski. - Kui sisu on piiratud ringile inimestele, privaatne staatus (
private). Toimetajad näevad, külastajad mitte. - Kui sul on vaja postitus peita ilma selle staatust muutmata, tuleviku kuupäev (
post_datemääratud aastasse 2050). Nutikas, kuid toimiv nipp. - Kui postitust kindlasti ei ole vaja, kustutamine (
wp_delete_post). Aga enne, proovikäivitus ja täielik varukoopia.
Alusta ühe meetodi ümbrisega failis functions.php, näiteks mustandiga. Kui mõistad wp_update_post() loogikat, tulevad ülejäänud kolm meetodit viie minutiga selgeks.
Ja millist meetodit sina programmiliseks postituste haldamiseks kasutad? Kirjuta kommentaaridesse, huvitav on lähenemisi võrrelda.



