Skip to content

Helpers to split single page with each array of custom field on WordPress.

License

Notifications You must be signed in to change notification settings

sectsect/wp-split-single-page

Repository files navigation

WP Split Single Page

Build Status PHP-Eye Latest Stable Version License

- For Each Array of custom field -

Supply some functions and Pagination for split single page for each array of custom field without <!--nextpage--> on your template.

Installation

1. Clone this Repo into your wp-content/plugins directory.
$ cd /path-to-your/wp-content/plugins/
$ git clone git@github.com:sectsect/wp-split-single-page.git
2. Activate the plugin through the 'Plugins' menu in WordPress.

That's it:ok_hand:

Notes

  • Supports is_preview() Page. See Usage Example.
  • Supports Wordpress Plugin Public Post Preview
  • Supports Wordpress Plugin CF Preview Fix for Cloudfront :memo: You need to manually add the following two parameters to the URL output by CF Preview Fix.
&post_date=20171231021559&preview_time=20171231021604

functions

Function Description
is_single_paged($num) Detect the specific splitted page number.
( Return: boolean )
single_paginate($args) Get the Pagination.
( Based on paginate_links() Codex )
prev_single_paged_link($pagecount, $paged, $label, $type) Get the Previous Split Single Page link
next_single_paged_link($pagecount, $paged, $label, $type) Get the Next Split Single Page link
add_rel_prev_next_paginated_posts($pagecount) Get rel="prev" and rel="next" links
See Indicating paginated content to Google

single_paginate($args)

Default Arguments

$args = array(
    'base'               => get_the_permalink() . '%#%/',	// (is_preview()) get_the_permalink() . '&paged=%#%'
    'format'             => get_the_permalink() . '%#%/',	// (is_preview()) get_the_permalink() . '&paged=%#%'
    'total'              => 1,
    'current'            => 0,
    'show_all'           => false,
    'end_size'           => 1,
    'mid_size'           => 2,
    'prev_next'          => true,
    'prev_text'          => __('&laquo; Previous'),
    'next_text'          => __('Next &raquo;'),
    'type'               => 'list',
    'add_args'           => false,
    'add_fragment'       => '',
    'before_page_number' => '',
    'after_page_number'  => '',
);

TIP: 'base' and 'format' Silence is golden πŸ‘

next_single_paged_link($pagecount, $paged, $label, $type)

Parameters
  • pagecount (integer) The total number of pages.

  • paged (integer) The current page number.

  • label (string) (Optional) Link text to display. Default: 'Next'

  • type (string) (Optional) Controls format of the returned value. Possible values are:

    • 'plain' - <a href="#" rel="next">Next</a>
    • 'list' - <li class="next"><a href="#" rel="next">Next</a></li>

    Default: 'plain'

add_rel_prev_next_paginated_posts($pagecount)

Parameters
  • pagecount (integer) The total number of pages.

Usage Example

single.php

NOTE: Split the page by array (w/ Custom Field Suite Plugin).

<head>
    <?php
    if ( is_single() && function_exists( 'add_rel_prev_next_paginated_posts' ) ) {
      add_rel_prev_next_paginated_posts( count ( CFS()->get('page') ) );
    }
    ?>
</head>
<body>
    <?php get_header(); ?>

    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <article>
        <h1><?php the_title(); ?></h1>

        <?php if ( is_single_paged( 1 ) ) : ?>
            <section>
                The first page only.
            </section>
        <?php endif; ?>

        <?php
            $pages = CFS()->get('page');               // Get the array of Loop-field
            $pages = array_values( (array) $pages );   // Reset array Keys
            if ( ! is_preview() ) {
                $paged = ( get_query_var('page') ) ? get_query_var('page') : 1;
            } else {
                if ( isset( $_GET['paged'] ) ) {
                    $pagenum = (int) wp_unslash( $_GET['paged'] );
                }
                $paged = ( $pagenum ) ? $pagenum : 1;
            }
            $pagecount = count( $pages );
            $key       = $paged - 1;    // "-1" For Array's key
            $page      = $pages[$key];
        ?>
        <section>
            <?php if ( $page['h2'] ) : ?>
                <h2><?php echo $page['h2']; ?></h2>
            <?php endif; ?>

            <?php if ( $page['h3'] ) : ?>
                <h3><?php echo $page['h3']; ?></h3>
            <?php endif; ?>

            <?php if ( $page['text'] ) : ?>
                <?php echo $page['text']; ?>
            <?php endif; ?>
        </section>

        <?php if ( is_single_paged( $pagecount ) ) : ?>
        <section>
            The last page only.
        </section>
        <?php endif; ?>

        <section class="pagenation">
            <?php
                if ( function_exists('single_paginate') ) {
                    $args = array(
                        'total'    => $pagecount,
                        'current'  => $paged,
                    );
                    single_paginate($args);
                }
            ?>
        </section>

        <section class="prev-next">
            <ul>
                <?php
                    prev_single_paged_link( $pagecount, $paged, "PREV", "list" );
                    next_single_paged_link( $pagecount, $paged, "NEXT", "list" );
                ?>
            </ul>
        </section>
    </article>
    <?php endwhile; endif; ?>

    <?php get_footer(); ?>
</body>

Change log

  • 1.4.0 - Specify canonical URL in canonical meta tag
  • 1.3.0 - Add New function add_rel_prev_next_paginated_posts()
  • 1.2.8 - Rename a function to is_perm_trailingslash()
  • 1.2.7 - Improve some codes for comparing same types
  • 1.2.6 - πŸ› Fix bug in function is_single_paged()
  • 1.2.5 - πŸ› Fix bug for navigation links when the permalink setting has no Trailing Slash
  • 1.2.4 - πŸ› Fix PHP Notice for Undefined variable
  • 1.2.3 - Add PHP Unit Testing w/phpunit via TravisCI
  • 1.2.2 - Add support that permalink setting has no Trailing Slash. And Support Plugin CF Preview Fix for Cloudfront (w/ conditions).
  • 1.2.1 - Add composer.json
  • 1.2.0 - Add Support Wordpress Plugin Public Post Preview
  • 1.1.0 - Add New functions prev_single_paged_link() and next_single_paged_link()
  • 1.0.0 - πŸŽ‰ Initial Release

See CHANGELOG file.

License

See LICENSE file.