Intereting Posts
Как добавить мета-ящики в «неизвестные» пользовательские сообщения? Как можно указать несколько URL-адресов, указывающих на установку одного WordPress? Форма комментариев WP (пользовательская) отображает дополнительное поле комментариев Расширенный или не очень продвинутый запрос pre_get_posts Глобальная переменная $ post возвращает неверный объект Настройте, как выглядит тема WordPress в разделе «Выбор темы» Показать все подкатегории? Таксономия / пользовательское предложение типа типа публикации на сайте фильма Показать add_meta_box, выбрав определенную категорию Отключить запросы на api.wordpress.org Не удалось сохранить или обновить постмету для пользовательского типа сообщения посредством действия с помощью save_post hook Сервер подчеркнул / фид Извлеките последнее опубликованное сообщение в wordpress (3.3) Как я могу автоматически добавлять отдельные страницы CPT в качестве элементов подменю PHP include работает только в определенных местах в моей пользовательской теме WP

WordPress Применить фильтр в плагине вызывает 500 внутренних ошибок

Я использую плагин https://wordpress.org/plugins/show-post-in-lightbox/ для отображения всех фейерверных изображений каждого сообщения на странице. когда появится одно из этих изображений, которое будет показано на лайтбокс, будет отображаться содержимое сообщения.

Все это прекрасно работает, но исходный код, отображающий контент, использует:

if($_REQUEST['popup']!=''){ $postObj = get_post( $_REQUEST['pid'] ); echo $postObj->post_content; exit; } 

Это отлично работает, кроме того, что его не очень нужно, потому что wordpress can not форматирует html. также wordpress не распознает короткие коды. Поэтому я решил случайно сценарий убедиться, что он работает хорошо, и я могу использовать короткие коды:

 if( $_REQUEST['popup']!='' ) { $postObj = $_POST['pid']; $content_post = get_post($postObj); $content = $content_post->post_content; $content = apply_filters('the_content', $content); $content = str_replace(']]>', ']]>', $content); echo $content; exit; } 

Но это дает мне ошибку: ошибка при загрузке лайтбокса при открытии лайтбокса. Когда я удаляю строку APPLT_FILTERS, это не ошибка (но поскольку мне нужна эта строка, она не делает ничего подобного)

Но я думаю, что

 $content = apply_filters('the_content', $content); 

это тот, который лайтбокс падает. Этот код находится внутри файлов плагинов. Кто-нибудь знает, почему генерируется вышеуказанный код и 500 аварий?

Надеюсь, кто-то может мне помочь!

весь код:

 if($_REQUEST['popup']!=''){ $postObj = $_POST['pid']; $content_post = get_post($$postObj); $content = $content_post->post_content; $content = apply_filters('the_content', $content); $content = str_replace(']]>', ']]&gt;', $content); echo $content; } class spbc_showPostsWidget extends WP_Widget{ function spbc_showPostsWidget() { $options = array('description' => 'Show posts from selected categories.'); parent::WP_Widget(false, $name = 'Show Posts By Category', $options); } /*-----------------------------------------------------------*/ function widget($args, $instance) { extract($args, EXTR_SKIP); $ost_title = empty($instance['ost_title']) ? ' ' : apply_filters('widget_title', $instance['ost_title']); $ost_limit = (is_numeric($instance['ost_limit'])) ? $instance['ost_limit'] : 5; $ost_orderby = ($instance['ost_orderby']) ? $instance['ost_orderby'] : 'date'; $ost_order = ($instance['ost_order']) ? $instance['ost_order'] : 'desc'; $ost_exclude = ($instance['ost_exclude'] != '') ? $instance['ost_exclude'] : 0; $ost_excludeposts = ($instance['ost_excludeposts'] != '') ? $instance['ost_excludeposts'] : 0; $ost_category_id = $instance['ost_categoryid']; $ost_showdate = ($instance['ost_show_date'] == 'on') ? 'yes' : 'no'; $ost_thumbnail = ($instance['ost_thumbnail'] == 'on') ? 'yes' : 'no'; $ost_thumbnail_size = ($instance['ost_thumbnail_size']) ? $instance['ost_thumbnail_size'] : 'thumbnail'; echo $before_widget; $this->spbc_showWidget($instance); echo $after_widget; } /*-----------------------------------------------------------*/ public static function get_UrlFromText($content,$url='Y'){ if($url=='Y'){ $imgpattern = '/src=[\'"]?([^\'" >]+)[\'" >]/'; preg_match($imgpattern, $content, $article_image); }else{ preg_match_all('/<img[^>]+>/i',$content, $article_image); } return $article_image; } /*-----------------------------------------------------------*/ function spbc_showWidget($instance){ global $post; $query = array( 'posts_per_page' => $instance['ost_limit'], 'cat' => $instance['ost_categoryid'], 'orderby' => $instance['ost_orderby'], 'order' => $instance['ost_order'], 'category__not_in' => array($instance['ost_exclude']), 'post__not_in' => array($instance['ost_excludeposts']) ); $wp_query = new WP_Query($query); if ($wp_query->have_posts()): echo ' <div class="list-posts-by-category"> <ul>'; while ($wp_query->have_posts()): $wp_query->the_post(); $image_id = get_post_thumbnail_id(); if(!empty($instance['ost_thumbnail'])){ if ( in_array($instance['ost_thumbnail_size'],array('thumbnail', 'medium', 'large', 'full'))) { $ost_thumb_size = $instance['ost_thumbnail_size']; }elseif ($instance['ost_thumbnail_size']){ $ost_thumb_size = array($instance['ost_thumbnail_size']); }else { $ost_thumb_size = 'thumbnail'; } $ost_thumbnail = get_the_post_thumbnail($post->ID, $ost_thumb_size); }else{ $ost_thumbnail = ""; } ?> <li> <a class="ostlightbox" href="<?php echo get_site_url().'/index.php?pid='.$post->ID.'&popup=Y'; ?>" title="<?php echo the_title_attribute(); ?>"> <?php echo '<div class="ostoverlay"></div>'; ?> <?php echo '<div class="titleconthidden"><p class="osttitle">'.$post->post_title.'</p></div>'; ?> <?php echo '<div class="titlecont"></div>'; ?> <?php echo $ost_thumbnail; ?> </a> <?php if(!empty($instance['ost_show_date'])){ ?><span><?php echo get_the_time('F jS, Y'); ?></span><?php } ?> </li><?php endwhile; echo ' </ul> </div>'; endif; } 

Прежде всего, вы должны научиться отлаживать. Если вы получаете внутреннюю ошибку 500, ошибка должна появиться в ваших журналах ошибок.

Я внесла следующие исправления в ваш код ниже:

НИКОГДА НЕ ИСПОЛЬЗУЙТЕ extract () вместо этого, получая значения, используя их различные ключи из массива.

У вашего класса не было закрывающей скобки

Вы должны использовать буферизацию вывода PHP, таким образом вы получаете весь вывод из spbc_showWidget () и затем можете эхом отбирать ее в своей функции виджетов

 if($_REQUEST['popup']!=''){ $postObj = $_POST['pid']; $content_post = get_post($postObj); $content = $content_post->post_content; $content = apply_filters('the_content', $content); $content = str_replace(']]>', ']]&gt;', $content); echo $content; } class spbc_showPostsWidget extends WP_Widget { function spbc_showPostsWidget() { $options = array('description' => 'Show posts from selected categories.'); parent::WP_Widget(false, $name = 'Show Posts By Category', $options); } /*-----------------------------------------------------------*/ function widget($args, $instance) { extract($args, EXTR_SKIP); // NEVER USE EXTRACT $ost_title = empty($instance['ost_title']) ? ' ' : apply_filters('widget_title', $instance['ost_title']); $ost_limit = (is_numeric($instance['ost_limit'])) ? $instance['ost_limit'] : 5; $ost_orderby = ($instance['ost_orderby']) ? $instance['ost_orderby'] : 'date'; $ost_order = ($instance['ost_order']) ? $instance['ost_order'] : 'desc'; $ost_exclude = ($instance['ost_exclude'] != '') ? $instance['ost_exclude'] : 0; $ost_excludeposts = ($instance['ost_excludeposts'] != '') ? $instance['ost_excludeposts'] : 0; $ost_category_id = $instance['ost_categoryid']; $ost_showdate = ($instance['ost_show_date'] == 'on') ? 'yes' : 'no'; $ost_thumbnail = ($instance['ost_thumbnail'] == 'on') ? 'yes' : 'no'; $ost_thumbnail_size = ($instance['ost_thumbnail_size']) ? $instance['ost_thumbnail_size'] : 'thumbnail'; echo $args['before_widget']; echo $this->spbc_showWidget($instance); echo $args['after_widget']; } /*-----------------------------------------------------------*/ public static function get_UrlFromText($content, $url = 'Y') { if ($url == 'Y') { $imgpattern = '/src=[\'"]?([^\'" >]+)[\'" >]/'; preg_match($imgpattern, $content, $article_image); } else { preg_match_all('/<img[^>]+>/i', $content, $article_image); } return $article_image; } /*-----------------------------------------------------------*/ function spbc_showWidget($instance) { global $post; $query = array( 'posts_per_page' => $instance['ost_limit'], 'cat' => $instance['ost_categoryid'], 'orderby' => $instance['ost_orderby'], 'order' => $instance['ost_order'], 'category__not_in' => array($instance['ost_exclude']), 'post__not_in' => array($instance['ost_excludeposts']) ); $wp_query = new WP_Query($query); if ($wp_query->have_posts()): ob_start() ?> <div class="list-posts-by-category"> <ul> <?php while ($wp_query->have_posts()): $wp_query->the_post(); $image_id = get_post_thumbnail_id(); if (!empty($instance['ost_thumbnail'])) { if (in_array($instance['ost_thumbnail_size'], array('thumbnail', 'medium', 'large', 'full'))) { $ost_thumb_size = $instance['ost_thumbnail_size']; } elseif ($instance['ost_thumbnail_size']) { $ost_thumb_size = array($instance['ost_thumbnail_size']); } else { $ost_thumb_size = 'thumbnail'; } $ost_thumbnail = get_the_post_thumbnail($post->ID, $ost_thumb_size); } else { $ost_thumbnail = ""; } ?> <li> <a class="ostlightbox" href="<?php echo get_site_url() . '/index.php?pid=' . $post->ID . '&popup=Y'; ?>" title="<?php echo the_title_attribute(); ?>"> <?php echo '<div class="ostoverlay"></div>'; ?> <?php echo '<div class="titleconthidden"><p class="osttitle">' . $post->post_title . '</p></div>'; ?> <?php echo '<div class="titlecont"></div>'; ?> <?php echo $ost_thumbnail; ?> </a> <?php if (!empty($instance['ost_show_date'])) { ?> <span><?php echo get_the_time('F jS, Y'); ?></span><?php } ?> </li><?php endwhile; ?> </ul> </div>; <?php endif; return ob_get_clean(); } } 

Я думаю, что одна из проблем заключается в том, что вы повторяете результаты короткого кода, а не «возвращаете» его.

Если PHP не показывает распознавание короткого кода, вы должны использовать выходной буфер. См. Пример

 function my_shortcode(){ ob_start(); //codes here; $something = ob_get_clean(); return $something; } add_shortcode('shortcode','my_shortcode'); 

Всегда безопаснее обновлять плагин, чем изменять коды плагина по очевидным причинам.