Indlela yokukhupha ngokupheleleyo i-ID yeposi ethile kwi-WordPress kwaye uyivumelanise ne-Meilisearch (i-Scry Search Plugin in Practice)

Kutshanje bendisebenza kwiwebhusayithi yeWordPress kwaye ndifuna ukongeza injini yokukhangela esebenza kakhulu kuyo yonke indawo. Emva kokukhangela okuninzi, ndikhethe iMeilisearch ndaza ndayidibanisa ne-plugin ebizwa ngokuba yiScry Search.

Ekuqaleni ihambe kakuhle. Ndifake i-plugin, ndayicwangcisa, kwaye i-index yenziwa ngokuzenzekelayo. Isantya sokukhangela besikhawuleza kakhulu, kwaye amava ebemhle kakhulu.

Kodwa nantsi ingxaki isiza.

Kukho amanqaku angaqhelekanga kwiwebhusayithi. Amanye ngawovavanyo lwangaphakathi, amanye ngamaphepha okufikela anikezelwe kubathengi abathile, kwaye amanye ngumxholo ongagqitywanga esingafuni ukuwucima. Ndifuna la ma-ID amanqaku aphele ngokupheleleyo kwiziphumo zokukhangela.

Akwanelanga ukuba ayinakufumaneka; kukuba ayinakufumaneka nakwi-index kaMeilisearch.

Indlela yokukhupha ngokupheleleyo i-ID yeposi ethile kwi-WordPress kwaye uyivumelanise ne-Meilisearch (i-Scry Search Plugin in Practice)

Ndicinga ukuba oku kulula; yinto nje yokukhupha ii-ID ezimbalwa. Uxwebhu lwe-plugin kufuneka lube nee-hooks ezifanelekileyo; yongeza nje isihluzi kwaye kugqityiwe.

Njengoko kwavela, bendingalunganga.

Kutheni iindlela zesiqhelo zokuthintela zingaphumeleli?

Ndiqale ndazama i-filter hook ekhankanyiweyo kuxwebhu olusemthethweni. Ndongeze imigca embalwa yekhowudi kwi-functions.php, ndayigcina, ndayihlaziya i-backend, ndaza ndayiphinda ndayibeka kwi-index.

Emva koko ndijonge i-backend ye-Meilisearch.

Loo manqaku asekhona.

Ndothuka kakhulu.

Ndicinga ukuba ndibhale ikhowudi engalunganga, ngoko ke ndiyijongile izihlandlo ezininzi, kodwa akukho nto imbi ngayo. Emva koko ndikhangele kwi-plugin's GitHub Issues ndaza ndafumanisa ukuba abanye abantu abaninzi baye badibana neengxaki ezifanayo.

Kuyavela ukuba i-plugin yeScry Search isebenzisa indlela ye-task queue engangqamananga ukuthintela ukucothisa inkqubo yokugcina imvelaphi. Oku kuthetha ukuba xa ucofa u-"Save Article" ngasemva, idatha ingatyhalelwa kwangoko kwitheyibhile yemisebenzi eyenzelwe wena, idlula ukucoca okuqhelekileyo kwenqaku elinye.

Okubi nangakumbi kukuba xa ucofa "Iindex Posts" ngasemva ukuze uphinde uvelise i-global index, i-plugin yenza ngqo umbuzo we-batch database kwinqanaba elingaphantsi. Okwangoku, i-filter hook oyifakileyo ngaphambili ayifumani thuba lokusebenzisa.

Ngamanye amazwi, iindlela zokuthintela eziqhelekileyo ziqala ukusebenza kuphela xa ugcina inqaku ngesandla. Kodwa indlela yokuvumelanisa yeScry Search iyinkimbinkimbi kakhulu kunokuba unokucinga.

Ikhowudi engundoqo ye-inshorensi ephindwe kabini

Emva kokucinga ngayo, ndaqonda ukuba le nto ayinakushiywa inje.

Ekubeni i-hook eqhelekileyo ilawula kuphela indawo yokungena "yokugcina inqaku elinye", kufuneka ndifumane indlela yokuyithintela kwezinye iindawo.

Ndize neendlela ezimbini.

Ingxaki yokuqala kukuphela kothumelo lwenethiwekhi. Nokuba kukuvumelanisa inqaku elinye okanye ukuvumelanisa ibhetshi, idatha yokugqibela isadinga ukuthunyelwa kwiseva yeMeilisearch ngezicelo zeHTTP, akunjalo? Ngoko ke, ngaphambi kokuba ndithumele isicelo seHTTP, kufuneka ndijonge ukuba umzimba wesicelo uqulethe na ii-ID zaloo manqaku angabandakanywanga. Ukuba kunjalo, kufuneka ndithintele ngqo isicelo ukuba singathunyelwa.

Ingongoma yesibini iphathelele umbuzo wesiseko sedatha. Ekubeni i-plugin ifumana uluhlu lwamanqaku ngqo kwisiseko sedatha ngexesha lokufakwa kwe-batch indexing, ndiza kuzisusa ezo ID ezithile kwiziphumo zemibuzo ngaphambi kokuba ndisebenzise umbuzo wesiseko sedatha. Ngokwembono ye-plugin, la manqaku awakho konke konke, ngoko ke awazukufunyanwa.

Iindlela ezimbini, i-inshurensi ephindwe kabini. Ukuba enye indlela ayinakuvinjwa, kukho enye njengenkxaso.

Emva kokuyiqonda, ndaqala ukubhala ikhowudi.

Kwi-interceptor yokuqala, ndisebenzise eyasekhaya yeWordPress.pre_http_requestIsihluzi. Le hook iqala ngaphambi kokuba iWordPress yenze naziphi na izicelo zeHTTP. Ingqiqo yam kukuba iya kufumanisa ukuba i-URL eceliweyo inayo...meilisearchUkuba umzimba wesicelo uqulethe ii-ID zamanqaku angabandakanywanga, isicelo siya kuthintelwa.

Ukuthintela i-plugin ekuxeleni iimpazamo, kufuneka ndiphinde ndiphendule ngendlela engeyiyo. Ifomathi yempendulo eqhelekileyo yeMeilisearch yi...{"taskUid":0,"status":"enqueued"}Ndiyibuyisele nje le nto, ndenza i-plugin icinge ukuba ukuvumelanisa kube yimpumelelo.

Isixhobo sokuthintela esisibini endisisebenzisileyopre_get_postsIhoki. Le hoki iqaliswa ngaphambi kokuba iWordPress yenze umbuzo wesiseko sedatha. Ingqiqo yam kukuba nanini na xa umlawuli esenza umsebenzi kwi-backend, okanye xa i-plugin yenza imisebenzi engangqamananga/ehambelanayo, ii-ID ezingabandakanywanga kufuneka zidityaniswe kwi...post__not_inKwiiparameters.

Emva kokuba ndigqibile ukuyibhala, ndiyivavanye.

Okokuqala, ndiye ndaya kwi-backend, ndavula enye yamanqaku angafakwanga, ndenza utshintsho oluncinci, ndaza ndacofa uhlaziyo. Igcine ngempumelelo ngaphandle kweempazamo. Emva koko ndajonga i-backend ye-Meilisearch, kwaye i-index yenqaku ayizange itshintshe; akukho nto intsha ivele.

Ndicofe "Index Posts" kwakhona ndaza ndakha kwakhona yonke i-index. Emva kokulinda okwethutyana, ndijonge i-backend ye-Meilisearch. Loo manqaku angabandakanywanga ayesekhona.

Yenziwe.

Uhlalutyo olunzulu: Isebenza njani indlela yeinshurensi ephindwe kabini?

Inyaniso kukuba, le nkqubo indikhumbuze into enomdla kakhulu.

Uyazi, ngeminyaka yoo-1880, xa umbane wawusanda kusasazeka eMelika, abanini beefektri abaninzi bachitha imali eninzi ukuthenga iijenereyitha kunye neemoto zombane baze bazifake kwiifektri zabo. Nangona kunjalo, emva kokufakwa, abantu abaninzi bafumanise ukuba ukusebenza kakuhle kwemveliso akuzange kuphucuke kakhulu.

ngoba?

Kuba batshintshe nje injini yomphunga ngenjini yombane, kodwa uyilo lulonke, iinkqubo, kunye neendlela zolawulo lomzi-mveliso azizange zitshintshe. Umbane wawumtsha, kodwa indlela yokuwusebenzisa yayindala.

Abo bazuze ngokwenene kukwanda kombane babeliqela lokuqala ukuqonda "oko kuthethwa ngumbane ngokwenene." Abazange batshintshe nje umthombo wabo wamandla; baphinde bayihlaziya yonke inkqubo yabo yemveliso.

Oku kuyasebenza nakwixesha le -AI . Abantu abaninzi basebenzisa i-AI njengesixhobo, kodwa bambalwa abacinga ukuba itshintsha yiphi ingqiqo esisiseko. Esi sixhobo ngokwaso sitsha, kodwa indlela yokucinga esetyenziswayo ukusisebenzisa isenokuhlala iphelelwe lixesha.

Umzekelo, xa ndandiseta ukuvimba uphendlo lweWordPress, mhlawumbi bendingenakukwazi ukuyenza isebenze ukuba bendilandela nje iindlela eziqhelekileyo kuxwebhu lwe-plugin. Oku kungenxa yokuba i-logic yokuvumelanisa yeScry Search ayiseyiyo indlela yendabuko ethi "gcina inqaku elinye, vumelanisa inqaku elinye"; inemigca engangqamananga, ukucutshungulwa kwebatch, kunye neseti yayo yeendlela.

Kuya kufuneka ufumanise indlela esebenza ngayo le ndlela ngaphambi kokuba ufumane impumelelo yokwenene.

Imida kunye namanyathelo okhuseleko esicwangciso

Nangona kunjalo, ndimele nditsho ngokunyanisekileyo ukuba esi sicwangciso asigqibelelanga.

Inomda obalulekileyo: inokulawula ukuvumelanisa kwixesha elizayo kuphela kwaye ayinakucima ngokuzenzekelayo iirekhodi zembali ezikhoyo kwiMeilisearch. Ngamanye amazwi, ukuba sele uzivumelanisile ezo zihloko, kusafuneka uzicime ngesandla idatha endala kwideshibhodi yeMeilisearch okanye usebenzise imiyalelo ye-API.

Lo ngumsebenzi wexesha elinye; wakugqiba, akusafuneki ukhathazeke ngawo. Kodwa kufuneka ndicacise oku kwangaphambili, ukuze emva kokuba uqalise ikhowudi, ungawafumani loo manqaku kwiziphumo zokukhangela uze ucinge ukuba ikhowudi ayikasebenzi.

Enye ingongoma ekufuneka iqatshelwe kukuba le ndlela ixhomekeke kulwakhiwo lwenethiwekhi olusisiseko lweWordPress kunye nolwakhiwo lwedathabheyisi. Logama nje iinguqulelo ezizayo ze-plugin yeScry Search ziqhubeka nokusebenza ngokusekelwe kolu lwakhiwo, le interceptor iya kuhlala isebenza. Nangona kunjalo, ukuba itshintshela kwindlela eyahlukileyo yokuvumelanisa, ke uhlengahlengiso kwakhona lunokufuneka.

Nangona kunjalo, ukuba ndithetha inyani, oku akunakwenzeka. Yonke inkqubo yeWordPress yakhelwe phezu kolu lwakhiwo, kwaye akunakwenzeka ukuba ii-plugins ziyidlule ngokupheleleyo.

Isikhokelo Samanyathelo Amathathu Sokuphumeza

/**
 * Scry Search 双保险拦截器:彻底排除指定文章 ID 同步到 Meilisearch
 */
// ==========================================
// 【配置】请在这里填写你想要排除的文章或页面 ID
// ==========================================
define('MEILI_EXCLUDED_IDS', array(1067, 1014, 1474, 34020));


/**
 * 保险一:拦截单篇保存/更新时的网络推送 (方案 A 优化版)
 * 原理:当 WordPress 发送网络请求时,如果发现是发往 meilisearch 且带有排除的 ID,直接掐断
 */
add_filter('pre_http_request', function($preempt, $parsed_args, $url) {
    // 1. 检查是不是发往 Meilisearch 的请求
    if (strpos($url, 'meilisearch') !== false && isset($parsed_args['body'])) {
        $body_content = $parsed_args['body'];

        // 2. 检查请求体里是否包含任何一个被排除的文章 ID
        foreach (MEILI_EXCLUDED_IDS as $id) {
            // 匹配格式如 "id":1067 或 字符串中的 ID
            if (strpos($body_content, (string)$id) !== false) {
                // 找到匹配,直接拦截网络请求,并向插件伪造一个标准的成功响应
                return array(
                    'response' => array('code' => 200, 'message' => 'OK'), 
                    'body'     => '{"taskUid":0,"status":"enqueued"}'
                );
            }
        }
    }
    return $preempt;
}, 10, 3);


/**
 * 保险二:拦截后台全量索引时的数据库查询 (方案 B)
 * 原理:在插件试图从数据库捞取文章列表时,直接将这几个 ID 从查询结果中剔除
 */
add_action('pre_get_posts', function($query) {
    // 仅在后台管理员操作,或者插件执行异步同步时生效
    if (is_admin() || (defined('DOING_ASYNC') && DOING_ASYNC)) {

        // 获取当前查询已经存在的排除 ID(如果有的话)
        $current_excluded = $query->get('post__not_in');
        if (!is_array($current_excluded)) {
            $current_excluded = array();
        }

        // 将我们的专属排除 ID 合并进去
        $query->set('post__not_in', array_merge($current_excluded, MEILI_EXCLUDED_IDS));
    }
});

Okokugqibela, masishwankathele amanyathelo okusebenza.

Okokuqala, khuphela ikhowudi uye ezantsi kwefayile yakho ye-functions.php, okanye uyongeze usebenzisa i-plugin yeCode Snippets. Emva koko, phezulu...defineKwi-array, faka i-ID yenqaku okanye iphepha ofuna ukulikhupha.

Inyathelo lesibini kukucoca ii-index zembali. Ngena kwideshibhodi yakho yeMeilisearch, okanye sebenzisa imiyalelo ye-API ukuze ucime idatha ye-index endala yamanqaku angabandakanywanga ngesandla.

Inyathelo lesithathu kukuvavanya. Yiya kwi-backend uze wenze naluphi na utshintsho oluncinci kwinqaku elingabandakanywanga, cofa uhlaziyo, uze ujonge i-backend ye-Meilisearch. Ukuba akukho index intsha ibonakalayo, ukuvimba kuqalile ukusebenza.

Inyaniso kukuba, bendisoloko ndiziva ndinetyala ngokubhala olu hlobo lwamanqaku okwabelana ngobuchwephesha.

Izinto endizabelana ngazo zinokuba luncedo kwabanye abantu, kodwa kwabanye zisenokuba yimisebenzi nje elula.

Kodwa inkqubo yokuphumeza ukuvalwa kokukhangela kwi-WordPress ngeli xesha yayinengqiqo ngokwenene. Rhoqo, iingxaki esidibana nazo azibangelwa kukungabikho kwezisombululo, kodwa kungenxa yokuba indlela esicinga ngayo ithintelwe ziinkqubo ezikhoyo.

I-plugin yeScry Search inika i-filter hook, nto leyo esikhokelela ekubeni sikholelwe ukuba le yeyona ndlela ikhethekileyo. Nangona kunjalo, uyilo lonke lweWordPress lubonelela ngamathuba amaninzi. Ukuthintela kunokufezekiswa kwi-network layer, kwaye kunokwenziwa nakwi-database layer. Ukuba nje uzimisele ukucinga, kukho indlela ehlala ikhona.

Yiyo loo nto ndiyithanda indlela yokuzilungisa ezi zixhobo zobugcisa. Asikuko ukuqhayisa okanye ukuzama ukubonakala umhle. Kungenxa yokuba ukuziva uyiqonda ngokupheleleyo ingxaki kuyanelisa kakhulu.

Kanye njengakweli xesha, ukususela ekudidekeni kokuqala, ukuya ekucingeni okuphakathi, ukuya kwisisombululo sokugqibela, yonke inkqubo yayifana nokusombulula iphazili.

Imfihlakalo isonjululwe, impendulo ityhilekile, kwavela ukuba yayilula kakhulu.

Kodwa ukuba awukayidluli loo nkqubo ididayo, awusoze uyiqonde le nto ilula yovuyo.

Ekubeni sele uyifundile le ncwadi, ukuba uyifumene iluncedo, nceda uyithande kwaye uyibelane ngayo. Ukuba ufuna ukufumana uhlaziyo kuqala, ungandilandela.

Enkosi ngokufunda inqaku lam. Siza kubonana kwixesha elizayo.

Shiya uluvo

您的邮箱地址不会被公开。必填项已用*标注

Skrolela phezulu