Чӣ тавр як ID-и мушаххаси паёмро аз WordPress пурра хориҷ кардан ва онро бо Meilisearch ҳамоҳанг кардан мумкин аст (Плагини ҷустуҷӯи Scry дар амал)

Ман ба наздикӣ дар як вебсайти WordPress кор мекардам ва мехостам як системаи ҷустуҷӯии баландсифатро дар тамоми сайт илова кунам. Пас аз ҷустуҷӯҳои зиёд, ман Meilisearch-ро интихоб кардам ва онро бо плагини бо номи Scry Search ҷуфт кардам.

Дар аввал ҳама чиз хуб гузашт. Ман плагинро насб кардам, онро танзим кардам ва индекс ба таври худкор тавлид шуд. Суръати ҷустуҷӯ барқ ​​​​босуръат буд ва таҷриба воқеан аъло буд.

Аммо дар ин ҷо мушкилот ба миён меояд.

Дар вебсайт якчанд мақолаҳои ғайриоддӣ мавҷуданд. Баъзеҳо барои санҷиши дохилӣ, баъзеҳо саҳифаҳои махсуси фурудоӣ барои муштариёни мушаххас ва дигарон мундариҷаи нотамом мебошанд, ки мо намехоҳем онҳоро нест кунем. Ман мехоҳам, ки ин ID-ҳои мақолаҳо аз натиҷаҳои ҷустуҷӯ комилан нопадид шаванд.

Ин кофӣ нест, ки онро ёфтан мумкин нест; балки он аст, ки он ҳатто дар индекси Meilisearch буда наметавонад.

Чӣ тавр як ID-и мушаххаси паёмро аз WordPress пурра хориҷ кардан ва онро бо Meilisearch ҳамоҳанг кардан мумкин аст (Плагини ҷустуҷӯи Scry дар амал)

Ман фикр мекардам, ки ин содда аст; танҳо истисно кардани чанд ID муҳим аст. Ҳуҷҷатҳои плагин бояд қалмоқҳои мувофиқ дошта бошанд; танҳо филтр илова кунед ва ин кор анҷом ёфт.

Тавре ки маълум шуд, ман хато карда будам.

Чаро усулҳои анъанавии пешгирии ҳамлаҳо ноком мешаванд?

Ман аввал қалмоқи филтрро, ки дар ҳуҷҷатҳои расмӣ зикр шудааст, санҷидам. Ман чанд сатри кодро ба functions.php илова кардам, онро захира кардам, сервери серверро нав кардам ва аз нав индексатсия кардам.

Сипас ман сервери Meilisearch-ро тафтиш кардам.

Он мақолаҳо ҳоло ҳам ҳастанд.

Ман дар ҳайрат мондам.

Ман фикр мекардам, ки рамзи нодуруст навиштаам, бинобар ин онро чанд маротиба тафтиш кардам, аммо дар он ҳеҷ мушкиле набуд. Сипас ман мушкилоти GitHub-и плагинро ҷустуҷӯ кардам ва фаҳмидам, ки якчанд нафари дигар бо мушкилоти монанд дучор шудаанд.

Маълум мешавад, ки плагини Scry Search механизми навбати вазифаҳои асинхронӣ-ро барои пешгирӣ аз суст кардани раванди захира кардани замина истифода мебарад. Ин маънои онро дорад, ки вақте шумо тугмаи "Захира кардани мақола"-ро дар замина пахш мекунед, маълумот метавонад фавран ба ҷадвали вазифаҳои фармоишӣ интиқол дода шавад ва аз филтркунии муқаррарии як мақолаи ягона сарфи назар кунад.

Чизи аз ҳама даҳшатноктар ин аст, ки вақте шумо дар замина барои аз нав сохтани индекси глобалӣ тугмаи "Индекс Паёмҳо"-ро пахш мекунед, плагин мустақиман дархости пойгоҳи додаҳои пакетиро дар сатҳи поёнӣ иҷро мекунад. Дар ин лаҳза, қалмоқи филтр, ки шумо қаблан илова карда будед, ҳеҷ гоҳ имкони иҷро шуданро надорад.

Ба ибораи дигар, усулҳои анъанавии бастани маълумот танҳо дар лаҳзаи захира кардани дастӣ аз мақола эътибор пайдо мекунанд. Аммо мантиқи ҳамоҳангсозии Scry Search нисбат ба он ки шумо тасаввур мекунед, хеле мураккабтар аст.

Рамзи асосии интерсептори суғуртаи дукарата

Баъди андеша кардан, фаҳмидам, ки ин масъаларо ба ин тарз гузоштан мумкин нест.

Азбаски қалмоқи анъанавӣ танҳо нуқтаи вуруди "захиракунии як мақола"-ро идора мекунад, ман бояд роҳеро пайдо кунам, ки онро аз ҷойҳои дигар низ масдуд кунам.

Ман ду роҳро пеш овардам.

Масъалаи аввал нуқтаи интиқоли шабака аст. Новобаста аз он ки он ҳамоҳангсозии якмақола ё ҳамоҳангсозии гурӯҳӣ бошад, маълумоти ниҳоӣ бояд тавассути дархостҳои HTTP ба сервери Meilisearch фиристода шавад, дуруст аст? Пас, пеш аз фиристодани дархости HTTP, ман бояд тафтиш кунам, ки оё матни дархост ID-ҳои он мақолаҳои истисношударо дар бар мегирад. Агар ин тавр бошад, ман бояд мустақиман фиристодани дархостро манъ кунам.

Нуктаи дуюм ба дархости пойгоҳи додаҳо дахл дорад. Азбаски плагин ҳангоми индексатсияи партиявӣ рӯйхати мақолаҳоро мустақиман аз пойгоҳи додаҳо мегирад, ман пеш аз иҷрои дархости пойгоҳи додаҳо ин ID-ҳои мушаххасро аз натиҷаҳои дархост хориҷ мекунам. Аз нуқтаи назари плагин, ин мақолаҳо умуман вуҷуд надоранд, аз ин рӯ онҳо барқарор карда намешаванд.

Ду роҳ, суғуртаи дукарата. Агар як роҳро бастан имконнопазир бошад, роҳи дигаре ҳамчун эҳтиётӣ вуҷуд дорад.

Пас аз фаҳмидани он, ман ба навиштани код шурӯъ кардам.

Барои аввалин интерсептор, ман аз версияи аслии WordPress истифода кардам.pre_http_requestФилтр. Ин қалмоқ пеш аз он ки WordPress ягон дархости HTTP-ро иҷро кунад, фаъол мешавад. Мантиқи ман ин аст, ки он муайян мекунад, ки оё URL-и дархостшуда дорои... аст.meilisearchАгар матни дархост ID-ҳои мақолаҳои хориҷшударо дар бар гирад, дархост масдуд карда мешавад.

Барои пешгирӣ аз гузориш додани хатогиҳо аз ҷониби плагин, ман инчунин бояд посухи муваффақро сохта кунам. Формати стандартии посух барои Meilisearch ин аст...{"taskUid":0,"status":"enqueued"}Ман танҳо инро баргардондам, ки плагин фикр мекард, ки ҳамоҳангсозӣ муваффақ буд.

Дуюм, ки ман истифода кардам, интерференсаторpre_get_postsҚалмоқ. Ин қалмоқ пеш аз иҷрои дархости пойгоҳи додаҳо аз ҷониби WordPress фаъол мешавад. Мантиқи ман ин аст, ки ҳар вақте ки администратор амалиётро дар backend иҷро мекунад ё вақте ки плагин амалиётҳои асинхронӣ/синхронӣ иҷро мекунад, ID-ҳои истисношуда бояд ба... муттаҳид карда шаванд.post__not_inДар параметрҳо.

Баъд аз он ки навиштанро ба итмом расондам, онро санҷидам.

Аввал ман ба қисмати пуштибонӣ рафтам, яке аз мақолаҳои хориҷшударо кушодам, чанд тағйироти ночиз ворид кардам ва тугмаи "Навсозӣ"-ро пахш кардам. Он бомуваффақият бе ягон хатогӣ захира карда шуд. Сипас ман қисмати пуштибонии Meilisearch-ро тафтиш кардам ва индекси мақола бетағйир монд; ҳеҷ чизи наве пайдо нашуда буд.

Ман бори дигар "Индекси паёмҳо"-ро пахш кардам ва тамоми индексро аз нав сохтам. Пас аз муддате интизорӣ, ман сервери Meilisearch-ро тафтиш кардам. Он мақолаҳои хориҷшуда ҳоло ҳам дар он ҷо буданд.

Тамом шуд.

Таҳлили амиқ: Механизми суғуртаи дукарата чӣ гуна кор мекунад?

Ростӣ, ин раванд ба ман чизи хеле ҷолибро ба ёд овард.

Медонед, дар солҳои 1880-ум, вақте ки нерӯи барқ ​​дар Иёлоти Муттаҳида нав паҳн шуда буд, бисёре аз соҳибони корхонаҳо пули зиёдеро барои харидани генераторҳо ва муҳаррикҳои барқӣ ва насб кардани онҳо дар корхонаҳои худ сарф мекарданд. Аммо, пас аз насб, бисёриҳо муайян карданд, ки самаранокии истеҳсолот ба таври назаррас беҳтар нашудааст.

чаро?

Зеро онҳо танҳо муҳаррики буғиро бо муҳаррики барқӣ иваз карданд, аммо тарҳбандии умумӣ, равандҳо ва усулҳои идоракунии корхона бетағйир монд. Нерӯи барқ ​​нав буд, аммо тарзи фикрронӣ барои истифодаи он кӯҳна буд.

Онҳое, ки воқеан аз афзоиши нерӯи барқ ​​​​фоида бурданд, дар асл аввалин гурӯҳе буданд, ки фаҳмиданд, ки "маънои аслии нерӯи барқ" чист. Онҳо на танҳо манбаи нерӯи барқи худро иваз карданд, балки тамоми раванди истеҳсолии худро аз нав тарҳрезӣ карданд.

Ҳамин чиз ба давраи зеҳни сунъӣ низ дахл дорад . Бисёриҳо зеҳни сунъиро ҳамчун абзор истифода мебаранд, аммо кам касон фикр мекунанд, ки он чӣ мантиқи аслиро тағйир медиҳад. Худи абзор нав аст, аммо тарзи фикрронии истифодашуда барои истифодаи он метавонад кӯҳна боқӣ монад.

Масалан, вақте ки ман блоккунии ҷустуҷӯи WordPress-ро танзим мекардам, эҳтимол ман наметавонистам онро ба кор дарорам, агар танҳо усулҳои стандартии ҳуҷҷатҳои плагинро риоя мекардам. Ин аз он сабаб аст, ки мантиқи ҳамоҳангсозии Scry Search дигар равиши анъанавии "як мақоларо захира кунед, як мақоларо ҳамоҳанг созед" нест; он навбатҳои асинхронӣ, коркарди партиявӣ ва маҷмӯи механизмҳои худро дорад.

Пеш аз он ки шумо як кашфиёти воқеиро пайдо кунед, шумо бояд фаҳмед, ки ин механизм чӣ гуна кор мекунад.

Маҳдудиятҳо ва чораҳои эҳтиётӣ дар нақша

Аммо, бояд ростқавлона бигӯям, ки ин нақша низ комил нест.

Он маҳдудияти назаррас дорад: он танҳо метавонад ҳамоҳангсозии ояндаро идора кунад ва наметавонад сабтҳои таърихии мавҷударо дар Meilisearch ба таври худкор нест кунад. Ба ибораи дигар, агар шумо аллакай ин мақолаҳоро ҳамоҳанг карда бошед, ба шумо лозим меояд, ки маълумоти кӯҳнаро дар панели идоракунии Meilisearch ё бо истифода аз фармонҳои API дастӣ нест кунед.

Ин як вазифаи якдафъаина аст; пас аз анҷоми он, ба шумо дигар лозим нест, ки дар ин бора хавотир шавед. Аммо ман бояд инро пешакӣ равшан кунам, то пас аз ҷойгир кардани рамз, шумо он мақолаҳоро дар натиҷаҳои ҷустуҷӯ пайдо накунед ва фикр кунед, ки рамз эътибор пайдо накардааст.

Нуктаи дигаре, ки бояд қайд кард, ин аст, ки ин равиш ба меъмории шабака ва пойгоҳи додаҳои аслии WordPress такя мекунад. То он даме, ки версияҳои ояндаи плагини Scry Search дар асоси ин меъморӣ кор карданро идома диҳанд, ин интерсептор самаранок боқӣ хоҳад монд. Аммо, агар он ба механизми комилан дигари ҳамоҳангсозӣ гузарад, пас мутобиқсозии дубора лозим шуда метавонад.

Аммо, ростқавлона гӯям, ин эҳтимол надорад. Тамоми экосистемаи WordPress бар асоси ин меъморӣ сохта шудааст ва аз плагинҳо пурра гузаштан қариб ғайриимкон аст.

Дастури сеқадамӣ барои татбиқ

/**
 * 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));
    }
});

Дар ниҳоят, биёед қадамҳои амалиётро ҷамъбаст кунем.

Аввал, рамзро ба поёни файли functions.php-и худ нусхабардорӣ кунед ё онро бо истифода аз плагини Code Snippets илова кунед. Сипас, дар боло...defineДар массив, ID-и мақола ё саҳифаеро, ки мехоҳед истисно кунед, ворид кунед.

Қадами дуюм тоза кардани индексҳои таърихӣ мебошад. Ба панели идоракунии Meilisearch-и худ ворид шавед ё аз фармонҳои API истифода баред, то маълумоти кӯҳнаи индексро барои мақолаҳои истисношуда дастӣ нест кунед.

Қадами сеюм санҷиш аст. Ба қисмати пуштибонӣ равед ва дар мақолаи истисношуда ҳама гуна тағйироти ночиз ворид кунед, тугмаи навсозиро клик кунед ва сипас қисмати пуштибонии Meilisearch-ро санҷед. Агар индекси нав пайдо нашавад, масдудкунӣ эътибор пайдо кардааст.

Рости гап, ман ҳамеша дар навиштани ин гуна мақолаҳои мубодилаи техникӣ худро каме гунаҳкор ҳис мекардам.

Чизҳое, ки ман мубодила мекунам, метавонанд барои баъзе одамон муфид бошанд, аммо барои дигарон онҳо метавонанд танҳо амалиётҳои оддӣ бошанд.

Аммо раванди татбиқи блоки ҷустуҷӯи WordPress ин дафъа воқеан фаҳмо буд. Аксар вақт, мушкилоте, ки мо бо онҳо дучор мешавем, на аз набудани роҳҳои ҳал, балки аз он сабаб аст, ки тафаккури мо аз ҷониби чаҳорчӯбаҳои мавҷуда маҳдуд аст.

Плагини Scry Search як қалмоқчаи филтркуниро фароҳам меорад, ки моро водор мекунад, ки бовар кунем, ки ин ягона вариант аст. Аммо, тамоми меъмории WordPress имконоти хеле бештарро пешниҳод мекунад. Дастгирӣ дар сатҳи шабакавӣ ва инчунин дар сатҳи пойгоҳи додаҳо имконпазир аст. То он даме, ки шумо омода бошед фикр кунед, ҳамеша роҳе вуҷуд дорад.

Аз ин рӯ, ман аз кор бо ин дастгоҳҳои техникӣ лаззат мебарам. Гап дар бораи худнамоӣ ё кӯшиши ба назар таъсирбахш ба назар расидан нест. Ин танҳо аз он сабаб аст, ки эҳсоси дарки пурраи мушкилот бениҳоят қаноатбахш аст.

Мисли ин дафъа, аз нофаҳмиҳои аввалия то инъикос дар мобайн то ҳалли ниҳоӣ, тамоми раванд мисли ҳалли муаммо буд.

Сир ҳал шуд, ҷавоб ошкор шуд, маълум шуд, ки он хеле содда будааст.

Аммо агар шумо аз ин раванди печида нагузашта бошед, шумо ҳеҷ гоҳ ин шодмонии оддиро дарк нахоҳед кард.

Акнун, ки шумо то ин ҷо хондаед, агар он барои шумо муфид бошад, лутфан онро лайк монед ва мубодила кунед. Агар шумо хоҳед, ки аввал навсозиҳоро қабул кунед, шумо инчунин метавонед маро пайгирӣ кунед.

Ташаккур барои хондани мақолаи ман. Дафъаи оянда мебинем.

Умедворем, ки мақолаи "Чӣ гуна бояд як ID-и мушаххаси паёмро аз ҳамоҳангсозӣ бо Meilisearch дар WordPress комилан истисно кард (плагини ҷустуҷӯи Scry дар амалия)", ки дар блоги Чен Вейлианг ( https://www.chenweiliang.com/ ) мубодила шудааст, барои шумо муфид хоҳад буд.

Озодона истиноди ин мақоларо мубодила кунед: https://www.chenweiliang.com/cwl-34343.html

Барои кушодани ҳилаҳои пинҳонии бештар🔑, хуш омадед ба канали мо дар Telegram ҳамроҳ шавед!

Поделиться ва лайк, агар ба шумо писанд омад! Саҳмияҳо ва лайкҳои шумо ангезаи доимии мо мебошанд!

 

发表 评论

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

Акс аз бойгонӣ