Elementi del menu di navigazione che scompaiono (ma non immediatamente)

7 set 2012, 15:40:42
Visualizzazioni: 3.06K
Voti: 1

Sto lavorando a un sito in cui alcuni elementi del menu di navigazione scompaiono (dal front-end, dal back-end e dal database). Tuttavia, il debug è estremamente difficile poiché non scompaiono immediatamente! Di conseguenza, non riesco a capire cosa attivi l'eliminazione.

Ulteriori informazioni:

  • Sembra che gli elementi del menu di tipo 'personalizzato' (ad esempio collegati a un URL arbitrario, piuttosto che a un articolo/pagina/categoria ecc.) potrebbero essere al sicuro. Non ne sono ancora al 100% sicuro.
  • Ad un certo punto, i nuovi elementi del menu non venivano salvati - aggiungevo diversi elementi a un menu, cliccavo su "Salva menu", e il menu veniva salvato senza elementi.

Qualche suggerimento su come eseguire il debug di questo problema particolarmente frustrante?

Questo succede sulla versione 3.4.1. Ho appena aggiornato alla 3.4.2, ma oggi non posso ancora verificare se il problema persiste (anche se non ho motivo di credere che non accadrà).

Modifica: Ho confermato che gli elementi del menu "personalizzati" (collegamenti a URL arbitrari, rispetto a una pagina/categoria/ecc. di WP) non vengono eliminati.

7
Commenti

Hai controllato Ticket #14134?

fuxia fuxia
7 set 2012 15:46:29

Sfortunatamente non è quel bug - questo accade solo con pochi elementi del menu.

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

succede con javascript disattivato?

ifdion ifdion
8 set 2012 01:36:41

@ifdion - cosa c'entrerebbe javascript con gli elementi cancellati dal database?

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

colpa mia, pensavo scomparissero solo dal front end

ifdion ifdion
12 set 2012 22:24:42

Vengono eliminati tutti gli elementi di navigazione non personalizzati? O solo alcuni?

jessica jessica
14 set 2012 17:06:27

Potrebbe essere php_value max_input_vars?

Brad Dalton Brad Dalton
18 nov 2014 17:04:37
Mostra i restanti 2 commenti
Tutte le risposte alla domanda 2
0

Registrare le query

Come dice la domanda "non succede sempre", è difficile capire cosa stia realmente accadendo. Quando non puoi vedere cosa succede (query in background) e non sai quando succede, allora è meglio registrarlo.

Il logger

All'attivazione, il plugin cercherà di creare una directory di log chiamata 'nav_log' nella cartella temporanea - genererà e stamperà un errore se questo non funziona.

Proverà poi a scrivere in un file chiamato 'nav_log.txt' all'interno della directory temporanea. Dovresti ottenere una voce di log ogni volta che viene attivata una query per un nav_menu_item. I log saranno preceduti dalla data (Y-m-d g:i:s). Quindi, se rimani vigile e cerchi di cogliere i cambiamenti nell'interfaccia utente, dovresti essere in grado di capire quando succede. Ho anche aggiunto la variabile globale $hook_suffix per (forse) aiutare a determinare quando ciò accade.

Disclaimer: Il plugin ha bisogno di qualche miglioramento e non funzionerà subito. La gestione del filesystem è complicata e il plugin è solo uno schizzo/un'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 alla directory Temp
        if ( ! wp_mkdir_p( $this->get_log_loc() ) )
            $output = new WP_Error( __CLASS__, 'Creazione directory Log fallita.' );

        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 );
        // Aggiungi la query corrente
        $contents .= "\n\n@".date( "Y-m-d g:i:s" );
        $contents .= "\n Query: ".implode( ' ', $pieces );
        $contents .= "\n Pagina: {$hook_suffix}";
        $wp_filesystem->put_contents(
             $file
            ,$contents
            ,FS_CHMOD_FILE
        );
        return $pieces;
    }
} // END Class wpse64487_query_logger

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

Hai disattivato eventuali plugin che potresti aver installato?

Se l'hai già fatto e il problema persiste, non posso consigliare una soluzione semplice con questa installazione. Ma hai provato, o almeno considerato, di eseguire un backup della tua installazione esistente, esportare il contenuto in un file XML e reinstallare con un database pulito e nessun plugin attivato inizialmente, usando solo il tema desiderato? La nuova installazione dovrebbe avere i file core standard (senza codice personalizzato). Prima di reimportare il tuo contenuto, prova a configurare un menu e verifica se il problema si ripresenta. Se succede, puoi escludere un database danneggiato e penso sia sicuro affermare che il problema risieda da qualche parte nei file del tuo tema.

Ricorda solo di annotare i valori attuali delle opzioni core prima di cancellarli con una nuova installazione pulita.

12 set 2012 19:52:22
Commenti

Ho solo alcuni plugin installati e sono tutti plugin "sicuri". Tuttavia, ho molto codice personalizzato nelle directory del tema e mu-plugins. La mia sfida è capire come debuggare il problema, data la natura casuale/intermittente del problema.

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

Ok ma non escluderei la possibilità di un database corrotto. Non sono sicuro di come potrebbe accadere o completamente sicuro di come potrebbe influenzare i menu, ma le impostazioni transient nella tabella options potrebbero essere una possibile causa. Forse sono state modificate ad un certo punto?

Ben Ben
13 set 2012 05:41:00

Poiché questo non risponde alla domanda... dovrebbe essere un commento, giusto?

fuxia fuxia
16 set 2012 14:18:19