Estoy tratando de crear un punto final API personalizado en WordPress, y necesito redirigir las solicitudes a una página virtual en la raíz de WordPress a una página real que se envía con mi complemento. Básicamente, todas las solicitudes a una página se enrutan a la otra.
Ejemplo:
http://mysite.com/my-api.php
=>http://mysite.com/wp-content/plugins/my-plugin/my-api.php
El objetivo de esto es hacer que la url para el punto final de la API sea lo más breve posible (similar a http://mysite.com/xmlrpc.php
enviar el archivo de punto final de la API real con el complemento en lugar de requerir que el usuario mueva los archivos en su instalación y / o piratee el núcleo .
Mi primer intento fue agregar una regla de reescritura personalizada. Sin embargo, esto tuvo dos problemas.
- El punto final siempre tuvo una barra diagonal final. Se convirtió
http://mysite.com/my-api.php/
- Mi regla de reescritura solo se aplicó parcialmente. No redirigiría a
wp-content/plugins...
, redirigiría aindex.php&wp-content/plugins...
. Esto llevó a WordPress a mostrar un error de página no encontrada o simplemente a la página principal.
Ideas? Sugerencias?
fuente
get_query_vars()
en my-api.php. Verifiqué qué variables están cargadas. Y la única var que se establece es aaWP object
llamada$wp
. ¿Cómo puedo acceder o transformar esto en unWP_Query
objeto para poder acceder a las variables pasadasget_query_vars()
?include
un archivo, se ejecuta en el ámbito actual. En este caso, es lawpse9870_parse_request
función, que solo tiene el$wp
parámetro. Es posible que el$wp_query
objeto global no se haya configurado en este momento, porget_query_var()
lo que no funcionará. Sin embargo, tienes suerte:$wp
es la clase que contiene elquery_vars
miembro que necesitas; lo uso yo mismo en el código anterior.Esto funcionó para mí. Nunca toco la API de reescritura, pero siempre estoy dispuesto a empujarme en nuevas direcciones. Lo siguiente funcionó en mi servidor de prueba para 3.0 ubicado en una subcarpeta de localhost. No veo ningún problema si WordPress está instalado en la raíz web.
Simplemente suelte este código en un complemento y cargue el archivo llamado "taco-kittens.php" directamente en la carpeta del complemento. Necesitará escribir un rubor duro para sus enlaces permanentes. Creo que dicen que el mejor momento para hacer esto es activar el complemento.
Mis mejores deseos, -Mike
fuente
add_rewrite_rule( 'taco-kittens', 'wp-content/plugins/taco-kittens.php', 'top' );
¿Alguna razón para no hacer algo como esto?
http://mysite.com/?my-api=1
Luego solo conecta tu plugin a 'init' y verifica que esa variable sea variable. Si existe, haga lo que su complemento necesita hacer y muera ()
fuente
Es posible que no entienda sus preguntas por completo, pero ¿un simple shortcode resolvería su problema?
Pasos:
La nueva página actúa como un punto final de API y su shortcode envía solicitudes a su código de complemento en http://mysite.com/wp-content/plugins/my-plugin/my-api.php
(por supuesto, esto significa que my-api.php tendría el shortcode definido)
Probablemente pueda automatizar los pasos 1 y 2 a través del complemento.
fuente
Todavía no me he ocupado tanto de la reescritura, por lo que probablemente sea un poco difícil, pero parece funcionar:
Funciona si conecta esto a 'generate_rewrite_rules', pero debe haber una mejor manera, ya que no desea reescribir .htaccess en cada carga de página.
Parece que no puedo dejar de editar mis propias publicaciones ... probablemente debería entrar en activar la devolución de llamada y hacer referencia a $ wp_rewrite global. Y luego elimine la entrada de non_wp_rules y la salida a .htaccess nuevamente cuando desactive la devolución de llamada.
Y finalmente, la escritura en .htaccess debería ser un poco más sofisticada, solo desea reemplazar la sección de wordpress allí.
fuente
Tenía un requisito similar y quería crear varios puntos finales basados en babosas únicas que apuntaran al contenido generado por el complemento.
Echa un vistazo a la fuente de mi complemento: https://wordpress.org/extend/plugins/picasa-album-uploader/
La técnica que utilicé comienza agregando un filtro para
the_posts
examinar la solicitud entrante. Si el complemento lo maneja, se genera una publicación ficticia y se agrega una accióntemplate_redirect
.Cuando
template_redirect
se llama a la acción, debe dar como resultado que se muestre todo el contenido de la página para que se muestre y salga, o debe regresar sin generar ningún resultado. Vea el códigowp_include/template-loader.php
y verá por qué.fuente
Estoy usando otro enfoque que consiste en obligar a la página de inicio a cargar un título, contenido y plantilla de página personalizados .
La solución es muy clara, ya que se puede implementar cuando un usuario sigue un enlace amigable como http://example.com/ ? Plugin_page = myfakepage
Es muy fácil de implementar y debe permitir páginas ilimitadas.
Código e instrucciones aquí: genere una página de Wordpress personalizada / falsa / virtual sobre la marcha
fuente
Estoy usando un enfoque similar al anterior de Xavi Esteve, que dejó de funcionar debido a una actualización de WordPress por lo que pude ver en la segunda mitad de 2013.
Está documentado con gran detalle aquí: https://stackoverflow.com/questions/17960649/wordpress-plugin-generating-virtual-pages-and-using-theme-template
La parte clave de mi enfoque es usar la plantilla existente para que la página resultante se vea como parte del sitio; Quería que fuera lo más compatible posible con todos los temas, con suerte en todos los lanzamientos de WordPress. ¡El tiempo dirá si tenía razón!
fuente
es un ejemplo de producción, primero cree una clase de página virtual:
En el siguiente paso, engancha la
template_redirect
acción y maneja tu página virtual como a continuaciónfuente