Soporte » Guías – Resolución de problemas » Undefined array key «category_name»

  • En WP la página de una categoría ( https://dominio.com/categoria1/ ) muestra un listado con las entradas que están bajo esa categoría.
    En algunos casos, podemos querer tener una página «real» con contenido específico creado bajo el nombre de esa categoría. Esto no va a ser posible por el propio WP.

    Chapuceando un poco y tomando código prestado, se puede conseguir añadiendo lo siguiente al functions.php

    add_filter('request', function(array $query_vars) {
      if(strlen($query_vars['category_name']) + 2 == strlen($_SERVER['REQUEST_URI'])) {
            // do nothing in wp-admin
            if(is_admin()) {
                return $query_vars;
            }
            // if the query is for a category
            if(isset($query_vars['category_name'])) {
                // save the slug
                $pagename = $query_vars['category_name'];
                // completely replace the query with a page query
                $query_vars = array('pagename' => "$pagename");
          return $query_vars;
        }
       }
      return $query_vars;
    });

    El caso es que con las últimas actualizaciones me da un warning:
    Undefined array key «category_name»

    Y no se como solucionarlo, ¿alguna ayuda’
    Gracias y saludos.

Viendo 3 respuestas - de la 1 a la 3 (de un total de 3)
  • kallookoo

    (@kallookoo)

    Hola @hole19

    Es posible crear una pagina personalizada para mostrar varias categorias, simplemente deberias editar que template se usaria y modificar la WP_Query para incluir las categorias.

    Sobre ese codigo, basicamente no compruebas que exista y por lo tanto falla, siempre pero siempre se tiene que comprobar que algo existe antes de consultarlo para evitar fallos.

    
    if ( 
        isset( $query_vars['category_name'], $_SERVER['REQUEST_URI'] ) &&
        ( strlen( $query_vars['category_name'] ) + 2 ) === strlen( $_SERVER['REQUEST_URI'] ) ) {
     /** TU CODIGO */
    }
    

    En el codigo que añado incluyo el REQUEST_URI, que aunque es practicamente imposible que no exista no esta de mas añadirlo por seguridad.

    Como deduzco que no sabes programar, te sugiero que contrates un profesional ya que hacer los copy&paste de codigos que encuentras por internet sin saber lo que hace no es buena idea, tanto por seguridad como de posibles fallos como en el codigo que añades.
    Esta claro que ayudan o pueden hacer lo que se desea pero se tienen que usar con cuidado o para usarlo como orientacion para crear tu codigo.

    Iniciador del debate hole19

    (@hole19)

    Muchas gracias.
    Por ahora funciona sin warnings.
    La idea es solo que cuando se llame a una página que tiene el mismo nombre de la categoría salga siempre la página, no la habitual página resumen de categoría con todos los posts.

    Hola @hole19

    Veamos ese codigo esta mas o menos bien ya que no comprueba si esa pagina existe ni la categoria, por lo que podrias tener un 404 o (aunque lo dudo) se mostrase el archivo de la categoria.

    Ahora bien, porque quieres usar una pagina?
    Se puede crear una plantilla por cada categoria. Tienes mas info aqui; https://developer.wordpress.org/themes/basics/template-hierarchy/#category
    Si quieres que las categorias no tengan en la url el slug de la taxonomia existen plugins que lo eliminan y los plugins de SEO diria que todos tienen esa opcion para las categorias y etiquetas.

    Si aun asi quieres seguir usando paginas, entonces creo que lo que haria seria redirijir las urls de las categorias (existentes) a la pagina (existente) asi nunca se mostrarian la pagina de archivo de las categorias, tambien seria mejor para el SEO y controlas que categorias tiene o no su pagina correspondiente.

Viendo 3 respuestas - de la 1 a la 3 (de un total de 3)
  • Debes estar registrado para responder a este debate.