トピック投稿者
nsny
(@nsny)
先ほどの質問の追記です。
ギャラリー化する親ページではカスタムテンプレートを使用して、そのPHPファイルにその設定ができないかと思っております。
また子ページからは画像とタイトルも取得できればうれしいです。
上のコードのようにdiv等のHTMLソースをいじり易かったら最高です。
どうがお知恵をお貸しください。よろしくお願いいたします。
nsnyさん、こんにちは。
ソースや文章の中からタグなどの一定のパターンを抽出するときは、正規表現を用いるとやりやすいです。
<?php
$max_w = 100;
$max_h = 100;
if ( $post->post_parent == 0 ) {
$child_posts = get_posts( 'numberposts=-1&order=ASC&orderby=post_title&post_type=page&post_parent=' . $post->ID );
if ( $child_posts ) {
foreach ( $child_posts as $child ) {
$c_postname = $child->post_name ;
if ( preg_match( '/<img[^>]+?>/i', $child->post_content, $image ) ) {
preg_match( '/width="([\d]+)"/i', $image[0], $img_width );
preg_match( '/height="([\d]+)"/i', $image[0], $img_height );
$image[0] = preg_replace( '/class="([^"]*)(alignleft|alignright|aligncenter)([^"]*)"/i', 'class="$1alignnone$3"', $image[0] );
if ( $img_width[1] > $max_w || $img_height[1] > $max_h ) {
if ( $img_width[1] <= $max_w ) {
$img_width = '';
$img_height = ' height="' . $max_h . '"';
} elseif ( $img_height[1] <= $max_h ) {
$img_width = ' width="' . $max_w . '"';
$img_height = '';
} else {
if ( $img_width[1] * $max_h > $img_height[1] * $max_w ) {
$img_width = ' width="' . $max_w . '"';
$img_height = '';
} else {
$img_width = '';
$img_height = ' height="' . $max_h . '"';
}
}
$image[0] = preg_replace( '/ width="[\d]+"/i', $img_width, $image[0] );
$image[0] = preg_replace( '/ height="[\d]+"/i', $img_height, $image[0] );
}
?>
<div class="child_index">
<?php echo apply_filters( 'the_title', $child->post_title ); ?>
<?php echo $image[0]; ?>
</div>
<?php
}
}
}
}
?>
※ 最初の1つのみでよいので、画像タグの抽出にはpreg_matchを使っています。全てを取得する場合は、preg_match_allが利用できます。
※ 画像のサイズ取得も、タグの記述を元にしています。厳密性を重視するのであれば、getimagesizeを用いるべきすが。
※ 画像の配置指定はalignnoneになるように置換処理を行っています。
トピック投稿者
nsny
(@nsny)
jim912さん、素晴らしいコード本当にありがとうございます!
親ページのギャラリーは思った通りの表現ができました。
それでできればもうひとつ教えていただきたいのですが、出力した画像とタイトルにその各子ページのアンカーをつけたいのですがそれはどうすればよいのでしょうか?
本当にわがままですが御教授いただければ幸いです。
nsnyさん、こんにちは。
<a href="<?php echo get_permalink( $child->ID ); ?">
で子ページへのリンクになりますです。
トピック投稿者
nsny
(@nsny)
jim912さん、さっそくのお答えありがとうございます。
<a href="<?php echo get_permalink( $child->ID ); ?>">
で子ページへのパーマリンクが取得できました。
本当にありがとうございます。
jim912さんのおかげでまたひとつサイト完成まで近づけました。
こちらの件は解決いたしましたのでトピックはしめさせていただきますが、またわからないことがあったらお邪魔させていただこうと思いますので、その時はまたよろしくお願いいたします。
本当にありがとうございました。