Elementele din meniul de navigație dispar (dar nu imediat)
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.

Î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;

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ă.

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.

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?
