Elementele din meniul de navigație dispar (dar nu imediat)

7 sept. 2012, 15:40:42
Vizualizări: 3.06K
Voturi: 1

Lucrez la un site unde unele elemente din meniul de navigație dispar (din front-end, back-end și din baza de date). Totuși, depanarea este extrem de dificilă deoarece acestea nu dispar imediat! Ca urmare, nu reușesc să identific ce anume declanșează ștergerea.

Mai multe informații:

  • Se pare că elementele din meniu de tipul 'custom' (de exemplu, linkuri către URL-uri arbitrare, în loc de postări/pagini/categorii etc.) ar putea fi sigure. Nu sunt încă 100% sigur de acest lucru.
  • La un moment dat, noile elemente adăugate în meniu nu erau salvate - adăugam mai multe elemente într-un meniu, dădeam click pe "Salvează Meniul", iar meniul era salvat fără niciun element.

Aveți sugestii pentru depanarea acestei probleme extrem de frustrante?

Este vorba de WordPress 3.4.1. Tocmai am actualizat la versiunea 3.4.2, dar nu pot verifica astăzi dacă problema persistă (deși nu am motive să cred că nu ar fi așa).

Edit: Am confirmat că elementele "custom" din meniu (linkuri către URL-uri arbitrare, spre deosebire de pagini/categorii WordPress etc.) nu sunt șterse.

7
Comentarii

Ai verificat Biletul #14134?

fuxia fuxia
7 sept. 2012 15:46:29

Din păcate nu este acea eroare - acest lucru se întâmplă doar cu câteva elemente de meniu.

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

se întâmplă cu javascript dezactivat?

ifdion ifdion
8 sept. 2012 01:36:41

@ifdion - ce legătură ar putea avea javascript cu ștergerea elementelor din baza de date?

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

greșeala mea, am crezut că dispar doar pe partea de front-end

ifdion ifdion
12 sept. 2012 22:24:42

Sunt șterse toate elementele de navigare non-custom? Sau doar anumite?

jessica jessica
14 sept. 2012 17:06:27

Ar putea fi php_value max_input_vars?

Brad Dalton Brad Dalton
18 nov. 2014 17:04:37
Arată celelalte 2 comentarii
Toate răspunsurile la întrebare 2
0

Înregistrează interogările

După cum spune întrebarea "nu se întâmplă întotdeauna", este greu de spus ce se întâmplă cu adevărat. Când nu poți vedea ce se întâmplă (interogare în fundal) și nu știi când se întâmplă, cel mai bine este să o înregistrezi.

Logger-ul

La activare, plugin-ul va încerca să creeze un director de log numit 'nav_log' în folderul temporar - va arunca și va afișa o eroare, dacă acest lucru nu funcționează.

Apoi va încerca să scrie într-un fișier numit 'nav_log.txt' în interiorul directorului temporar. Ar trebui să obții o intrare în log de fiecare dată când este declanșată o interogare pentru un nav_menu_item. Logurile vor fi prefixate cu data (Y-m-d g:i:s). Așadar, atâta timp cât ești atent și încerci să observi schimbările în interfața utilizator, ar trebui să poți determina când și cum se întâmplă. Am adăugat și variabila globală $hook_suffix pentru a (poate) ajuta la determinarea momentului în care se întâmplă acest lucru.

Declinarea responsabilității: Plugin-ul are nevoie de puțină îngrijire și nu va funcționa imediat. Lucrurile legate de sistemul de fișiere sunt complicate, iar plugin-ul este doar o schiță/o idee.

<?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;
        // Relativ la directorul Temp
        if ( ! wp_mkdir_p( $this->get_log_loc() ) )
            $output = new WP_Error( __CLASS__, 'Crearea directorului de log a eșuat.' );

        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 );
        // Adaugă interogarea curentă
        $contents .= "\n\n@".date( "Y-m-d g:i:s" );
        $contents .= "\n Interogare: ".implode( ' ', $pieces );
        $contents .= "\n Pagină: {$hook_suffix}";
        $wp_filesystem->put_contents(
             $file
            ,$contents
            ,FS_CHMOD_FILE
        );
        return $pieces;
    }
} // END Class wpse64487_query_logger

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

Ați dezactivat orice plugin pe care l-ați instalat?

Dacă ați încercat deja acest lucru și problema persistă, atunci nu pot recomanda o soluție simplă pentru această instalare. Dar ați încercat sau măcar luat în considerare să faceți o copie de siguranță a instalării actuale, să exportați conținutul într-un fișier XML și să reinstalați cu o bază de date curată și fără pluginuri activate inițial, doar cu tema dorită? Noua instalare ar trebui să aibă cod standard (necustomizat) în fișierele de bază. Înainte de a importa înapoi conținutul, încercați să configurați un meniu și verificați dacă problema persistă. Dacă da, puteți exclude o bază de date coruptă și cred că ar fi sigur să spunem că problema se află undeva în fișierele temei.

Nu uitați să notați valorile actuale ale opțiunilor de bază înainte de a le șterge cu o instalare curată.

12 sept. 2012 19:52:22
Comentarii

Am doar câteva plugin-uri instalate și toate sunt plugin-uri „sigure”. Totuși, am mult cod personalizat în directoarele temei și mu-plugins. Provocarea mea este să descopăr cum să depanez problema, având în vedere natura aleatoare/intermitentă a problemei.

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

Ok, dar nu aș exclude posibilitatea unei baze de date corupte. Nu sunt sigur cum s-ar putea întâmpla sau complet sigur cum ar putea afecta meniurile, dar setările tranziente din tabelul de opțiuni ar putea fi o posibilă cauză. Poate au fost modificate la un moment dat?

Ben Ben
13 sept. 2012 05:41:00

Deoarece acest lucru nu răspunde la întrebare... ar trebui să fie un comentariu, nu-i așa?

fuxia fuxia
16 sept. 2012 14:18:19