Intereting Posts
Заказ определенного типа сообщения удаление @ в emailaddress при отправке ссылки на рассылку в URL-адресе Как сделать следующий цикл прерывания / остановки, когда он достигает 2 сообщений (пользовательские типы сообщений, называемые темами)? Неустранимая ошибка: Непринятая ошибка: вызов неопределенной функции get_userdata () Производительность wp_get_attachment_image_srcset () и wp_get_attachment_image_url () сделать следующую и предыдущую кнопку с настраиваемым полем в WP? Разрешить HTML в поле ввода API-интерфейса настроек Захват действия wp_trash_post с пользовательским типом сообщения обратный вызов действия, для действия, отправленного, как сообщается с помощью сниффера хука, не вызываемого Обновление терминов в WordPress Столбец с датой метаданных добавить дней для подтверждения «Автоматическое обновление WordPress не завершилось – повторите попытку обновления сейчас» – Но нет файла поддержки. Добавление метаданных в пользовательские термины таксономии Развертывание обновленных или новых плагинов, которые изменяют таблицу wp_options Принудительное использование RSS 0.92 feed

Анонимная функция выполняется дважды в wp_head при добавлении из фильтра the_posts?

Я знаю, что это звучит сложно, так что несите меня.

Я пытаюсь добавить определенные пользовательские стили CSS, основанные на коротких кодах (если есть) в текущей почте / странице.

function load_shortcode_styles($posts){ //function to check short codes here //regex to get id from shortcode(eg [item id=""] ) //get custom post meta from the id that has my custom css add_action('wp_head', create_function('', 'echo "\n<!-- my style -->\n<style>' . $custom_css . '</style>\n";') ); } add_filter('the_posts', 'load_shortcode_styles' ); 

После того, как я открываю свои почтовые страницы, источник показывает, что мой стиль печатается дважды:

 <!-- my style --> <style> </style> <!-- my style --> <style> </style> 

Для целей тестирования я использовал жестко запрограммированную функцию для эха определенной строки, и она отлично работает.

например:

 function test_print(){ echo "\n<!-- my style -->\n<style>foo bar</style>\n"; } 

и замените выше крючок действия с этим

 add_action('wp_head', 'test_print' ); 

Так или иначе, это напечатает, что является правильным!

 <!-- my style --> <style> foo bar </style> 

Кто-нибудь знает об этой проблеме? Как я могу это решить?

Solutions Collecting From Web of "Анонимная функция выполняется дважды в wp_head при добавлении из фильтра the_posts?"

Я могу только предположить, что на странице есть либо несколько запросов, либо экземпляры этого сообщения, но в любом случае он выдает недостаток в логике, что вы не проверяете, был ли стиль уже добавлен. Обычно можно использовать wp_enqueue_script, который бы разобрал это, но по какой-то причине вы, возможно, не сможете этого сделать.

Поэтому вместо этого вам нужно сначала выполнить эту проверку. Я бы рекомендовал следующее:

глобальный $ we_found_shortcode; $ we_found_shortcode = false;

 function load_shortcode_styles($posts){ //function to check short codes here // if found $we_found_shortcode = true; } function header_check(){ global $we_found_shortcode; if($we_found_shortcode == true){ //regex to get id from shortcode(eg [item id=""] ) //get custom post meta from the id that has my custom css echo "\n<!-- my style -->\n<style>' . $custom_css . '</style>\n"; } } add_filter('the_posts', 'load_shortcode_styles' ); add_filter('wp_head', 'header_check' );