Функция галереи Wordpress ничего не возвращает, а echo - PullRequest
0 голосов
/ 12 января 2020

Пользовательская функция my_post_gallery для хука post_gallery не возвращает изображения, когда количество изображений в одном сообщении находится где-то около 60. Более точно это не может быть указано, потому что это варьируется от случая к случаю. Это само по себе странно.

echo возвращает изображения в любом случае.

Кажется, что вспомогательные функции работают правильно.

Я подозреваю, что php .ini или apache проблема?

function my_post_gallery($output, $attr) {
	global $post;
	
	if (isset($attr['orderby'])) {
		$attr['orderby'] = sanitize_sql_orderby($attr['orderby']);
		if (!$attr['orderby'])
			unset($attr['orderby']);
	}

	extract(shortcode_atts(array(
		'order' => 'ASC',
		'orderby' => 'menu_order ID',
		'id' => $post->ID,
		'itemtag' => 'dl',
		'icontag' => 'dt',
		'captiontag' => 'dd',
		'columns' => '3',
		'size' => 'thumbnail',
		'include' => '',
		'exclude' => ''
	), $attr));
	
	$id = intval($id);
	if ('RAND' == $order) $orderby = 'none';
	
	if (!empty($include)) {
		$include = preg_replace('/[^0-9,]+/', '', $include);
		$_attachments = get_posts(array('include' => $include, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby));
		
		$attachments = array();
		foreach ($_attachments as $key => $val) {
			$attachments[$val->ID] = $_attachments[$key];
		}
	}
	
	
	if (empty($attachments)) return '';
	
	$output = "<div class=\"wrapper-gallery\">\n";
	
	foreach ($attachments as $id => $attachment) {
		$img = wp_prepare_attachment_for_js($id);
		if ($columns == '3') { $url = $img['sizes']['medium']['url']; };
		if ($columns == '2') { $url = $img['sizes']['large']['url']; };
		if ($columns == '1') { $url = $img['sizes']['large']['url']; };
		$alt = $img['title'];
		$posturl = urlencode(get_permalink());
		ob_start();
		the_subtitle();
		$subtitle = ob_get_clean();
		$pinalt = get_the_title() . ' - ' . $subtitle;
		
		$altreplace = '$2';
		$altneu = $url;
		$altneu = preg_replace("/(.*)\/(.+)(-(.*)x(.*))\.jpg/",$altreplace, $altneu);
		
		if ($altneu == $alt){
			$alt = $pinalt;
		}
		
		$newimageclass = "";
		if ($columns == '3') {
			if ($i <= 2) {
				$newimageclass = "firstrowimage lazyload"; 
			} else {
				$newimageclass = "lazyload";
			}
			$tmp = '<img src="'. $url .'" alt="'. $alt .'" class="'. $newimageclass .'"/>';
			$srcset = wr2x_picture_rewrite($tmp);	
			$addsrc = add_attributes($srcset, $url);
			$script = add_data_srcset($addsrc);
			$items .= $script;
			$columnscount = "threecolumns";
		} else if ($columns == '2') {
			if ($i <= 1) {
				$newimageclass = "firstrowimage lazyload"; 
			} else {
				$newimageclass = "lazyload";
			}
			$tmp = '<img src="'. $url .'" alt="'. $alt .'" class="'. $newimageclass .'"/>';
			$srcset = wr2x_picture_rewrite($tmp);	
			$addsrc = add_attributes($srcset, $url);
			$script = add_data_srcset($addsrc);
			$items .= $script;
			$columnscount = "twocolumns";
		} else {
			// 1 column
			if ($i == 0) {
				$newimageclass = "firstrowimage lazyload"; 
			} else {
				$newimageclass = "lazyload";
			}
			$tmp = '<img src="'. $url .'" alt="'. $alt .'" class="'. $newimageclass .'"/>';
			$srcset = wr2x_picture_rewrite($tmp);	
			$addsrc = add_attributes($srcset, $url);
			$script = add_data_srcset($addsrc);
			$items .= $script;
			$columnscount = "onecolumn";
		}
		$i++;
	}
	$output .= "<div class=\"{$columnscount}\">{$items}</div></div>\n";
	
  echo $output; //WORKS IN ANY CASE
  return $output; //WORKS UP TO ~60 ITEMS
}
add_filter('post_gallery', 'my_post_gallery', 10, 2);

Вспомогательные функции:

function add_data_srcset ($input) {
	$match = '/(srcset)/';
	$replace = 'data-$1';
	$output = preg_replace($match, $replace, $input);
	return $output;
}
function add_attributes($srcset, $url){
	$match = '/(<img)/';
	$replace = '$1 src=data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== ';
	$output = preg_replace($match, $replace, $srcset);
	return $output;
}

1 Ответ

0 голосов
/ 12 января 2020

Что вы пытаетесь сделать? Вы хотите отобразить свою галерею на странице?

Я думаю, вам не нужно использовать ловушку для этого.

Вы можете использовать add_action для вызова функции в шаблоне, чтобы отображать изображения. Просто вызовите ваш шаблон, если вы используете возврат в своей функции.

add_action('display_post_gallery', 'my_post_gallery', 10, 2);

Или вы можете использовать шорткод для отображения вашей галереи в построителе страниц или в редакторе classi c. Просто позвоните [display_post_gallery] куда угодно.

add_shortcode('display_post_gallery', 'my_post_gallery');

Следующее, почему вы хотите использовать возврат? Вы создаете html в своем выводе $, поэтому, если вы хотите отобразить галерею, работает только 'echo'. Возврат будет работать, если вы отобразите вывод $ в своем шаблоне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...