{"id":152,"date":"2026-01-21T07:21:51","date_gmt":"2026-01-21T06:21:51","guid":{"rendered":"https:\/\/helloblog.io\/pl\/wp-cli-dla-wordfence-abilities-api\/"},"modified":"2026-01-21T07:36:27","modified_gmt":"2026-01-21T06:36:27","slug":"wp-cli-dla-wordfence-abilities-api","status":"publish","type":"post","link":"https:\/\/helloblog.io\/pl\/wp-cli-dla-wordfence-abilities-api\/","title":{"rendered":"WP-CLI dla Wordfence i wsparcie Abilities API: zarz\u0105dzanie bezpiecze\u0144stwem WordPressa z terminala i przez agent\u00f3w AI"},"content":{"rendered":"\n<p>W \u015brodowiskach, gdzie utrzymujesz wiele instalacji WordPressa albo po prostu wi\u0119kszo\u015b\u0107 pracy robisz w terminalu, klikanie po panelu administracyjnym pod k\u0105tem zada\u0144 bezpiecze\u0144stwa szybko zaczyna przeszkadza\u0107. Pojawi\u0142 si\u0119 w\u0142a\u015bnie ciekawy, otwarto\u017ar\u00f3d\u0142owy dodatek, kt\u00f3ry dorzuca pe\u0142ne wsparcie WP-CLI dla Wordfence Security &#8211; i co wa\u017cniejsze: nale\u017cy do pierwszych plugin\u00f3w implementuj\u0105cych <strong>WordPress Abilities API<\/strong> z WordPressa 6.9.<\/p>\n\n\n\n<p>W praktyce dostajesz dwa kana\u0142y sterowania Wordfence: klasyczne polecenia <code>wp<\/code> w terminalu oraz ustandaryzowany interfejs (Abilities API), dzi\u0119ki kt\u00f3remu funkcje bezpiecze\u0144stwa mog\u0105 by\u0107 \u201eodkrywane\u201d i wywo\u0142ywane przez narz\u0119dzia automatyzuj\u0105ce oraz agent\u00f3w AI bez pisania dedykowanej integracji pod ka\u017cd\u0105 akcj\u0119.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Co dok\u0142adnie wnosi plugin<\/h2>\n\n\n\n<p>Plugin dodaje do WP-CLI now\u0105 przestrze\u0144 polece\u0144 <code>wp wfsec<\/code>, kt\u00f3ra mapuje najwa\u017cniejsze operacje Wordfence na komendy terminalowe. Zakres jest szeroki: od skan\u00f3w malware, przez zarz\u0105dzanie WAF, po prac\u0119 z wykrytymi problemami i konfiguracj\u0105.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1) Skanowanie bezpiecze\u0144stwa (Security Scanning)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Uruchamianie szybkiego skanu lub pe\u0142nego skanu malware.<\/li>\n\n\n<li>Monitorowanie post\u0119pu skanu w czasie rzeczywistym.<\/li>\n\n\n<li>Podgl\u0105d historii skan\u00f3w oraz szczeg\u00f3\u0142owych log\u00f3w.<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2) Zarz\u0105dzanie zapor\u0105 (Firewall Management)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Blokowanie i odblokowywanie adres\u00f3w IP.<\/li>\n\n\n<li>Ustawianie czasu trwania blokady oraz powodu (reason).<\/li>\n\n\n<li>Sprawdzanie, czy konkretny adres IP jest zablokowany.<\/li>\n\n\n<li>W\u0142\u0105czanie lub wy\u0142\u0105czanie ochrony WAF (Web Application Firewall).<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3) Praca z incydentami i wykryciami (Issue Tracking)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Wylistowanie wszystkich wykrytych problem\u00f3w bezpiecze\u0144stwa.<\/li>\n\n\n<li>Filtrowanie po statusie: new, ignored, resolved.<\/li>\n\n\n<li>Usuwanie lub zarz\u0105dzanie pojedynczymi zagro\u017ceniami.<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">4) Konfiguracja (Configuration)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Odczyt i zmiana ustawie\u0144 Wordfence.<\/li>\n\n\n<li>Sprawdzanie statusu licencji.<\/li>\n\n\n<li>Eksport i import konfiguracji.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Szybkie przyk\u0142ady: komendy <code>wp wfsec<\/code> w praktyce<\/h2>\n\n\n\n<p>Poni\u017cej kilka polece\u0144, kt\u00f3re dobrze pokazuj\u0105, jak wygl\u0105da codzienna obs\u0142uga Wordfence bez wchodzenia do kokpitu. To szczeg\u00f3lnie wygodne w skryptach utrzymaniowych, CI\/CD albo przy pracy na wielu serwerach.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly># Sprawd\u017a og\u00f3lny status Wordfence\nwp wfsec status\n\n# Uruchom pe\u0142ny skan bezpiecze\u0144stwa\nwp wfsec scan start --type=full\n\n# Podejrzyj post\u0119p skanu\nwp wfsec scan status\n\n# Wylistuj wszystkie problemy bezpiecze\u0144stwa\nwp wfsec issues ls --status=all\n\n# Zablokuj IP na 24 godziny (86400 sekund)\nwp wfsec firewall block 192.168.1.100 --duration=86400 --reason=&quot;Brute force attempt&quot;\n\n# Sprawd\u017a status licencji\nwp wfsec license status\n\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#6A737D\"># Sprawd\u017a og\u00f3lny status Wordfence<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">wp<\/span><span style=\"color:#9ECBFF\"> wfsec<\/span><span style=\"color:#9ECBFF\"> status<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\"># Uruchom pe\u0142ny skan bezpiecze\u0144stwa<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">wp<\/span><span style=\"color:#9ECBFF\"> wfsec<\/span><span style=\"color:#9ECBFF\"> scan<\/span><span style=\"color:#9ECBFF\"> start<\/span><span style=\"color:#79B8FF\"> --type=full<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\"># Podejrzyj post\u0119p skanu<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">wp<\/span><span style=\"color:#9ECBFF\"> wfsec<\/span><span style=\"color:#9ECBFF\"> scan<\/span><span style=\"color:#9ECBFF\"> status<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\"># Wylistuj wszystkie problemy bezpiecze\u0144stwa<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">wp<\/span><span style=\"color:#9ECBFF\"> wfsec<\/span><span style=\"color:#9ECBFF\"> issues<\/span><span style=\"color:#9ECBFF\"> ls<\/span><span style=\"color:#79B8FF\"> --status=all<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\"># Zablokuj IP na 24 godziny (86400 sekund)<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">wp<\/span><span style=\"color:#9ECBFF\"> wfsec<\/span><span style=\"color:#9ECBFF\"> firewall<\/span><span style=\"color:#9ECBFF\"> block<\/span><span style=\"color:#79B8FF\"> 192.168.1.100<\/span><span style=\"color:#79B8FF\"> --duration=86400<\/span><span style=\"color:#79B8FF\"> --reason=<\/span><span style=\"color:#9ECBFF\">\"Brute force attempt\"<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#6A737D\"># Sprawd\u017a status licencji<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">wp<\/span><span style=\"color:#9ECBFF\"> wfsec<\/span><span style=\"color:#9ECBFF\"> license<\/span><span style=\"color:#9ECBFF\"> status<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Wszystkie komendy wspieraj\u0105 te\u017c <code>--format=json<\/code>, co jest kluczowe, je\u015bli chcesz podpina\u0107 to pod automatyzacje (np. parsowanie wynik\u00f3w w skryptach) albo integrowa\u0107 z w\u0142asnymi dashboardami.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Abilities API w WordPress 6.9: po co to w og\u00f3le Wordfence\u2019owi?<\/h2>\n\n\n\n<p>Najciekawsza cz\u0119\u015b\u0107 tego projektu to implementacja <strong>WordPress Abilities API<\/strong> &#8211; nowego, ustandaryzowanego interfejsu wprowadzonego w WordPressie 6.9. Za\u0142o\u017cenie jest proste: zamiast zgadywa\u0107, jakie endpointy lub niestandardowe integracje ma dany plugin, narz\u0119dzia (w tym agenci AI) mog\u0105 \u201eodkry\u0107\u201d dost\u0119pne mo\u017cliwo\u015bci WordPressa i bezpiecznie je wywo\u0142ywa\u0107 przez interfejs opisany schematem i walidowany po stronie serwera.<\/p>\n\n\n\n<p>W kontek\u015bcie bezpiecze\u0144stwa to otwiera kilka sensownych scenariuszy: automatyczne, okresowe uruchamianie skan\u00f3w; budowanie monitoringu opartego o dane z Wordfence; integracj\u0119 z zewn\u0119trznymi panelami; a nawet delegowanie rutynowych kontroli do automatyzacji\/agent\u00f3w AI &#8211; bez klejenia dedykowanego kodu integracyjnego dla ka\u017cdego wywo\u0142ania.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Jakie \u201eabilities\u201d udost\u0119pnia plugin<\/h3>\n\n\n\n<p>Plugin wystawia siedem kluczowych mo\u017cliwo\u015bci (abilities), kt\u00f3re pokrywaj\u0105 najbardziej u\u017cyteczne operacje zwi\u0105zane z Wordfence:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><strong>scan-status<\/strong> &#8211; pobranie bie\u017c\u0105cego stanu skanowania i post\u0119pu.<\/li>\n\n\n<li><strong>scan-start<\/strong> &#8211; programowe uruchomienie skanu bezpiecze\u0144stwa.<\/li>\n\n\n<li><strong>issues-list<\/strong> &#8211; pobranie listy wykrytych problem\u00f3w bezpiecze\u0144stwa.<\/li>\n\n\n<li><strong>issues-count<\/strong> &#8211; zliczenie problem\u00f3w wed\u0142ug poziomu\/severity.<\/li>\n\n\n<li><strong>firewall-status<\/strong> &#8211; sprawdzenie stanu WAF.<\/li>\n\n\n<li><strong>firewall-block<\/strong> &#8211; blokowanie IP przez API.<\/li>\n\n\n<li><strong>license-status<\/strong> &#8211; odczyt informacji o licencji.<\/li>\n\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Uwierzytelnianie: Application Passwords + Basic Auth<\/h3>\n\n\n\n<p>Autoryzacja po stronie Abilities API jest rozwi\u0105zana przez <strong>WordPress Application Passwords<\/strong> (has\u0142a aplikacyjne) u\u017cywane z <strong>Basic Auth<\/strong>. To podej\u015bcie jest praktyczne dla integracji i automatyzacji, bo pozwala nadawa\u0107 dost\u0119p w spos\u00f3b kontrolowany (oddzielne has\u0142o per integracja) bez ujawniania g\u0142\u00f3wnego has\u0142a u\u017cytkownika.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Wymagania techniczne<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>WordPress 6.9+<\/li>\n\n\n<li>PHP 8.0+<\/li>\n\n\n<li>WP-CLI 2.5+<\/li>\n\n\n<li>Zainstalowany plugin Wordfence Security (wersja darmowa lub premium).<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Instalacja: ZIP lub Composer<\/h2>\n\n\n\n<p>Je\u015bli instalujesz klasycznie, pobierz paczk\u0119 ZIP i wrzu\u0107 j\u0105 do katalogu <code>\/wp-content\/plugins\/<\/code>, a nast\u0119pnie aktywuj plugin w WordPressie.<\/p>\n\n\n<a href=\"https:\/\/github.com\/trueqap\/wpcli-for-wordfence\/releases\/download\/v1.0.0\/wpcli-for-wordfence-1.0.0.zip\" class=\"download-card\" download>\n                <span class=\"download-icon\"><i class=\"fa-duotone fa-file-zipper\"><\/i><\/span>\n                <span class=\"download-info\">\n                    <span class=\"download-title\">Download WP CLI for Wordfence v1.0.0<\/span>\n                    <span class=\"download-meta\"><span class=\"download-filename\">wpcli-for-wordfence-1.0.0.zip<\/span><\/span>\n                <\/span>\n                <span class=\"download-action\"><i class=\"fa-duotone fa-arrow-down-to-line\"><\/i><\/span>\n            <\/a>\n\n\n<p>Alternatywnie, je\u015bli pracujesz w uk\u0142adzie typu Bedrock, instalacja przez Composer ma wi\u0119cej sensu (zarz\u0105dzanie zale\u017cno\u015bciami i wersjami w repo).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Podsumowanie: kiedy to ma najwi\u0119kszy sens<\/h2>\n\n\n\n<p>Ten plugin jest szczeg\u00f3lnie przydatny, gdy utrzymujesz wiele instancji WordPressa, pracujesz na serwerach bez GUI, automatyzujesz utrzymanie albo budujesz w\u0142asne procesy bezpiecze\u0144stwa. <code>wp wfsec<\/code> daje Ci wygodny interfejs w terminalu, a Abilities API w WordPressie 6.9 dok\u0142ada warstw\u0119 integracyjn\u0105 pod automatyzacje i agent\u00f3w AI &#8211; w formie ustandaryzowanej, samopisz\u0105cej si\u0119 (self-describing) i walidowanej schematami.<\/p>\n\n\n<div class=\"references-section\">\n                <h2>Odniesienia \/ \u0179r\u00f3d\u0142a<\/h2>\n                <ul class=\"references-list\"><li><a href=\"https:\/\/github.com\/trueqap\/wpcli-for-wordfence\" target=\"_blank\" rel=\"noopener noreferrer\">WP-CLI &amp; Abilities API for Wordfence: Manage Security from Terminal and AI Agents<\/a><\/li><\/ul>\n            <\/div>","protected":false},"excerpt":{"rendered":"<p>Wordfence zwykle obs\u0142ugujesz w kokpicie, ale teraz mo\u017cesz odpali\u0107 skan, zablokowa\u0107 IP i przejrze\u0107 incydenty z WP-CLI &#8211; a dzi\u0119ki Abilities API tak\u017ce udost\u0119pni\u0107 te akcje automatyzacjom i agentom AI.<\/p>\n","protected":false},"author":26,"featured_media":153,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[68,35,15,10,8],"class_list":["post-152","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bezpieczenstwo","tag-automatyzacja","tag-bezpieczenstwo","tag-wordfence","tag-wordpress","tag-wp-cli"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/posts\/152","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/users\/26"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/comments?post=152"}],"version-history":[{"count":1,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/posts\/152\/revisions"}],"predecessor-version":[{"id":154,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/posts\/152\/revisions\/154"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/media\/153"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/media?parent=152"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/categories?post=152"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/tags?post=152"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}