WP Rest API nu funcționează

24 oct. 2019, 15:14:46
Vizualizări: 17.8K
Voturi: 5

WP 5.2.4

/wp-json/wp/v2/

Returnează eroare 404.

Am actualizat permalink-urile, am un fișier .htaccess funcțional pe Apache și nu folosesc "plain permalinks", dar tot nu funcționează. Configurația Apache este corectă și totul merge, cu excepția /wp-json.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Cum pot rezolva această problemă enervantă din WP? De ce WordPress nu îmbunătățește acest aspect, când oamenii se confruntă zilnic cu această problemă?

Rutele mele din WP arată astfel (reduse):

array (
  '^wc-auth/v([1]{1})/(.*)?' => 'index.php?wc-auth-version=$matches[1]&wc-auth-route=$matches[2]',
  '^wc-api/v([1-3]{1})/?$' => 'index.php?wc-api-version=$matches[1]&wc-api-route=/',
  '^wc-api/v([1-3]{1})(.*)?' => 'index.php?wc-api-version=$matches[1]&wc-api-route=$matches[2]',
  'sitemap_index\\.xml$' => 'index.php?sitemap=1',
  '([^/]+?)-sitemap([0-9]+)?\\.xml$' => 'index.php?sitemap=$matches[1]&sitemap_n=$matches[2]',
  '([a-z]+)?-?sitemap\\.xsl$' => 'index.php?yoast-sitemap-xsl=$matches[1]',
  'shop-4/?$' => 'index.php?post_type=product',
  'shop-4/feed/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?post_type=product&feed=$matches[1]',
  'shop-4/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?post_type=product&feed=$matches[1]',
  'shop-4/page/([0-9]{1,})/?$' => 'index.php?post_type=product&paged=$matches[1]',
  '^wp-json/?$' => 'index.php?rest_route=/',
  '^wp-json/(.*)?' => 'index.php?rest_route=/$matches[1]',

....

După cum puteți vedea, regulile wp-json ar trebui să funcționeze deoarece se potrivesc cu un URL precum

/wp-json/wp/v2/posts/6307

Am verificat care rute REST sunt disponibile (folosind plugin-ul "Rest Manager", simplu și eficient):

/wp/v2/posts/
/wp/v2/posts/(?P<id>[\d]+)

Când accesez URL-urile:

/index.php?rest_route=wp/v2/posts/6307
/index.php?rest_route=/wp/v2/posts/6307
/index.php?rest_route=wp/v2/posts/
/index.php?rest_route=/wp/v2/posts/

Toate returnează:

(404)
{"code":"rest_no_route","message":"Nu a fost găsită nicio rută care să se potrivească cu URL-ul și metoda de solicitare","data":{"status":404}}

Se spune că o listă de endpoint-uri este disponibilă prin GET /wp-json/ dar și această pagină returnează 404.

Comportamentul este exact același și pentru rutele care folosesc metode GET:

404 /wp-json/wp/v2/block-renderer/woocommerce/
4
Comentarii

Unele plugin-uri au o opțiune pentru a dezactiva API-ul REST. Asigură-te că toate plugin-urile sunt dezactivate și încearcă din nou.

idpokute idpokute
24 oct. 2019 17:27:41

Nu am multe plugin-uri, practic doar WooCommerce și WPML. API-ul REST este "activ", dar rutarea este pur și simplu defectuoasă.

Daniel W. Daniel W.
24 oct. 2019 17:29:08

Motivul pentru care sugerez dezactivarea tuturor plugin-urilor este pentru a identifica dacă problema este de la software (cum ar fi plugin-urile) sau de la server (cum ar fi probleme cu .htaccess).

idpokute idpokute
24 oct. 2019 17:31:52

@idpokute Am descoperat că Plugin-ul "WPML" cauzează această problemă. Ai vreo idee cum aș putea depana mai departe?

Daniel W. Daniel W.
27 oct. 2019 17:14:42
Toate răspunsurile la întrebare 1
1

Mai întâi trebuie să verifici dacă REST API din WordPress este activat sau nu

Cea mai bună metodă de verificare este să vizitezi acest URL: https://yoursite.com/wp-json. Dacă vezi un răspuns JSON, înseamnă că REST API este activat. Dacă apare o pagină de eroare sau ești redirecționat către pagina principală, înseamnă că REST API nu este activat. În acest caz, va trebui să-l activăm mai întâi.

În această situație, trebuie să activezi Permalinks

  1. Accesează pagina de administrare a site-ului tău (Vizitează https://yoursite.com/wp-json)
  2. setări > Permalinks (accesează https://yoursite.com/wp-admin/options-permalink.php)
  3. Asigură-te că opțiunea Plain nu este selectată
  4. Alege Post Name (este cea mai bună opțiune)
  5. Apoi apasă pe Salvare modificări. Aceasta va rescrie/repara fișierul tău .htaccess

Mai multe informații

14 mai 2021 10:07:35
Comentarii

Bun început, dar nu ai menționat ce să faci dacă vezi un răspuns JSON (adică API-ul funcționează). Ai început cu "dacă este activat sau nu", dar ai descris doar scenariul "nu". Voi transforma cu plăcere votul meu negativ într-unul pozitiv dacă poți finaliza răspunsul :)

Cush Cush
5 iul. 2021 19:07:53