web-dev-qa-db-ja.com

ナビゲーションメニュー項目が消えている(ただしすぐには消えない)

私は(フロントエンド、バックエンド、そしてデータベースから)いくつかのナビゲーションメニュー項目が消えるサイトに取り組んでいます。しかし、デバッグはすぐには消えないので、デバッグは非常に困難です。その結果、何が削除の引き金になっているのか把握できません。

より詳しい情報:

  • まるで「カスタム」の種類のナビゲーションメニュー項目(投稿/ページ/カテゴリなどではなく、任意のURLなど)が安全である可能性があります。私はまだそれについて100%確信していません。
  • ある時点で、新しいナビゲーションメニュー項目が保存されていませんでした - メニューにいくつか追加し、[メニューを保存]をクリックすると、メニュー項目なしでメニューが保存されます。

この特にイライラする問題をデバッグする方法について何か提案はありますか?

これは3.4.1です。私は3.4.2にアップデートしたばかりですが、それがまだ起こっていることを今日確かめることはできません(それを信じない理由はありません)。

編集:私は "カスタム"ナビゲーションアイテム(任意のURLへのリンク、対WPページ/カテゴリ/ etc)が削除されないことを確認しました。

1

ログクエリ

「いつも起こるわけではない」と質問が言うように、実際に何が起こっているのかを見分けるのは難しいです。何が起こっているのか(バックグラウンドでの問い合わせ)がわからず、いつ起きたのかわからないときは、ログに記録するのが最善です。

ロガー

起動すると、プラグインはtempフォルダに'nav_log'という名前のログディレクトリを作成しようとします - これがうまくいかないときはエラーを投げて出力します。

その後、一時ディレクトリ内の'nav_log.txt'という名前のファイルに書き込もうとします。毎回ログエントリを取得する必要があります。nav_menu_itemに対するクエリがトリガされます。ログの先頭には日付(Y-m-d g:i:s)が付きます。だから、あなたが目を開いたままにしてUIの変化を捉えようとしている限り、いつそれが起こるのかを知ることができるはずです。私はまた、(おそらく)これがいつ起こるかを判断するのを助けるために$hook_suffixグローバルを追加しました。

免責事項:プラグインは愛を必要とし、そのままでは動作しません。ファイルシステムのものは複雑で、プラグインは単なるスケッチ/アイデアです。

<?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;
        // Relative to the Temp Dir
        if ( ! wp_mkdir_p( $this->get_log_loc() ) )
            $output = new WP_Error( __CLASS__, 'Log Dir creation failed.' );

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

} // endif;
1
kaiser

インストールした可能性のあるプラグインを無効にしましたか?

それを試してもまだ問題が解決しない場合は、このインストールで簡単な修正を行うことはお勧めできませんが、既存のインストールをバックアップし、コンテンツをxmlファイルにエクスポートして再インストールしてみたきれいなデータベースがあり、最初からプラグインが有効になっていない場合は、テーマが必要ですか?新規インストールでは、コアファイルに標準(カスタムではないコード)が含まれているはずです。コンテンツを再度インポートする前に、メニューを設定して、それでも問題が解決するかどうかを確認してください。もしそうなら、あなたは破損したデータベースを除外することができ、私はそれが問題があなたのテーマファイルのどこかにあると言っても安全だと思います。

クリーンインストールでそれらを一掃する前に、あなたの現在のコアオプションの値をメモすることを忘れないでください。

0
Ben