私の投稿タイプに添付されているすべての画像を表示するこのコードがあります。それらをページ付けする方法はありますか?私は25枚の写真が好きで、できる限りスクロールを避けたくありません。
コード:
<div class="galleries ten columns">
<?php
$attachments = get_posts( array(
'post_type' => 'attachment',
'post_mime_type'=>'image',
'posts_per_page' => -1,
'post_status' => 'any',
'post_parent' => $post->ID)
);
if ( $attachments ) {
foreach ( $attachments as $attachment ) {
$src = wp_get_attachment_image_src( $attachment->ID, full);
$html = '<a class="fancybox" href="'.$src[0].'">';
$html .= wp_get_attachment_image( $attachment->ID, 'gallery-thumb') .'</a>';
echo $html;
}
}
?>
</div>
ありがとうございます。
私はあなたがこのようなものが欲しいと思う:
|---------------------|
| content |
| (static) |
|---------------------|
| gallery |
| (paged) |
|---------------------|
| << pagelinks >> |
|---------------------|
この設定では、ギャラリーがページングされている間、あなたの投稿コンテンツは同じままで、静的に見えます。つまり、タイトル、コンテンツなどを表示するメインのクエリと、ギャラリーの画像を表示する役割を担う2番目のクエリがあります。このページのページリンクは2次ループに接続されており、そこでページングを行います。これを実現するには、get_posts()
の代わりに WP_Query
を使用することをお勧めします。後者の解決策を念頭に置いていないだけでなく、それが一般的により良いアプローチであると考えるためです。最初のステップでは、ページネーションに使用される新しいクエリ変数を設定する必要があります。関数add_gallery_query_var()
はあなたのfunctions.php
に入ります。
コード:
add_filter('init', 'wpse124169_attachment_gallery_add_query_var');
function wpse124169_attachment_gallery_add_query_var() {
global $wp;
$wp->add_query_var('gallery_page');
}
さらに、新しいパーマリンクを新しいクエリ変数で機能させたい場合は、新しいリライトルールを実装する必要があります。これには、 add_rewrite_tag および add_rewrite_rule を使用するfunctions.php
に以下を追加します。
コード:
add_filter('init', 'wpse124169_attachment_gallery_add_rewrite_tag_rule');
function wpse124169_attachment_gallery_add_rewrite_tag_rule() {
add_rewrite_tag('%gallery_page%','([^&]+)');
add_rewrite_rule('([^/]+)/gallery/image//?([0-9]{1,})/?$', 'index.php?name=$matches[1]&gallery_page=$matches[2]', 'top');
}
次のステップはギャラリーの二次ループを作成することです。 WP_Query
はそうするのに使用されます、さらに paginate_links
は私達にギャラリーを通してページングするためのリンクを作成する可能性を与えます。このための関数を作成することにしたので、以下のコードはfunctions.php
に入ります。
コード:
function wpse124169_get_attachment_gallery() {
global $post;
$gallery_page = (get_query_var('gallery_page')) ? get_query_var('gallery_page') : 1;
$args = array(
'posts_per_page' => 1,
'orderby' => 'menu_order',
'order' => 'ASC',
'post_type' => 'attachment',
'post_status' => 'inherit',
'post_mime_type' => 'image',
'post_parent' => $post->ID,
'paged' => $gallery_page
);
$gallery = new WP_Query($args);
if ( $gallery->have_posts() ) :
echo '<div class="my_cpt_gallery_paged">';
while ( $gallery->have_posts() ) : $gallery->the_post();
echo wp_get_attachment_image( $post->ID, 'medium' );
endwhile;
echo '</div>';
echo '<div class="my_cpt_gallery_paginate_links">';
if ( get_option('permalink_structure') ) {
$format = 'gallery/image/%#%';
} else {
$format = '&gallery_page=%#%';
}
$args = array(
'base' => get_permalink( $post->post_parent ) . '%_%',
'format' => $format,
'current' => $gallery_page,
'total' => $gallery->max_num_pages
);
echo paginate_links( $args );
wp_reset_postdata();
echo '</div>';
endif;
}
ご覧のとおり、2次照会では、追加のポスト・オブジェクト$gallery
およびその前に定義された照会変数 - gallery_page
を使用して、適切なページ区切りを使用可能にしています。後者はpaginate_links()
のformat
パラメータを設定するために使用されます。問題を防ぐために、wp_reset_postdata()
をリセットすることを忘れないでください。もちろんこれは単なる二次ループであり、完全なテンプレートではありません。
私は、メインのクエリ/ループの後に、関数wpse124169_get_attachment_gallery()
を介して、私のsingle.php
内の二次添付ファイルギャラリークエリを呼び出します。上記の手順に従って、ページ付けされた添付ファイルギャラリーを設定します。私はテスト済みこれを使っていますが、うまくいきました。
以下に私は最も重要な情報と情報源をリストします、あなたがより多くの詳細に興味があるなら、これはあなたがもっとそれを始めたばかりになるはずです。
情報:
WP_Query
paginate_links
省略可
つまり、最初の画像のデフォルトリンクを変更します。通常は添付ファイルの親であるhttp://site.ext/?p=123
またはhttp://site.ext/post-name/
です。それは大丈夫です、それはあなたにデフォルトで最初の画像が表示されます。最初の画像へのリンクがURLのギャラリークエリvarを表すようにしたい場合は、but _ paginate_links
にフックする必要があります。これはリンクがこのhttp://site.ext/?p=123&gallery_page=1
またはhttp://site.ext/post-name/gallery/image/1
のように解釈されることにつながります。これは、paginate_links()
によるリンクを介したナビゲーションにのみ適用されます。親の投稿を呼び出しても、対応する親のパーマリンクのみが表示されます。コードはfunctions.php
にも入ります。
コード:
add_filter( 'paginate_links', 'wpse124169_attachment_gallery_first_image_link' );
function wpse124169_attachment_gallery_first_image_link( $link ) {
global $post;
if ( get_option('permalink_structure') ) {
$gpg_num = substr( strrchr( $link, '/' ), 1 );
} else {
$gpg_plk = wp_parse_args($link);
$gpg_num = $gpg_plk['gallery_page'];
}
if ( empty( $gpg_num ) ) {
if ( get_option('permalink_structure') ) {
$link = get_permalink( $post->post_parent ) . 'gallery/image/1';
} else {
$link = get_permalink( $post->post_parent ) . '&gallery_page=1';
}
}
return $link;
}
更新:
これは、次に示すように[gallery]ショートコードを変更するために使用できます。 wordpress [gallery]ショートコードをページ分割する方法? 。