What is a “Final Class” in php?

“PHP 5 introduces the final keyword, which prevents child classes from overriding a method by prefixing the definition withΒ final. If the class itself is being defined final then it cannot be extended”

https://www.php.net/manual/en/language.oop5.final.php#:~:text=PHP%205%20introduces%20the%20final,then%20it%20cannot%20be%20extended.&text=Note%3A%20Properties%20and%20constants%20cannot,may%20be%20declared%20as%20final.

Add pagination to WordPress archives or search results.

There are several options to do so.

Here are two exemples, on being taken from the twentyfifteen template.

The class is to apply woocommerce styling in case you are using it.

      <div>
         <nav class="woocommerce-pagination bt_search_pagination"> <?php
          // Previous/next page navigation.

          the_posts_pagination(

              array(

                  'prev_text'          => __( 'Previous page', 'twentyfifteen' ),

                  'next_text'          => __( 'Next page', 'twentyfifteen' ),

                  'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'twentyfifteen' ) . ' </span>',

              )

          );?> 
      </nav></div>
 

A second example more compact:

     <div class="row">
          <div class="col-md-12 text-center">
              <nav class="woocommerce-pagination bt_search_pagination"><?php echo paginate_links(); ?></nav>
          </div>
      </div>

You can add this code in search.php or catregory.php

Remove base for category permalink in woocommerce

https://docs.woocommerce.com/document/removing-product-product-category-or-shop-from-the-urls/
TLDNR: Not advisable

I have this idea that longer URI path, or deeper “file hierarchy” would have a negative SEO impact. But recently John Mueller made a statement that URI length did not have any negative SEO impact. The most important thing is that your important page are easily accessible to the search engine, and probably to your customer too.

In this article, Search Engine Journal speaks about length and recommend to keep it short but it’s an extrapolation on what J. Mueller said regarding URI longer than 1000 characters may not be a good practice (which is different from: “the shorter, the better”).

https://www.searchenginejournal.com/googles-john-mueller-recommends-keeping-urls-under-1000-characters/318739/#:~:text=Google’s%20John%20Mueller%20recently%20stated,under%201%2C000%20characters%20in%20length.&text=With%20that%20said%2C%20it’s%20generally,than%20they%20need%20to%20be.

In a more recent tweet, John was clear about that point:

https://www.seroundtable.com/google-url-length-seo-28952.html

Given that woocommerce does not recommend to remove the product-category base from the permalinks and that there is no clear SEO SEO advantage to it, then there is no reason to implement this feature.

If anything you can implement the option to have the product category included in your product permalink for SEO purpose. Having the product category in your URL might help google identify which category your product belong to and helped it rank for those keywords.

How a wordpress page is generated

https://codex.wordpress.org/Query_Overview

https://web.archive.org/web/20170524181634/http://humanshell.net/2011/08/wordpress-initialization

All http query to the webserver are send to index.php (this is not a redirect as the rule don’t use the redirect flag [R]) in the root folder. The redirect occurs in .htaccess with mod_rewrite

mod_rewrite operate by using a PCRE* regular expression

*PCRE: Perl Compatible Regular Expression

This operation retains the original URI that can be requested with $_server[‘REQUEST_URI’]

Below is the cascade of file that are succesfully called from index.php (up the 5th level but it needs to be expanded)

index.php

set the constant ‘WP_USE_THEMES’ to true and require wp-blog-header.php

wp-blog-header.php

execute wp(). This function is defined in functions.php

requires wp-load.php and template-loader.php

wp-load.php AND template-loader.php

wp-load.php requires wp-config.php

wp-load.php set the constant ‘ABSPATH’

wp-config.php requires wp-settings.php

wp-settings.php

requires:

  • version.php
  • load.php
  • class-wp-paused-extensions-storage.php
  • class-wp-fatal-error-handler.php
  • class-wp-reccovery-mode-cookie-service.php
  • class-wp-recovery-mode-key-service.php
  • class-wp-recovery-mode-link-service.php
  • class-wp-recovery-mode-email-service.php
  • class-wp-recovery-mode.php
  • error-protection.php
  • default-constant.php
  • plugin.php

and also:

  • compat.php
  • class-wp-list-util.php
  • formatting.php
  • meta.php
  • functions.php
  • class-wp-meta-query.php
  • class-wp-matchesmapregex.php
  • class-wp.php
  • class-wp-error.php
  • pomo/mo.php

and most of wordpress as well:

  • class-wp-walker.php
  • class-wp-ajax-response.php
  • capabilities.php
  • class-wp-roles.php
  • class-wp-role.php
  • class-wp-user.php
  • class-wp-query.php
  • query.php
  • class-wp-date-query.php
  • theme.php
  • class-wp-theme.php
  • template.php
  • class-wp-user-query.php
  • class-wp-session-tokens.php
  • class-wp-user-meta-sessions-tokens.php
  • class-wp-metadata-session-tokens.php
  • class-wp-metadata-lazyloader.php
  • general-template.php
  • link-template.php
  • author-template.php
  • post.php
  • class-walker-page.php
  • class-walker-page-dropdown.php
  • class-wp-post-type.php
  • class-wp-post.php
  • post-template.php
  • revision.php
  • post-formats.php
  • post-thumbnail-template.php
  • category.php
  • class-walker-category.php
  • class-walker-category-dropdown.php
  • category-template.php
  • comment.php
  • class-wp-comment.php
  • class-wp-comment-query.php
  • class-walker-comment.php
  • comment-template.php
  • rewrite.php
  • class-wp-rewrite.php
  • feed.php
  • bookmark.php
  • bookmark-template.php
  • kses.php
  • cron.php
  • deprecated.php
  • script-loader.php
  • taxonomy.php
  • class-wp-taxonomy.php
  • class-wp-term.php
  • class-wp-term-query.php
  • class-wp-tax-query.php
  • update.php
  • canonical.php
  • shortcodes.php
  • embed.php
  • class-wp-embed.php
  • class-wp-oembed.php
  • class-wp-oembed-controller.php
  • media.php
  • http.php
  • class-http.php
  • class-wp-http-streams.php
  • class-wp-http-curl.php
  • class-wp-http-proxy.php
  • class-wp-http-cookie.php
  • class-wp-http-encoding.php
  • class-wp-http-response.php
  • class-wp-http-requests-response.php
  • class-wp-http-requests-hooks.php
  • widgets.php
  • class-wp-widget.php
  • class-wp-widget-factory.php
  • nav-menu.php
  • nav-menu-template.php
  • admin-bar.php
  • rest-api.php
  • rest-api/class-wp-rest-server.php
  • rest-api/class-wp-rest-response.php
  • rest-api/class-wp-rest-request.php
  • rest-api/endpoints/class-wp-rest-controller.php
  • rest-api/endpoints/class-wp-rest-posts-controller.php
  • rest-api/endpoints/class-wp-rest-attachments-controller.php
  • rest-api/endpoints/class-wp-rest-post-types-controller.php
  • rest-api/endpoints/class-wp-rest-post-statuses-controller.php
  • rest-api/endpoints/class-wp-rest-revisions-controller.php
  • rest-api/endpoints/class-wp-rest-autosaves-controller.php
  • rest-api/endpoints/class-wp-rest-taxonomies-controller.php
  • rest-api/endpoints/class-wp-rest-terms-controller.php
  • rest-api/endpoints/class-wp-rest-users-controller.php
  • rest-api/endpoints/class-wp-rest-comments-controller.php
  • rest-api/endpoints/class-wp-rest-search-controller.php
  • rest-api/endpoints/class-wp-rest-blocks-controller.php
  • rest-api/endpoints/class-wp-rest-block-renderer-controller.php
  • rest-api/endpoints/class-wp-rest-settings-controller.php
  • rest-api/endpoints/class-wp-rest-themes-controller.php
  • rest-api/fields/class-wp-rest-meta-fields.php
  • rest-api/fields/class-wp-rest-comment-meta-fields.php
  • rest-api/fields/class-wp-rest-post-meta-fields.php
  • rest-api/fields/class-wp-rest-term-meta-fields.php
  • rest-api/fields/class-wp-rest-user-meta-fields.php
  • rest-api/search/class-wp-rest-search-handler.php
  • rest-api/search/class-wp-rest-post-search-handler.php
  • class-wp-block-type.php
  • class-wp-block-styles-registry.php
  • class-wp-block-type-registry.php
  • class-wp-block-parser.php
  • blocks.php
  • blocks/archives.php
  • blocks/block.php
  • blocks/calendar.php
  • blocks/categories.php
  • blocks/latest-comments.php
  • blocks/latest-posts.php
  • blocks/rss.php
  • blocks/search.php
  • blocks/shortcode.php
  • blocks/social-link.php
  • blocks/tag-cloud.php