2014-09-11 2 views
2

(я извиняюсь за длинный пост, см вывод ниже)Wordpress Nav элементы страницы меню исчезающих случайным образом

У меня есть WP MultiSite настроить, с некоторыми сайтами в производственном режиме (с именами доменов), а некоторые до сих пор не «запущен». На данный момент работает пять сайтов.

Однако, у меня есть очень странная проблема: некоторые пункты меню навигации wp исчезают случайным образом. Остаются только элементы страницы - пользовательские ссылки, категории и т. Д. Все еще существуют. Страницы все еще там, они просто удалены из меню. Это происходит раз в неделю. Первые несколько раз я работал над сайтом, поэтому я подумал, что это я сделал что-то. Но в последнее время это произошло, например, в середине ночи в выходные дни, когда ни один из моих клиентов и меня даже не коснулись сайта.

Часто кажется, что какая-то цепная реакция - когда элементы меню исчезают на одном сайте, то иногда исчезает на другом, но не всегда - и не всегда в одно и то же время. Сегодня, например, меню исчезло на двух сайтах (http://wasabicms.se) и (http://womenswellness.se), поэтому я проверил другие, и они были в порядке. Затем, через несколько минут, он исчез на другом сайте.

Администратор сервера прошел журналы mysql, php и apache и не может найти ничего необычного. Утерянные пункты меню больше не находятся в wp_posts. К сожалению, мы не можем активировать журналы запросов mysql, поэтому мы не можем точно знать, как они удаляются.

Плагины, установленные и активированные являются:

  • Расширенный Пользовательские поля

  • Advanced Пользовательские поля: Параметры страницы

  • Advanced Пользовательские поля: Repeater поля

  • Blog Copier

  • Контактный формуляр 7

  • Jetpack

  • Новый пользователь утверждает

  • Перенаправление (один по городской Жираф)

  • Простые 301 редирект

  • Wordpress Импортер

  • Wordpress MU Domain Mapping

  • Wordpress SEO (по Йоаст)

  • WP Instagram Widget (по коду для народа)

Однако, я использую все из них, за исключением Новый пользователь одобряет и Wordpress MU Domain Mapping для других проектов без проблем.Я не могу отключить их, так как все сайты используют их, а некоторые находятся в режиме производства.


Заключение

пункты меню WP нав (только страницы) исчезают из меню на многоцентровых. Сами страницы все еще существуют, исчезают только ссылки навигационного меню. Это происходит случайным образом (~ один раз в неделю), даже если никто не работает над кодом или не входит в систему для администратора. Нет ошибок, зарегистрированных в php, mysql или apache.


Мне жаль длинный пост, но я действительно думаю, что его нужно объяснить подробно. Кто-нибудь признает эту проблему? Или можете указать мне в правильном направлении? Я чувствую, что все пробовал. Огромное спасибо заранее!

+0

Попробуйте найти необработанный HTML-код (Ctrl + U в firefox). Это исчезло и в сыром html ?! – Masoud

+0

Не в HTML, ни в WP Admin. Он полностью исчезает из базы данных!(Да, я проверил wp_posts) – johanplago

+0

Удостоверьтесь, что ни один из ваших плагинов не имеет уязвимостей; также убедитесь, что ваш WP обновлен. –

ответ

0

У меня это случилось со мной однажды с новой настраиваемой пользовательской темой, и проблема была связана с типичной/дубликатной сортировкой, когда я зарегистрировал пару меню в файле функций. Я создал меню и обнаружил, что меню исчезли без объяснений случайным образом в другое время, даже когда они не работали на веб-сайте. Как мысль, так как это может быть быстро попытаться, рассмотреть возможность изучения того же варианта и убедиться, что меню зарегистрированы правильно, а также полностью переименовать их.

0

Окончательно решил это!

У нас есть только несколько страниц, которые только зарегистрированные пользователи могут видеть. Это определено в postmeta/настраиваемом поле (сгенерированном ACF). В header.php мы имели if заявления вроде следующего, так что пользователи будут предложено войти вместо того, чтобы просто перед пустой страницей или так:

if (! is_user_logged_in() && get_field('show_page_logged_in_user')) { 

    // ... show login form 

    get_footer(); 
    exit; 
} 

Но, чтобы предотвратить появление страниц в результатах т.е. поиска и RSS каналы, мы также добавили этот код functions.php:

function pre_hide_if_not_logged_in($query) { 
    if (! is_user_logged_in()) { 
     $query->set('meta_query', 
     array(
      'relation' => 'OR', 
      array(
       'key'  => 'show_page_logged_in_user', 
       'value' => '%yes%', 
       'compare' => 'NOT LIKE' 
      ), 
      array(
       'key'  => 'show_page_logged_in_user', 
       'compare' => 'NOT EXISTS', 
      ) 
     )); 
    } 
} 

add_action('pre_get_posts', 'pre_hide_if_not_logged_in'); 

После нанесения SQL лесоруба, мы обнаружили, это применяется на хрон рабочих мест, а также Wordpress. Но, конечно, только тогда, когда задания cron запускались для пользователей без регистрации, что сделало его совершенно случайным и все же (почти) синхронным. Таким образом, мы удалили действие pre_hide_if_not_logged_in, и все, кажется, осталось на месте. Мы заменили его следующим. Это не так безопасно, но это не может помешать запросам db.

function hide_if_not_logged_in($content) { 
    if (get_field('show_page_logged_in_user') && ! is_user_logged_in()) { 
     return ''; 
    } 

    return $content; 
} 

add_filter('the_content', 'hide_if_not_logged_in'); 
add_filter('the_excerpt', 'hide_if_not_logged_in'); 

Я действительно надеюсь, что это может избавить кого-то от нескольких головных болей.

0

У меня было такое же поведение, что и меню, исчезающие во время задания cron из-за пользовательской функции, скрывающей сообщения, путем изменения запроса с использованием крюка 'pre_get_posts'. Я нашел более простой способ (по крайней мере, для моей установки), который должен проверить, является ли работает код в хронах перед изменением запроса:

function pre_hide_if_not_logged_in($query) { 
    if (defined('DOING_CRON')) { 
     // we're running the cron, so return the query untouched 
     return $query; 
    } 
    // now, since we're not running the cron, proceed to alter the query 
    if (! is_user_logged_in()) { 
     // alter query here 
     // ... 
    } 
} 
add_action('pre_get_posts', 'pre_hide_if_not_logged_in'); 

работает как шарм!

С моей точки зрения, это также сработает для вас.

Смежные вопросы