Przejdź do treści
WordPress MCP Adapter: jak wystawić Abilities API jako narzędzia dla agentów AI
Magdalena Wiśniewska
Magdalena Wiśniewska 17 February 2026 · 18 min czytania

WordPress MCP Adapter: jak wystawić Abilities API jako narzędzia dla agentów AI

WordPress 6.9 wprowadził Abilities API – mechanizm, który wreszcie porządkuje ekspozycję funkcjonalności w core i wtyczkach w formie ustandaryzowanej, wykrywalnej, typowanej i wykonywalnej. To ważne nie tylko dla programistów, ale też dla automatyzacji i agentów AI, bo daje wspólny „interfejs działań”, z którego da się bezpiecznie korzystać w różnych kontekstach (PHP, JavaScript, REST API).

Równolegle dojrzewa Model Context Protocol (MCP) – podejście do tego, jak narzędzia AI dostają kontekst i jak wywołują zewnętrzne funkcje. I tu pojawia się WordPress MCP Adapter: oficjalna warstwa, która mapuje Abilities na prymitywy MCP, dzięki czemu aplikacje typu Claude Desktop, Claude Code, Cursor czy VS Code mogą wykrywać i uruchamiać funkcje WordPressa jako MCP tools.

Szybka powtórka: czym są Abilities i po co to komu?

Abilities API daje WordPressowi „pierwszorzędne”, wielokontekstowe API funkcyjne. W praktyce chodzi o to, żeby core i wtyczki mówiły o swoich możliwościach jednym, wspólnym językiem – tak, by inne elementy ekosystemu mogły je łatwo odnaleźć i uruchomić.

Ability definiujesz raz, a potem możesz ją wykonać z PHP, JavaScriptu albo przez REST API. Rejestracja składa się z kilku kluczowych elementów:

  • Unikalna nazwa (namespace/ability-name).
  • Typowany schemat wejścia (input schema) i wyjścia (output schema).
  • permission_callback, który wymusza uprawnienia (capabilities).
  • execute_callback, który wykonuje właściwą pracę (pobranie danych, update postów, diagnostyka, itp.).

W WordPressie 6.9 dostępne są trzy domyślne abilities w core (idealne do pierwszych testów integracji z MCP):

  • core/get-site-info – zwraca informacje o witrynie skonfigurowane w WordPressie; domyślnie wszystkie pola, opcjonalnie podzbiór.
  • core/get-user-info – zwraca podstawowe dane profilu aktualnie uwierzytelnionego użytkownika (personalizacja, audyt, zachowania zależne od dostępu).
  • core/get-environment-info – zwraca informacje diagnostyczne o środowisku uruchomieniowym (środowisko, PHP, baza danych, wersja WordPressa).

Czym jest WordPress MCP Adapter?

WordPress MCP Adapter to oficjalny pakiet w ramach inicjatywy AI Building Blocks for WordPress. Jego zadaniem jest „przetłumaczenie” abilities zarejestrowanych przez Abilities API na prymitywy wspierane przez Model Context Protocol (MCP). Dzięki temu agenci AI potrafią:

  • odkrywać funkcjonalność witryny jako MCP tools (narzędzia do wykonania akcji),
  • czytać dane WordPressa jako MCP resources (źródła kontekstu),
  • korzystać z gotowych prompts (szablonów/procedur pracy), jeśli je skonfigurujesz.

Najważniejsza konsekwencja jest bardzo praktyczna: jeśli Twoja wtyczka już rejestruje abilities, to do „odblokowania” użycia ich przez agenta AI brakuje Ci jednego kroku.

MCP w pigułce: tools, resources i prompts

MCP porządkuje interakcje na trzech prymitywach:

  • Tools – wykonywalne funkcje, które model/agent wywołuje, żeby zrobić działanie (np. pobrać zamówienia, zaktualizować post, uruchomić diagnostykę).
  • Resources – pasywne źródła danych do wczytania jako kontekst (np. pliki, rekordy, statyczna konfiguracja).
  • Prompts – prekonfigurowane szablony prowadzące konkretne workflow.

W przypadku MCP Adaptera abilities najczęściej lądują jako tools, bo reprezentują logikę wykonywalną. Adapter jest jednak elastyczny: jeśli dana ability dostarcza wyłącznie dane „read-only” (np. log debugowania albo statyczny zestaw konfiguracji), można ją skonfigurować tak, by działała jako resource – czyli agent AI po prostu wczyta ją jako tło, bez jawnego „wywołania” narzędzia.

Instalacja MCP Adaptera jako wtyczki (najszybszy start)

Najszybciej zaczniesz, instalując MCP Adapter jako wtyczkę z paczki z GitHuba (sekcja Releases): https://github.com/WordPress/mcp-adapter/releases.

Po instalacji i aktywacji wtyczka rejestruje domyślny serwer MCP o nazwie mcp-adapter-default-server oraz trzy dodatkowe abilities:

  • mcp-adapter/discover-abilities
  • mcp-adapter/get-ability-info
  • mcp-adapter/execute-ability

Te abilities są automatycznie wystawiane jako narzędzia MCP (tools):

  • mcp-adapter-discover-abilities
  • mcp-adapter-get-ability-info
  • mcp-adapter-execute-ability

To celowo „warstwowe” podejście do dostępu: agent może najpierw wykryć, co jest dostępne, potem pobrać informacje o konkretnej ability, a na końcu ją wykonać.

Jak udostępnić abilities przez domyślny serwer MCP (meta.mcp.public)

Domyślny serwer MCP Adaptera nie publikuje abilities automatycznie. Żeby dana ability była dostępna przez mcp-adapter-default-server, musi być jawnie oznaczona jako publiczna dla MCP. Robi się to przez flagę meta.mcp.public w argumentach rejestracji (wp_register_ability()).

'meta' => array(
    'mcp' => array(
        'public' => true,  // Wymagane, aby ability była dostępna w domyślnym serwerze MCP
    ),
)

Jeśli chcesz szybko potestować na core abilities, możesz dopiąć filtr wp_register_ability_args i dopisać tę flagę do konkretnych identyfikatorów.

<?php
/**
 * Plugin Name: Enable core abilities
 * Version: 1.0.0
 *
 * @package enable-core-abilities
 */

add_filter( 'wp_register_ability_args', 'myplugin_enable_core_abilities_mcp_access', 10, 2 );
/**
 * Enable MCP access for core abilities.
 *
 * @param array  $args         Ability registration arguments.
 * @param string $ability_name Ability ID.
 * @return array Modified ability registration arguments.
 */
function myplugin_enable_core_abilities_mcp_access( array $args, string $ability_name ) {
    // Enable MCP access for the three current core abilities.
    $core_abilities = array(
        'core/get-site-info',
        'core/get-user-info',
        'core/get-environment-info',
    );

    if ( in_array( $ability_name, $core_abilities, true ) ) {
        $args['meta']['mcp']['public'] = true;
    }

    return $args;
}

Po takim kroku możesz podpiąć klienta AI do WordPressa przez MCP Adapter i wywoływać core abilities przez narzędzia MCP wystawione na domyślnym serwerze.

Podłączanie aplikacji AI: STDIO vs HTTP

MCP przewiduje dwa sposoby transportu: STDIO i HTTP. Wybór zwykle zależy od tego, gdzie stoi WordPress.

STDIO: najlepsze dla lokalnego developmentu (WP-CLI)

Dla lokalnych środowisk najprościej jest użyć transportu STDIO, uruchamianego przez WP-CLI. Wymaganie: musisz mieć WP-CLI lokalnie.

Minimalna konfiguracja po stronie klienta MCP wygląda tak (nazwa serwera może być dowolna – tu wordpress-mcp-server):

{
  "wordpress-mcp-server": {
    "command": "wp",
    "args": [
      "--path=/path/to/your/wordpress/installation",
      "mcp-adapter",
      "serve",
      "--server=mcp-adapter-default-server",
      "--user={admin_user}"
    ]
  }
}

Elementy tej konfiguracji:

  • command: wp (czyli WP-CLI).
  • --path: ścieżka do instalacji WordPressa.
  • mcp-adapter serve: uruchomienie serwera MCP Adaptera.
  • --server: wybór serwera MCP (tu: domyślny).
  • --user: użytkownik WordPressa, jako którego klient AI będzie się uwierzytelniał (w praktyce: to jest „kontekst uprawnień” dla wywołań).

HTTP: dla publicznych instalacji (i bez STDIO) przez zdalny proxy

Dla publicznie dostępnych instalacji WordPressa (albo gdy nie chcesz/nie możesz iść przez STDIO) możesz użyć transportu HTTP. W typowym wariancie robi się to przez zdalny proxy @automattic/mcp-wordpress-remote: https://www.npmjs.com/package/@automattic/mcp-wordpress-remote.

Wymagania: Node.js na Twoim komputerze oraz uwierzytelnianie po stronie WordPressa – najczęściej przez Application Passwords (hasła aplikacji) lub własną implementację OAuth.

{
  "wordpress-mcp-server": {
    "command": "npx",
    "args": ["-y", "@automattic/mcp-wordpress-remote@latest"],
    "env": {
      "WP_API_URL": "https://yoursite.example/wp-json/mcp/mcp-adapter-default-server",
      "WP_API_USERNAME": "{admin_user}",
      "WP_API_PASSWORD": "{application-password}"
    }
  }
}

Na co zwrócić uwagę:

  • command: npx (uruchamia paczki Node.js).
  • -y: automatyczna zgoda na instalację paczki.
  • WP_API_URL: URL do endpointu MCP w WordPressie (REST).
  • WP_API_USERNAME i WP_API_PASSWORD: dane do uwierzytelnienia (np. hasło aplikacji użytkownika).

Jeśli łączysz się lokalnie przez HTTP proxy i coś nie działa, pomocne są wskazówki diagnostyczne w dokumentacji projektu: https://github.com/Automattic/mcp-wordpress-remote/blob/trunk/Docs/troubleshooting.md. Najczęstsze problemy to wiele wersji Node.js na maszynie albo kłopoty z lokalnymi certyfikatami SSL.

Konfiguracja w konkretnych aplikacjach (Claude Desktop, Cursor, Claude Code, VS Code)

Uwaga o ścieżkach i użytkowniku

Przykłady poniżej bazują na lokalnej instalacji pod ścieżką /Users/jonathanbossenger/Studio/wordpress-mcp oraz użytkowniku admin i lokalnym adresie http://localhost:8885/. Podmień to na własne wartości.

Claude Desktop

Claude Desktop ma natywne wsparcie dla MCP. Konfigurację dodasz w zakładce Developer (ścieżka: Claude → Settings → Developer), a następnie w sekcji Local MCP servers wybierasz Edit config. Otworzy się lokalizacja pliku claude_desktop_config.json.

Serwery MCP dodaje się do obiektu mcpServers:

{
  "mcpServers": {
  }
}

Przykład dla STDIO:

{
  "mcpServers": {
    "wordpress-mcp-server": {
      "command": "wp",
      "args": [
        "--path=/Users/jonathanbossenger/Studio/wordpress-mcp",
        "mcp-adapter",
        "serve",
        "--server=mcp-adapter-default-server",
        "--user=admin"
      ]
    }
  }
}

Przykład dla HTTP:

{
  "mcpServers": {
    "wordpress-mcp-server": {
      "command": "npx",
      "args": ["-y", "@automattic/mcp-wordpress-remote@latest"],
      "env": {
        "WP_API_URL": "http://localhost:8885/wp-json/mcp/mcp-adapter-default-server",
        "WP_API_USERNAME": "admin",
        "WP_API_PASSWORD": "2SEB qW5j D7CW fpsh pbmN RGva"
      }
    }
  }
}

Po zapisaniu pliku musisz zrestartować Claude Desktop – konfiguracje MCP są wczytywane przy starcie. Gdy wszystko działa, w Developer → Local MCP servers zobaczysz status running przy nazwie serwera.

Claude Desktop: dodany serwer WordPress MCP z widocznym statusem działania
Forrás: WordPress Developer Blog

Cursor

W Cursor przechodzisz do Cursor → Settings → Cursor Settings, potem sekcja Tools and MCP. Tam wybierasz Add Custom MCP, co otworzy plik konfiguracyjny mcp.json.

Format konfiguracji jest taki sam jak w Claude Desktop. Po zapisaniu wracasz do Tools and MCP i włączasz serwer do użycia w sesjach kodowania.

Cursor: panel Tools & MCP z dodanym WordPress MCP Server
Forrás: WordPress Developer Blog

Claude Code

W Claude Code masz dwie opcje: dodać obiekt mcpServers do pliku .claude.json w katalogu domowym (konfiguracja globalna), albo stworzyć .mcp.json w katalogu projektu (konfiguracja per-projekt). Druga opcja jest praktyczna, jeśli różne projekty mają różne serwery MCP. Format konfiguracji pozostaje taki sam jak w Cursor/Claude Desktop.

VS Code

VS Code wymaga pliku JSON opisującego serwer MCP, zwykle mcp.json, umieszczonego w .vscode w workspace projektu. Dokumentacja konfiguracji jest tutaj: https://code.visualstudio.com/docs/copilot/customization/mcp-servers.

Różnica względem Claude Desktop/Cursor jest jedna: zamiast mcpServers używasz obiektu servers. Reszta definicji serwerów jest taka sama.

{
  "servers": {
    // MCP server definitions go here
  }
}

Po utworzeniu pliku VS Code pokazuje pasek sterowania MCP, gdzie możesz wystartować/zatrzymać/zrestartować serwer. Gdy serwer działa, VS Code pokaże też liczbę dostępnych narzędzi (tools) – np. 3 na domyślnym serwerze MCP Adaptera.

Jak wygląda użycie narzędzi MCP w praktyce?

Gdy klient AI jest połączony z serwerem MCP Twojej witryny, może używać narzędzi wystawionych przez MCP Adapter. Przykładowy scenariusz: prosisz w Claude Desktop o „Get the site info from my WordPress site”.

Claude Desktop: zapytanie do AI i odpowiedź na podstawie danych z WordPress MCP
Forrás: WordPress Developer Blog

Typowy przebieg jest taki: klient AI wykrywa dostępny serwer MCP i najpierw wywołuje mcp-adapter-discover-abilities, żeby sprawdzić, jakie abilities są dostępne. Następnie dobiera właściwą ability (np. core/get-site-info) i uruchamia ją przez mcp-adapter-execute-ability, przekazując nazwę ability. Wynik wraca do aplikacji i jest prezentowany jako odpowiedź.

Własny serwer MCP w Twojej wtyczce (Composer + create_server())

Domyślny serwer MCP Adaptera pokrywa większość potrzeb, ale czasem lepiej mieć własny serwer MCP na poziomie wtyczki – np. żeby precyzyjnie kontrolować, które abilities są wystawiane, jaką mają nazwę/deskrypcję w kliencie AI i jakie transporty/handlery są używane.

Wariant „wtyczkowy” robi się przez instalację pakietu MCP Adapter przez Composer oraz rejestrację serwera w kodzie.

1) Dodaj zależność przez Composer

composer require wordpress/mcp-adapter

2) Załaduj autoloader Composer

if ( file_exists( __DIR__ . '/vendor/autoload.php' ) ) {
    require_once __DIR__ . '/vendor/autoload.php';
}

Jeśli istnieje ryzyko, że kilka wtyczek na stronie będzie zależeć od MCP Adaptera lub Abilities API, zalecane jest użycie Jetpack Autoloader, żeby uniknąć konfliktów wersji: https://github.com/WordPress/mcp-adapter/blob/trunk/docs/getting-started/installation.md#using-jetpack-autoloader-highly-recommended.

3) Zainicjuj MCP Adapter

if ( ! class_exists( WPMCPCoreMcpAdapter::class ) ) {
    // Jeśli klasa MCP Adaptera nie jest dostępna, pokaż błąd / admin notice.
    return;
}

// Initialize MCP Adapter and its default server.
WPMCPCoreMcpAdapter::instance();

4) Utwórz własny serwer MCP w akcji mcp_adapter_init

Własny serwer tworzysz na hooku mcp_adapter_init. Callback dostaje instancję adaptera, a następnie wywołujesz create_server() z pełną konfiguracją.

add_action( 'mcp_adapter_init', 'myplugin_create_custom_mcp_server' );
function myplugin_create_custom_mcp_server( $adapter ) {
    $adapter = WPMCPCoreMcpAdapter::instance();
    $adapter->create_server(
        'custom-mcp-server', // Unique server identifier.
        'custom-mcp-server', // REST API namespace.
        'mcp',               // REST API route.
        'Custom MCP Server', // Server name.
        'Custom MCP Server', // Server description.
        'v1.0.0',            // Server version.
        array(               // Transport methods.
            WPMCPTransportHttpTransport::class,  // Recommended: MCP 2025-06-18 compliant.
        ),
        WPMCPInfrastructureErrorHandlingErrorLogMcpErrorHandler::class, // Error handler.
        WPMCPInfrastructureObservabilityNullMcpObservabilityHandler::class, // Observability handler.
        array( 'namespace/ability-name' ), // Abilities to expose as tools
        array(),                           // Resources (optional).
        array(),                           // Prompts (optional).
    );
}

Parametry, które najczęściej interesują wtyczkowego developera:

  • (1) Unikalny identyfikator serwera – używany np. przy uruchamianiu przez WP-CLI.
  • (2) i (3) Namespace i route REST API dla serwera MCP.
  • (4) i (5) Nazwa i opis serwera – widoczne w aplikacjach AI na liście serwerów MCP.
  • (6) Wersja serwera.
  • (10) Lista nazw abilities, które chcesz wystawić jako MCP tools (może być wiele).
  • Pozostałe argumenty: transport, obsługa błędów i observability. Możesz użyć domyślnych klas z pakietu albo napisać własne, jeśli chcesz spinać to z własnym logowaniem/monitoringiem/transportem.

Przykład end-to-end: własny serwer MCP dla wtyczki „List All URLs”

Dobry przykład praktyczny to wtyczka „List All URLs”: https://github.com/wptrainingteam/list-all-urls. Poniżej komplet kroków, żeby dodać do niej własny serwer MCP.

Ważne

Przed rozpoczęciem dezaktywuj wtyczkę MCP Adapter (jeśli masz ją aktywną). W tym scenariuszu będziesz używać MCP Adaptera jako zależności Composer w samej wtyczce.

1) Sklonuj repo do katalogu wtyczek

cd wp-content/plugins
git clone git@github.com:wptrainingteam/list-all-urls.git

2) Przełącz się na gałąź z implementacją Abilities API

cd list-all-urls
git checkout abilities

3) Zainstaluj zależności

composer install

4) Dodaj MCP Adapter jako zależność

composer require wordpress/mcp-adapter

5) Zainicjuj adapter i zarejestruj serwer MCP w list-all-urls.php

Otwórz główny plik wtyczki list-all-urls.php i dodaj na końcu kod inicjalizujący MCP Adapter oraz tworzący serwer MCP, który wystawia list-all-urls/urls jako MCP tool.

if ( ! class_exists( WPMCPCoreMcpAdapter::class ) ) {
    return;
}

// Initialize MCP Adapter and its default server.
WPMCPCoreMcpAdapter::instance();

add_action( 'mcp_adapter_init', 'list_all_urls_create_custom_mcp_server' );
/**
 * Create a custom MCP server for the List All URLs plugin.
 *
 * @param object $adapter WPMCPCoreMcpAdapter The MCP Adapter instance.
 * @return void
 */
function list_all_urls_create_custom_mcp_server( $adapter ) {
    $adapter = WPMCPCoreMcpAdapter::instance();
    $adapter->create_server(
        'list-all-urls-mcp-server',
        'list-all-urls-mcp-server',
        'mcp',
        'List All URLS MCP Server',
        'Custom MCP Server for the List All URLs plugin. Currently exposes only the list-all-urls/urls ability as an MCP Tool.',
        'v1.0.0',
        array(
            WPMCPTransportHttpTransport::class,
        ),
        WPMCPInfrastructureErrorHandlingErrorLogMcpErrorHandler::class,
        WPMCPInfrastructureObservabilityNullMcpObservabilityHandler::class,
        array( 'list-all-urls/urls' ),
    );
}

W tym podejściu nie musisz ustawiać meta.mcp.public dla list-all-urls/urls, bo wystawiasz ability jawnie w konfiguracji własnego serwera MCP.

6) Aktywuj wtyczkę i podmień konfigurację klienta AI

Po aktywacji w panelu WordPressa zaktualizuj konfigurację MCP w aplikacji AI tak, aby używała nowego serwera list-all-urls-mcp-server. Przykład dla VS Code pokazujący dwa serwery naraz (domyślny i ten z wtyczki), oba przez STDIO:

{
  "servers": {
    "wordpress-mcp-server": {
      "command": "wp",
      "args": [
        "--path=/Users/jonathanbossenger/Studio/wordpress-mcp",
        "mcp-adapter",
        "serve",
        "--server=mcp-adapter-default-server",
        "--user=admin"
      ]
    },
    "list-all-urls-mcp-server": {
      "command": "wp",
      "args": [
        "--path=/Users/jonathanbossenger/Studio/wordpress-mcp",
        "mcp-adapter",
        "serve",
        "--server=list-all-urls-mcp-server",
        "--user=admin"
      ]
    }
  }
}

W wielu aplikacjach możesz mieć skonfigurowanych kilka serwerów MCP jednocześnie – co ułatwia przełączanie się między różnymi witrynami WordPress lub różnymi zestawami abilities wystawianymi przez konkretne wtyczki.

Po zmianie konfiguracji pamiętaj, żeby zrestartować aplikację AI albo uruchomić serwer MCP w jej interfejsie (zależnie od klienta). Gdy wszystko gra, możesz poprosić AI o „List all URLs on my WordPress site”, a klient wywoła narzędzie list-all-urls-urls przez MCP Adapter.

VS Code: użycie MCP tools do pobrania listy URL-i z wtyczki List All URLs
Forrás: WordPress Developer Blog

Bezpieczeństwo i dobre praktyki (to są „zalogowani użytkownicy”)

Kluczowa rzecz: klienci MCP działają w kontekście zalogowanego użytkownika WordPressa. Traktuj więc integrację MCP jak część powierzchni aplikacji (attack surface). Zestaw praktyk, które warto przyjąć od razu:

  • Uważnie projektuj permission_callback – każda ability powinna sprawdzać minimalne wymagane capability (manage_options, edit_posts, itd.). Unikaj __return_true dla operacji destrukcyjnych (np. usuwanie treści).
  • Używaj dedykowanych użytkowników do dostępu MCP – szczególnie na produkcji utwórz osobną rolę/użytkownika o ograniczonych uprawnieniach. Nie wystawiaj „mocnych” abilities niezweryfikowanym klientom AI.
  • Dla publicznych endpointów MCP preferuj możliwości tylko do odczytu – przy HTTP dostępnym z internetu skup się na diagnostyce, raportowaniu i odczycie treści.
  • Jeśli trzeba, wdrażaj własne uwierzytelnianie – domyślnie często opiera się to o application passwords, ale możesz wdrożyć OAuth lub inne metody, jeśli wymaga tego profil ryzyka.
  • Monitoruj i loguj użycie – przez własne handlery błędów i observability podepniesz się pod swój stos logowania/monitoringu.

Minimalna ścieżka „hello AI” dla developera WordPressa

Jeśli chcesz wejść w temat bez wielkiej przebudowy, minimalny zestaw kroków wygląda tak:

  1. Zarejestruj jedną ability (najlepiej read-only).
  2. Dodaj MCP Adapter (jako wtyczkę lub zależność Composer) i go zainicjuj.
  3. Jeśli używasz domyślnego serwera, ustaw meta.mcp.public = true dla tej ability.
  4. Podłącz klienta MCP-aware (Claude Desktop/Cursor/VS Code/Claude Code) przez STDIO (lokalnie) albo HTTP (zdalnie).
  5. Testuj proste scenariusze i stopniowo rozszerzaj zestaw abilities i workflow.

Największa wartość z połączenia Abilities API + MCP Adaptera jest taka, że wtyczki zaczynają zachowywać się jak AI-ready APIs – bez wymyślania własnych endpointów i bez tworzenia „jednorazowych” integracji pod konkretnego dostawcę AI.

Dodatkowy kontekst: WordPress.com, OAuth 2.1 i zgodność podejścia

W praktyce pojawia się też pytanie o spójność narzędzi MCP między WordPress.com a self-hosted. Istotna informacja: narzędzia MCP w WordPress.com są oparte o ten sam fundament Abilities API i MCP Adapter, więc scenariusz „rejestruję możliwości raz i działają w obu światach” jest teoretycznie osiągalny. Różnica, która dziś wybija się najmocniej, dotyczy uwierzytelniania: WordPress.com korzysta z OAuth 2.1 (opis: https://wordpress.com/blog/2026/01/22/connect-ai-agents-to-wordpress-oauth-2-1/), a w self-hosted typowo opierasz się o JWT lub Application Passwords.

Dokumentacja, do której warto zaglądać na bieżąco:

Dołącz do społeczności HelloWP!

Porozmawiaj z nami o WordPressie i tworzeniu stron oraz dziel się doświadczeniami z innymi deweloperami.

- członkowie
- online
Dołącz

Używamy plików cookie, aby poprawić Twoje doświadczenia. Kontynuując, zgadzasz się na naszą Politykę plików cookie.