サポート » 使い方全般 » のページネーション(paginate_links)のclass付与について

  • ページネーションのリスト表示のspanを消したいのですが、str_replaceが効かずに困っています。下記参照

    <?php
    function paginate_links_pagination() {
        global $wp_query;
        $big = 999999999;
        $pages = paginate_links( array(
            'base' => str_replace($big, '%#%', get_pagenum_link($big)),
                'format' => '?paged=%#%',
                'current' => max( 1, get_query_var('paged') ),
                'total' => $wp_query->max_num_pages,
                'prev_next' => false,
                'type'  => 'array'
            ) );
            if( is_array( $pages ) ) {
                $paged = ( get_query_var('paged') == 0 ) ? 1 : get_query_var('paged');
                echo '<ul class="pagination">';
                foreach ( $pages as $page ) {
                        echo "<li>$page</li>";
                }
                echo '<li><span>'. $paged . ' of ' . $wp_query->max_num_pages .'</span></li>';
               echo '</ul>';
            }
        }
    		echo str_replace('li><span class="page-numbers current">', 'li class="page-numbers current">', $pages);
    		echo str_replace('</span>', '', $pages);
    
    	echo paginate_links_pagination();
    ?>

    spanのクラスをliにしたいと考えております。

    <ul class="pagination">
    <li><a class="page-numbers" href="#">1</a></li>
    <li><span class="page-numbers current">2</span></li>
    <li><a class="page-numbers" href="#">3</a></li>
    <li><a class="page-numbers" href="#">4</a></li>
    <li><span class="page-numbers dots">…</span></li>
    <li><a class="page-numbers" href="#">10</a></li>
    <li><span>2 of 10</span></li>
    </ul>

    <ul class="pagination">
    <li class="page-numbers"><a href="#">1</a></li>
    <li class="page-numbers current">2</li>
    <li class="page-numbers"><a href="#">3</a></li>
    <li class="page-numbers"><a href="#">4</a></li>
    <li><span class="page-numbers dots">…</span></li>
    <li class="page-numbers"><a href="#">10</a></li>
    <li><span>2 of 10</span></li>
    </ul>

    このように考えております。
    cssでの調整は考えていないので、お力添えをお願いします。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • モデレーター jim912

    (@jim912)

    echo "<li>$page</li>";

    ここを書き換えればいいんじゃないですか?

    トピック投稿者 yamayama

    (@yamayama)

    そうですね。
    そこを変えれば良いのですが、その調整方法がわからないので、有識者の方に、具体的な解決策やアドバイスをと思いまして投稿しました。

    初めまして。

    置換パターンを見ると、以下に見えます。(n, mは整数値)

    $pageの内容                                         置換したい内容
    1. '<a class="page-numbers" href="#">n</a>'      → '<li class="page-numbers"><a href="#">n</a></li>'
    2. '<span class="page-numbers current">m</span>' → '<li class="page-numbers current">m</li>'
    3. '<span class="page-numbers dots">…</span>'   → '<li>' . $page . '</li>'
    4. その他                                        → 不明

    そのため、$pageの内容でどのパターンになるかの判定が必要です。
    (ここでは 4.は3.に含めて考えます)

    最初にお断りしておきますが、コードは複雑なので文章で説明します。
    使用関数等はPHPの関数リファレンスを参考にしてください。
    難しい場合、CSSで調整した方が簡単かもしれません。

    パターンの判定にはn , mを含めてできないため、先頭からの文字列比較(文字数または’>’がでるまで)でパターン分けをし、パターンごとの置換を行う処理を行う必要があります。

    1. n, mの直前までの置換(パターン1, 2で異なる)
    2. n, mのコピー
    3. n, m直後の置換(パターン1, 2で異なる)

    一度に置換できないため、出力用変数に部分コピーした方が楽かもしれません。
    また、n, mのコピーは桁数が固定ではないため、'<‘の検出位置までの部分コピーが妥当かもしれません。

    明確な回答になっておりませんが、アルゴリズムの参考にしてください。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「のページネーション(paginate_links)のclass付与について」には新たに返信することはできません。