WordPress piensa que mi ruta personalizada es una 404

4

Creé un complemento que configura una ruta personalizada y luego carga un archivo de plantilla para esa URL. Todo funciona bien, excepto que WordPress parece pensar que es un 404 aunque esté renderizando correctamente mi plantilla.

Por ejemplo, dice 404 en el título del documento y se agrega una clase error404 a <body>

La url personalizada es domain.com/path/:id donde :id es un valor dinámico correspondiente a una ID de publicación, por lo que la URL podría ser domain.com/path/275. En el siguiente ejemplo, some_id se utiliza como la variable de ID de publicación.

Aquí hay una versión reducida de mi complemento:

<?php

class MyPlugin {
  public function __construct() {
    add_action( 'init', array($this, 'add_response_endpoint') );
    add_filter( 'template_include', array($this, 'add_response_template') );
  }

  public function add_response_endpoint() {
    add_rewrite_rule(
      '^path/([0-9]+)/?',
      'index.php?pagename=my_custom_url&some_id=$matches[1]',
      'top'
    );

    add_rewrite_tag('%some_id%', '([^&]+)');
  }

  public function add_response_template($template) {
    if ( get_query_var( 'pagename' ) === 'my_custom_url' ) {
      $template = trailingslashit( dirname( __FILE__ ) ) . 'templates/custom-page-template.php';
    }

    return $template;
  }
}

new MyPlugin();

¿Me estoy perdiendo algo aquí? ¿O debería empezar a buscar este error en otra parte?

    
pregunta Ahrengot 01.06.2016 - 14:03

1 respuesta

1

La configuración manual de is_404 = false; solucionó mi problema. Sin embargo, no estoy seguro de que esta sea la mejor manera de hacerlo. Intenté usar el filtro pre_get_posts sin suerte.

De todos modos, para cualquier otra persona en el mismo barco, puede hacer esto para deshacerse del estado 404:

public function add_response_template($template) {
  global $wp_query;
  if ( 'my_custom_url' === get_query_var( 'pagename' ) ) {
    $wp_query->is_404 = false;
    $template = trailingslashit( dirname( __FILE__ ) ) . 'templates/custom-page-template.php';
  }

  return $template;
}

Y para actualizar el título del documento (las cosas dentro de <title> en la sección <head> ) aquí hay un fragmento de código para que funcione bien también.

add_filter( 'document_title_parts', function($title_arr) {
  if ( 'my_custom_url' === get_query_var('pagename') ) {
    $title_arr['title'] = "Document title for my custom route";
  }

  return $title_arr;
}, 10, 1 );

Si alguien sabe de una mejor manera, hágamelo saber.

    
respondido por el Ahrengot 01.03.2017 - 16:54

Lea otras preguntas en las etiquetas