WordPress agrega una regla de reescritura para apuntar al archivo del complemento

3 minutos de lectura

En primer lugar, probé varias sugerencias diferentes de otros usuarios de stackoverflow, pero no tuve suerte.

Estoy tratando de construir una especie de API desde dentro de un complemento. La tarea es permitir que un sistema externo llame a una URL dentro de mi complemento para que inicie un procedimiento interno.

Actualmente tengo una clase que tiene un constructor. Esto está dentro de ese constructor.

add_action( 'init', 'my_rewrite' );
function my_rewrite() {
  global $wp_rewrite;

  $plugin_url = plugins_url( 'my-api.php', __FILE__ );
  $plugin_url = substr( $plugin_url, strlen( home_url() ) + 1 );

  add_rewrite_rule('/my-api/(.*)', $plugin_url ,'top');

  $wp_rewrite->flush_rules(true);
}

Esto luego genera una regla de reescritura en mi archivo htaccess.

RewriteRule ^/my-api/(.*) /wp-content/plugins/my-api/classes/my-api.php [QSA,L]

A continuación se muestra el archivo .htaccess completo para el contexto

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteRule ^/slurp-api/(.*) /wp-content/plugins/slurp/classes/my-api.php [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

Por alguna razón, cuando visito site.dev/my-api, veo una página 404 en lugar de la declaración de eco que debería ejecutarse desde my-api.php

El sitio de desarrollo se está ejecutando a través de mamp pro si eso es de alguna ayuda.

Cualquier sugerencia de por qué esta reescritura no está jugando limpio sería muy apreciada.

Gracias

  • Si está utilizando estas reglas en el contexto htaccess, entonces… intente eliminar la barra inclinada inicial de todas las reglas, RewriteRule / myapi

    – Amit Verma

    8 de diciembre de 2015 a las 12:56


Eliminar la barra inclinada inicial de la solicitud original

RewriteRule ^my-api/(.*) /wp-content/plugins/my-api/classes/my-api.php [QSA,L]

Y asegúrese de que el archivo my-api.php existe en la ubicación que proporciona en el objetivo de reescritura:

/wp-content/plugins/my-api/classes/my-api.php 

Para no darle intencionalmente un objetivo inexistente.

Como @Starkeen menciona en los comentarios, también puede eliminar la barra diagonal inicial del objetivo, así

RewriteRule ^my-api/(.*) wp-content/plugins/my-api/classes/my-api.php [QSA,L]

  • Gracias por tu ayuda. He quitado las barras inclinadas iniciales, la línea ahora se ve así. RewriteRule ^mi-api/(.*) wp-content/plugins/mi-api/clases/mi-api.php [QSA,L]. Curiosamente, puedo buscar el archivo api yendo a site.dev/wp-content/plugins/my-api/classes/my-api.php Esto funciona perfectamente.

    – Lyle

    8 dic 2015 a las 14:01


  • Lo siento, presioné regresar antes de terminar de escribir el comentario. No, los cambios no han funcionado. Gracias

    – Lyle

    8 de diciembre de 2015 a las 14:03

  • ir a esta URL, http://site.dev/my-api/something-nice y comprobar si funciona o no

    – Alex Andrei

    8 dic 2015 a las 14:05


  • Idealmente, me gustaría que WordPress maneje la creación de reglas, ya que es un complemento que realmente no tengo/no debería tener acceso al archivo htaccess.

    – Lyle

    8 de diciembre de 2015 a las 14:07

  • Esa URL no funciona. He intentado todo lo que puedo pensar.

    – Lyle

    8 dic 2015 a las 14:34

Entonces, después de mucho retocar, encontré la respuesta correcta. Cambié esta línea a

add_rewrite_rule('my-api', $plugin_url ,'top');

Probé muchas variaciones de esto, pero este finalmente funcionó. Gracias por la ayuda.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad