Elementos del menú de navegación desaparecen (pero no inmediatamente)

7 sept 2012, 15:40:42
Vistas: 3.06K
Votos: 1

Estoy trabajando en un sitio donde algunos elementos del menú de navegación desaparecen (del frontend, el backend y la base de datos). Sin embargo, depurar es extremadamente difícil ya que no desaparecen inmediatamente. Como resultado, no puedo descubrir qué está provocando la eliminación.

Más información:

  • Parece que los elementos del menú de tipo 'personalizado' (por ejemplo, enlaces a URLs arbitrarias en lugar de a entradas/páginas/categorías) podrían estar a salvo. No estoy 100% seguro de esto todavía.
  • En un momento dado, los nuevos elementos del menú no se guardaban - añadía varios a un menú, hacía clic en "Guardar menú", y el menú se guardaba sin elementos.

¿Alguna sugerencia sobre cómo depurar este problema particularmente frustrante?

Esto ocurre en la versión 3.4.1. Acabo de actualizar a 3.4.2, pero todavía no puedo verificar hoy si sigue ocurriendo (aunque no tengo motivos para pensar que no).

Edición: He confirmado que los elementos "personalizados" del menú (enlaces a URLs arbitrarias, vs. una página/categoría de WP) no se eliminan.

7
Comentarios

¿Revisaste Ticket #14134?

fuxia fuxia
7 sept 2012 15:46:29

Desafortunadamente no es ese error - esto ocurre con solo algunos elementos del menú.

Travis Northcutt Travis Northcutt
7 sept 2012 16:08:53

¿ocurre con javascript desactivado?

ifdion ifdion
8 sept 2012 01:36:41

@ifdion - ¿qué tendría que ver javascript con los elementos que se eliminan de la base de datos?

Travis Northcutt Travis Northcutt
12 sept 2012 18:56:52

error mío, pensé que solo desaparecía del front end

ifdion ifdion
12 sept 2012 22:24:42

¿Se eliminan todos los elementos de navegación no personalizados? ¿O solo ciertos?

jessica jessica
14 sept 2012 17:06:27

¿Podría ser php_value max_input_vars?

Brad Dalton Brad Dalton
18 nov 2014 17:04:37
Mostrar los 2 comentarios restantes
Todas las respuestas a la pregunta 2
0

Registrar consultas

Como dice la pregunta "no ocurre siempre", es difícil saber qué está pasando realmente. Cuando no puedes ver lo que sucede (consulta en segundo plano) y no sabes cuándo ocurre, lo mejor es registrarlo.

El registrador

Al activarse, el plugin intentará crear un directorio de registro llamado 'nav_log' en la carpeta temporal - mostrará e imprimirá un error si esto no funciona.

Luego intentará escribir en un archivo llamado 'nav_log.txt' dentro del directorio temporal. Deberías obtener una entrada de registro cada vez que se active una consulta para un nav_menu_item. Los registros tendrán como prefijo la fecha (Y-m-d g:i:s). Así que, si mantienes los ojos abiertos e intentas detectar cambios en la interfaz, deberías poder saber cuándo ocurre. También agregué la variable global $hook_suffix para (quizás) ayudar a determinar cuándo sucede esto.

Descargo de responsabilidad: El plugin necesita un poco de cariño y no funcionará inmediatamente. El manejo del sistema de archivos es complicado y el plugin es solo un boceto/una idea.

<?php
! defined( 'ABSPATH' ) AND exit;
/** Plugin Name: (#64487) »kaiser« log nav menu query */
# Version: 2012-09-17.0924

if ( ! class_exists( 'wpse64487_query_logger' ) )
{
    register_activation_hook( __FILE__, array( 'wpse64487_query_logger', 'create_log_dir' ) );
    add_action( 'plugins_loaded', array( 'wpse64487_query_logger', 'init' ), 5 );

class wpse64487_query_logger
{
    public static $instance;
    public $name = 'nav_log';

    public static function init()
    {
        null === self :: $instance AND self :: $instance = new self;
        return self :: $instance;
    }

    public function __construct()
    {
        add_filter( 'posts_where', array( $this, 'ask_where' ) );
    }

    public function create_log_dir()
    {
        $output = true;
        // Relativo al directorio temporal
        if ( ! wp_mkdir_p( $this->get_log_loc() ) )
            $output = new WP_Error( __CLASS__, 'Falló la creación del directorio de registro.' );

        is_wp_error( $output ) AND print $output->get_error_message( __CLASS__ );
    }

    public function get_log_loc( $full = false )
    {
        $output = trailingslashit( get_temp_dir()."{$this->name}" );
        $full AND $output .= "{$this->name}.txt";
        return $output;
    }

    public function ask_where( $where )
    {
        if ( "`post_type` = 'nav_menu_item'" === $where )
        {
            add_filter( 'posts_clauses', array( $this, 'catch_query' ) );
        }
        return $where;
    }

    public function catch_query( $pieces )
    {
        global $wp_filesystem, $hook_suffix;
        $file = $this->get_log_loc( true );
        $contents  = $wp_filesystem->get_contents( $file );
        // Añadir consulta actual
        $contents .= "\n\n@".date( "Y-m-d g:i:s" );
        $contents .= "\n Consulta: ".implode( ' ', $pieces );
        $contents .= "\n Página: {$hook_suffix}";
        $wp_filesystem->put_contents(
             $file
            ,$contents
            ,FS_CHMOD_FILE
        );
        return $pieces;
    }
} // FIN Clase wpse64487_query_logger

} // endif;
17 sept 2012 08:29:04
3

¿Has desactivado algún plugin que hayas instalado?

Si ya has intentado eso y sigue ocurriendo, no puedo recomendar una solución simple con esta instalación, pero ¿has probado o considerado hacer una copia de seguridad de tu instalación actual, exportar tu contenido a un archivo xml y reinstalar con una base de datos limpia y sin plugins activados inicialmente, solo con tu tema deseado? La nueva instalación debería tener código estándar (no personalizado) en los archivos principales. Antes de importar tu contenido nuevamente, intenta configurar un menú y ver si el problema persiste. Si es así, puedes descartar una base de datos corrupta y sería seguro decir que el problema está en algún lugar de los archivos de tu tema.

Recuerda anotar los valores actuales de las opciones principales antes de borrarlos con una instalación limpia.

12 sept 2012 19:52:22
Comentarios

Solo tengo unos pocos plugins instalados, y todos son plugins "seguros". Sin embargo, tengo mucho código personalizado en mis directorios de temas y mu-plugins. Mi desafío es averiguar cómo depurar el problema, dada la naturaleza aleatoria/intermitente del problema.

Travis Northcutt Travis Northcutt
12 sept 2012 21:11:55

Ok, pero no descartaría la posibilidad de una base de datos corrupta. No estoy seguro de cómo podría suceder o completamente seguro de cómo podría afectar los menús, pero los ajustes transitorios en la tabla de opciones podrían ser una posible causa. ¿Quizás se modificaron en algún momento?

Ben Ben
13 sept 2012 05:41:00

Como esto no responde a la pregunta... debería ser un comentario, ¿verdad?

fuxia fuxia
16 sept 2012 14:18:19