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

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

Прежде всего, вы должны научиться отлаживать. Если вы получаете внутреннюю ошибку 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'); 

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