The WordPress theme powered by the Laravel Framework.

Overview

Laravel in WordPress Theme

Laravel is a web application framework with expressive, elegant syntax. It's one of the most popular PHP frameworks today.

Laraish brings the Laravel Framework into WordPress, which allow us to have all the benefits of Laravel. So you can create themes with less effort, more enjoyment!

Table of contents

Requirement

The 99% of Laraish is just the regular full stack PHP Framework Laravel. So if you have never heard of it, you're going to want to take a look at it before you can go any further.

For those who are already familiar with Laravel, it should be a piece of cake for you to get started with Laraish.

What Laraish is and is not

Laraish is not a framework for general purpose WordPress theme development.

Yes, it is a framework but not for general WordPress theme development. Laraish is aimed at helping create "homemade theme" rather than general purpose theme. So if you want to create themes with a bunch of theme options for sales or just for free distribution, you probably want to take a look at the following frameworks instead.

What's the difference between the original Laravel?

I'd say almost no differences there, except some additional tweaking, which gets Laravel to work well inside a WordPress theme. So basically you could do anything that you could do with Laravel, it's just the regular Laravel inside a WordPress theme. If you are curious about what exactly have been modified, taking a diff to the original Laravel would make sense for you.

Get Started

Installation

You can install Laraish by issuing the following command via Composer.

composer create-project --prefer-dist laraish/laraish <theme-name>

Note that the MySQL server and the web server must be running before you can issue the composer create-project command to install Laraish. Because after Composer finishes the installation, it's going to run an artisan command, which requires MySQL server and the web server that host the WordPress be running at the time you issuing the command.

Also, notice that if you are on Mac and use MAMP or similar application to create your local server environment you may need to change your $PATH environment variable to make Composer use the PHP binary that MAMP provides rather than the OS's built-in PHP binary.

Routing

Laraish replaced the original UriValidator(Illuminate\Routing\Matching\UriValidator) with its own one to allow you to specify WordPress specific routes, like "archive" or "page" or "custom post type" ex.

You define your WordPress-specific-routes in the routes/wp.php file.

For example:

use App\Http\Controllers\Wp\Home;
use App\Http\Controllers\Wp\Page;
use App\Http\Controllers\Wp\Post;
use App\Http\Controllers\Wp\NotFound;
use Laraish\Support\Facades\WpRoute;

// Regular post pages
WpRoute::post('post', [Post::class, 'index']);

// Post pages where post-type is 'movie'
WpRoute::post('movie', [Post::class, 'index']);

// The archive page of "movie" post type.
WpRoute::postArchive('movie', [Home::class, 'index']);

// The child page "works" of the "about" page.
WpRoute::page('about.works', [Page::class, 'index']);

// Any child pages of the "about" page.
WpRoute::page('about.*', [Page::class, 'index']);

// Any descendant pages of the "about" page.
WpRoute::page('about.**', [Page::class, 'index']);

// The "about" page ("about" is the slug of the page)
WpRoute::page('about', [Page::class, 'index']);

// The archive page of "foobar" term of "category" taxonomy.
WpRoute::taxonomy('category.foobar', [Home::class, 'index']);

// The archive page of "category" taxonomy.
WpRoute::taxonomy('category', [Home::class, 'index']);

// The archive page of author "jack".
WpRoute::author('jack', [Home::class, 'index']);

// The archive page for all authors.
WpRoute::author([Home::class, 'index']);

// The search result page
WpRoute::search([Home::class, 'index']);

// All pages
WpRoute::page([Page::class, 'index']);

// The home/front page.
WpRoute::home([Home::class, 'index']);

// All archive pages.
WpRoute::archive([Home::class, 'index']);

// The 404 page.
WpRoute::notFound([NotFound::class, 'index']);

Here are some notes you should keep in mind.

  • You can use a "dot notation" to specify the hierarchy for pages and taxonomies.
  • You can use the wild card to specify any child/descendant page/term of a parent/ancestor page/term.
  • You should care about the order of your routes. Routes that has a higher specificity should be placed more above than the routes that have a lower specificity.

Route order

The position of the route is very important.

Here is a bad example:

use App\Http\Controllers\Wp\Page;
use Laraish\Support\Facades\WpRoute;

WpRoute::page([Page::class, 'index']);
WpRoute::page('works', [Page::class, 'works']);

The problem of this code is that the second route will never get matched. Because the first route matches to any pages, so all routes after the first one will be simply ignored. That is, routes that has a higher specificity should be placed above the routes that have a lower specificity.

Auto-Discovery Routing

If you don't like to specify a route manually, you could always use the auto-discovery strategy instead. By turning on auto discovery routing, Laraish resolves the controller or view automatically the way similar to WordPress.

Use Auto-Discovery Routing in the route file.

use App\Http\Controllers\Wp\Home;
use App\Http\Controllers\Wp\Page;
use Laraish\Support\Facades\WpRoute;

WpRoute::home([Home::class, 'index']);
WpRoute::page([Page::class, 'index']);

// Fallback to auto discovery routing.
WpRoute::autoDiscovery();

Notice that you should always place auto discovery routing in the last line of your route file.

With this featured turned on, Laraish will try to find a controller or view that matches to the following naming convention.

in the <ViewRoot>/wp directory:

  • home.blade.php
  • search.blade.php
  • archive.blade.php
  • post.blade.php
  • post
    • {$post_type}.blade.php
  • post-archive
    • {$post_type}.blade.php
  • page.blade.php
  • page
    • {$page_slug}.blade.php
    • {$page_slug}
      • {$child_page}.blade.php
  • template
    • {$template_slug}.blade.php
  • taxonomy.blade.php
  • taxonomy
    • {$taxonomy}.blade.php
    • {$taxonomy}
      • {$term}.blade.php
      • {$term}
        • {$child_term}.blade.php
  • author.blade.php
    • {$nicename}.blade.php

Same rule applied to the controllers under the namespace App\Http\Controllers\Wp.

For example, If the coming request is for a page called "foo", it'll try to :

  1. Find a controller action in the following order.
    • App\Http\Controllers\Wp\Page\Foo@index.
    • App\Http\Controllers\Wp\Page@index.
  2. If no controller action found, try to find a view file in the following order (if any, pass the $post object as the view data).
    • <ViewRootDir>/wp/page/foo.blade.php.
    • <ViewRootDir>/wp/page.blade.php.

As you can see, the searching paths will follow the hierarchy of the queried object. In the above example queried object is the page foo. Same rule will be applied to taxonomy or post archive Etc.

If Laraish could resolve the route, it'll passes some default view data according to the type of queried object :

  • page
    • $post
  • post archive
    • $posts
  • taxonomy archive
    • $term
    • $posts
  • home
    • $post if it's a "frontpage", otherwise $posts

Where $post is a Post model object, and $posts is a Laraish\Support\Wp\Query\QueryResults object contains a collection of posts.

By default, the post model will be Laraish\Support\Wp\Model\Post, but it'll try to locate a custom model in \App\Models\Wp\Post first.

For example, if the queried object is a custom post type "movie", it will try to use \App\Models\Wp\Post\Movie if such a class found. Same rule applied to the taxonomy too, but the searching path will be \App\Models\Wp\Taxonomy instead.

Notice that if you want to use template for pages or posts, you should register them in theme.php.

Use Auto-Discovery Routing in the Controller.

Not only in the route file, you could also use the resolveView method in the controller to let Laraish resolve the view file automatically.

Here is an example shows how you can use utilize the resolveView in a controller.

In the routes/wp.php file :

use App\Http\Controllers\Wp\Page;
use Laraish\Support\Facades\WpRoute;

WpRoute::page([Page::class, 'index']);

In the controller :

namespace App\Http\Controllers\Wp;

use App\Http\Controllers\Controller;

class Page extends Controller
{
    public function index()
    {
        $data = [ 'foo' => 'bar' ];
        
        // Let Laraish figure out the view file.
        // 'wp.page' is the default view if no matched view found. 
        return $this->resolveView('wp.page', $data);
    }
}

In the above example, if the coming request is for a page called "foo", it'll try to find a view file from the following paths:

  • <ViewRootDir>/wp/page/foo.blade.php.
  • <ViewRootDir>/wp/page.blade.php.

Regular Route

Alone with the WordPress routes, you can even write your own routes by URI, and it just works. Just be careful do not write regular routes to the routes/wp.php file ( technically you could, but I would not recommend ). For instance, write them to the routes/web.php file.

use Illuminate\Support\Facades\Route;

// This will use the original UriValidator of Laravel.
Route::get('/my/endpoint', function () {
    return 'Magic!';
});

Keep in mind that routes in routes/wp.php has the lowest priority of all the routes in the routes directory.

Models

Laraish comes with some general purpose models like Post or Term model. Note that they are not an implementation of ORM like the Laravel's Eloquent Model. They are just a simple wrapper for WordPress's APIs that encapsulate some common logic to help you simplify your business logic.

You can find those models in Laraish\Support\Wp\Model. Because the Post model is the most frequently used model, for convenience, a Post Class that extends the Laraish\Support\Wp\Model\Post has brought to your app/Models directory already.

Let's take a look at an example.

Say you have a route like this :

WpRoute::archive('\App\Http\Controllers\Wp\Archive@index');

In your controller app\Http\Controllers\Wp\Archive :

<?php

namespace App\Http\Controllers\Wp;

use App\Http\Controllers\Controller;
use App\Models\Post;

class Archive extends Controller
{
    public function index()
    {
        $data = [
            'posts' => Post::queriedPosts() // get the posts for current page
        ];

        return $this->view('wp.archive', $data);
    }
}

In your view wp.archive :

<main class="posts">
    @foreach($posts as $post)
        <section class="post">
            <a class="post" href="{{ $post->permalink }}">
                <img class="post__thumbnail" src="{{ $post->thumbnail->url }}" alt="{{ $post->title }}">
            </a>
            <time class="post__time" datetime="{{ $post->dateTime }}">{{ $post->date }}</time>
            <a class="post__category" href="{{ $post->category->url }}">{{ $post->category->name }}</a>
            <h1 class="post__title">{{ $post->title }}</h1>
        </section>
    @endforeach

    {{  $posts->getPagination() }}
</main>

As you can see in the example above, you can get common properties of a post, like $post->permalink or $post->title etc.

Actually, those properties are not "real properties". When you access property like $post->permalink, under the hood, it'll call $post->permalink() to get the value for you automatically, and from the second time when you access the same property, it won't call $post->permalink() again, instead, it'll return the cached value from previous calling result. If you don't want to use cached value, you can call the method explicitly like $post->title().

Also, feel free to create your own "properties" by adding public methods to your model class.

Take a look at Laraish\Support\Wp\Model, there are some predefined "properties" that you may want to use.

Cast Model to JSON

As I mentioned earlier, models that comes with Laraish are not real models. If you want to cast a "model" to JSON, you must specify the attributes you want output in the $visible property.

For example:

<?php
namespace App\Models;

use Laraish\Support\Wp\Model\Post as BaseModel;

class Post extends BaseModel
{
    protected $visible = [
        'title',
        'thumbnail',
        'content'
    ];
}

Now you can call $post->toJson() to get the serialized json string of the post object.

The @loop blade directive

Laraish also added a @loop blade directive for simplifying "The Loop" in WordPress.

for example:

@loop($posts as $post)
	{{ get_the_title() }}
@endloop

will be compiled to

<?php foreach($posts as $post): setup_the_post( $post->wpPost ); ?>
                
    <?php echo e(get_the_title()); ?>

<?php endforeach; wp_reset_postdata(); ?>

where $post should be a Post model object.

Usually you don't want to use the @loop directive. Because it'll introduce some unnecessary overheads. Keep in mind that always prefer @foreach to @loop. Except you want to access some properties like content or excerpt which requiring must be retrieved within "The Loop", otherwise never use the @loop actively.

Theme Options

Setup the custom post type, register the navigation menus ... There always are some common tasks you have to deal with when you start to build a WordPress theme. The app/config/theme.php is where you define all your common tasks.

Some basic options are predefined for you. Take a look at the config/theme.php.

Also, you can create your own options by adding new static methods to the App\Providers\ThemeOptionsProvider. The name of the method will become to an option.

Actions and Filters

You define your actions and filters in App\Providers\EventServiceProvider just like the laravel's event.

The following example adding a pre_get_posts action, and the handle method of App\Listeners\MainQueryListener will be called for this action.

<?php

namespace App\Providers;

use Laraish\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;

class EventServiceProvider extends ServiceProvider
{
    /**
     * Register the WordPress actions
     * @var array
     */
    protected $action = [
            'pre_get_posts' => 'App\Listeners\MainQueryListener'
    ];

    /**
     * Register the WordPress filters
     * @var array
     */
    protected $filter = [];
}

Pagination

You can get the pagination by calling the getPagination method of Post.

use App\Models\Post;

$posts = Post::queriedPosts();
<div>
	{{  $posts->getPagination() }}
</div>

By providing additional parameters, you can specify the view file and several options. See laraish/pagination for more details.

Work with ACF

The model classes comes with Laraish works seamlessly with ACF out of the box.

Get the value of custom field from model

For example, suppose that you have created a custom field with ACF named foobar. Then you can access the field's value like this:

use App\Models\Post;

$post = new Post(123); 
// As with the `Post` model, these models works the same way. 
// `Laraish\Support\Wp\Model\User`
// `Laraish\Support\Wp\Model\Term` 


// This make it call the magic method to get the value of the custom field `foobar`. 
$foobar = $post->foobar;

Data Type Casting

You can determine if or not or how to cast the data type retrieved from ACF at config/theme.php.

The default behavior is casting any of these types to Laraish's model:

  • WP_PostLaraish\Support\Wp\Model\Post
  • WP_UserLaraish\Support\Wp\Model\User
  • WP_TermLaraish\Support\Wp\Model\Term

Additionally, casting any assoc array to stdClass.

The ShareViewData Middleware

Laraish comes with a middleware app/Http/Middleware/ShareViewData.php. This is your best place to define any shared view data or view composers.

Options page

Perhaps creating options pages is one of the most tedious tasks. If you've used the WordPress's API to create options pages, you know how dirty the code is going to be…

Laraish provides a powerful and yet clean API to help you creating the options pages.

See laraish/options for more details.

View debugger

Sometimes, you just want to get some basic information about the current view(page) being displayed. For example, the path of the view file, or the name of the controller that was used.

To get the basic information of the current view being displayed, you include the ViewDebbuger trait in your App\Http\Controllers. Make sure you have called wp_footer() in your view, then open your console of your browser, and you could find something like this:

{
    "view_path": "/var/www/example/wp-content/themes/example/resources/views/singular/news.blade.php",
    "compiled_path": "/var/www/example/wp-content/themes/example/storage/framework/views/befa3e2a2cb93be21c6ebf30a60824a5d2a2ed11.php",
    "data": {
        "post": {}
    },
    "controller": "App\\Http\\Controllers\\Singular\\News"
}

Note that when APP_ENV=production is set in your .env file, nothing will be outputted to the console.

Run artisan command

As I mentioned in the Installation section. To run an artisan command, you have to meet the following conditions.

  • The MySQL server and the web server must be running.
  • If you are on Mac and use MAMP or similar application to create your local server environment you may need to change your $PATH environment variable to make Composer use the PHP binary that MAMP provides rather than the OS's built-in PHP binary.

Security Concerns

Notice that Laraish is just a regular WordPress theme. Therefore, not only the public directory but all the files and directories inside the theme are accessible from outside.

Laraish comes with two .htaccess files to deny any accesses against any files and directories inside the theme except the following files:

  • style.css
  • screenshot.png
  • public/**

If you don't use Apache, you should have your server software configured to have the same access control just like the above one.

Known Issue

Composer race condition

If you have a plugin using Composer, and that plugin has the same dependency as your theme(Laraish) has, may lead to a problem when they are using a different version of that dependency.

In such a situation, it'll require multiple Composer Autoloaders(vendor/autoload.php), and the last loaded one will take priority over the previous ones.

Say you have a plugin that depends on the package Foo (v1.2.0), and your theme depends on the same package Foo (v2.0.1); such a situation may lead to load the unintended version of Foo. Which version will be used depend on the time the autoloader.php was loaded and the time the package(class) was used.

Being that said, this is not a Composer specific issue. I'd say it's a WordPress issue that needs to be solved somehow.

Here are some articles discussing this issue in WordPress.

If you are planing to publish this theme for general use, make sure you have your theme namespaced by using tools like PHP Scoper.

Comments
  • The equipment to index.php

    The equipment to index.php

    Hi first of all thank you for this great package and also I got some news I've been trying to make an script which (almost) automatically (depending on the theme) will convert a normal theme into this theme basically, splits the theme into different parts puts assets to public folder and makes all php files which have something to show (not the config and only php logic files), into blade files and just make everything fit into laravel I'd love to share this script with you when it's done and I've worked really hard on it and I want you to have a look at it maybe you like it.please send me your email or something thanks.

    So the question is that index.php can't just be the index.php of the theme because it gets added to the end of pages and post pages and that's weird but anyways, so it must be empty not to cause this issue.But I was wondering where shall I put the index.php theme's file in laraish.

    opened by Stevemoretz 16
  • Can't Access Regular Route

    Can't Access Regular Route

    Hello,

    I am excited to use this package , after installing the package i uncommit the route in web.php and dump some text as showing in this pic : image

    but when call the route as "localhost:10080/ShiblyMarketing/foobar" i get "404 Not Found" and i don't have any text dumping .

    knowing that when dumping on 'wp.php' and call route "localhost:10080/ShiblyMarketing/home" the home page opened and the dump text showing normally : image

    please can anyone tell me what the problem .

    thanks.

    opened by Moaz-e 15
  • Question about docs {$template_slug}

    Question about docs {$template_slug}

    Hi thank you for the new major update, would you mind explaining usage of : {$template_slug}.blade.php An example would be great.

    And by the way header and footer and sidebar templates are not supported right?

    opened by Stevemoretz 11
  • Got question regarding action via event provider

    Got question regarding action via event provider

    Hi! I created a rewrite rule for WordPress and called it from the event service provider. but can't seem to make it work?

    ReferralRewriteRules

        public function handle()
        {
            add_rewrite_tag( '%type%', '([^&]+)' );
            add_rewrite_tag( '%referrer%', '([^&]+)' );
           add_rewrite_rule( '^join-us/type/([^/]*)/referrer/([^/]*)/?', 'index.php?pagename=join-us&type=$matches[1]&referrer=$matches[2]','top' );
        }
    

    Event Service Provider

        protected $action = [
            'pre_get_posts' => 'App\Listeners\MainQueryListener',
            'init' => ['App\Listeners\ShortcodeListener', 'App\Listeners\ReferralRewriteRules'],
            'wp_enqueue_scripts' => 'App\Listeners\TailwindStyle',
            'send_headers', 'App\Listeners\StrictTransportSecurity'
        ];
    

    for some reason, it just does not work.

    opened by ThinkDevStudios 7
  • ACF and Images

    ACF and Images

    Displaying ACF images don't seem to work. Maby I'm doing something wrong. In traditional PHP it would be $image = get_field('collection_image'); <img src="<?php echo esc_url($image['url']); ?>" alt="<?php echo esc_attr($image['alt']); ?>" />

    What would be the best way to get Images with ACF in Laraish?

    opened by Alexlytle 5
  • Problem with WordPress redirect

    Problem with WordPress redirect

    Hi WordPress for example created the hello-world post and now if on top of the file of api.php or web.php you define a laravel route and it is named as hello then you try to access it via for example site.test/api/hello it will redirect to the post of hello world site.test/hello-world instead of the api if I change the name of the route it works, so it's a kind of prorioty problem not routing problem. How to fix this?

    opened by Stevemoretz 5
  • Having problem with using controller in routes

    Having problem with using controller in routes

    Hi! I was able to finally get things working but im having some problems with using controllers on Routes. // does not work Route::get('account/login')->name('login')->uses('Auth\LoginController@showLoginForm')->middleware('guest');

    // this seems to work

    Route::get('account/login', function() {
        return Inertia::render('Auth/Login');
    })->middleware('guest');
    

    when using controller on routes i get the following error image no additional information for whats causing the problem, even if debug and error reporting is turned on.

    another issue i found is that the public folder for css and js returns a 404 error. already check the .htaccess. everything seems to be in place.

    opened by ThinkDevStudios 5
  • Can't use it as a child theme

    Can't use it as a child theme

    Hi I'm trying to use this great theme as a child theme I did set it as a child theme and everything is working I even could add the styles and everything.But I don't know how to override the php files now.Imagine I want to change the front_page or any other page.I used:

    Route::any('front_page','FrontController@index');

    inside web.php but it has no effect at all.and also:

    Route::any('home', 'Generic\Home@index');
    Route::any('single', 'Generic\Single@index');
    Route::any('page', 'Generic\Page@index');
    Route::any('404', 'Generic\NotFound@index');
    

    All these defaults are not working anymore and everything is coming from the parent theme.

    Also the laravel router is not working anymore and is giving 404.

    So would you please show me what to do?I want to use laraish as a child theme but couldn't find a way yet.

    opened by Stevemoretz 5
  • Im getting an error establishing a connection to database

    Im getting an error establishing a connection to database

    Hi after installing laraish. i keep getting an error Error establishing a database connection

    I am using mamp pro so i made sure the server and mysql is running but it does not work. even after putting the mysql database manually on the .env file.

    opened by ThinkDevStudios 3
  • Nothing returns if visit chosen A Static Posts page

    Nothing returns if visit chosen A Static Posts page

    In Reading Settings Your homepage displays : if you choose : A static page (select below) and select a Posts page : whatever then if you visit that page : http://localhost:3000/whatever/ The source of the page would be completely empty.

    I'm using laraish as a child theme right now if it has anything to do with this problem? And I changed the Posts page to something else http://localhost:3000/whatever/ returns some html and the other chosen page would return nothing.

    opened by Stevemoretz 3
  • routes bug

    routes bug

    hello , great work but i have problem when i try to use web.php any route is not working it`s give me an error page 500 Whoops, something went wrong on our servers.

    i`m using last version of wordpress 5.0.3

    opened by itsho15 3
  • How to set a static page as landing, before Laravel routes

    How to set a static page as landing, before Laravel routes

    I have reviewed this closed issue. But I mean, using Laraish as a regular theme, is there any way to fix any static page from WP settings as domain’s landing page, preceding the ones you have in the Laravel project?

    Thanks in advance ! Laraish is a utterly amazing project !

    opened by frangonzalezr 0
  • Problem with customize Apperance

    Problem with customize Apperance

    Hello there, I would like customize the apperance of theme in the wordpress's dashboard, but when I click there appear this: Seleção_067

    "ErrorException Trying to get property 'title' of non-object" Can you help me to solve this problem?

    opened by rrodrigofranco 2
  • enabling the menu navigation to the template

    enabling the menu navigation to the template

    Hi @yaquawa, I hope you are fine, I like your project and I want to contribute to this wonderful project. After your permission, I have added some line that could be useful. Thanks.

    opened by yousseffatihi 0
  • Better translation support

    Better translation support

    Hello, I did try your library once a long time ago and it was great, for some reasons I made my own implementation which isn't a hook but a plugin instead, long story short tonight I got a few errors with translations because both WordPress and Laravel have __() function, remembered the way you have solved it (via renaming) but then when loading some pages I noticed in storage framework 404.blade.php compiled file would still become __ instead of ___, so I had another idea which I wanted to share with you since you gave me the idea to build my plugin.

    Sorry for the wall of text, I hope this is helpful for you :

    //region combining laravel and wordpress translation
    add_filter("gettext",function($translation, $text, $domain){
        if(is_array($domain)){
            return trans( $text, $domain, get_locale() );
        }
        $laravelTranslated = trans( $text, [], get_locale() );
        return $text !== $laravelTranslated ? $laravelTranslated : $translation;
    },PHP_INT_MAX,4);
    //endregion
    

    Also after this the __ function can remain unchanged (no rename needed anymore).

    opened by Stevemoretz 1
Owner
null
Wordless is a junction between a WordPress plugin and a theme boilerplate that dramatically speeds up and enhances your custom theme creation

Wordless is a junction between a WordPress plugin and a theme boilerplate that dramatically speeds up and enhances your custom theme creation. Some of

weLaika 1.4k Dec 9, 2022
A curated list of Awesome WordPress Theme, Plugins and Framework development Resources and WordPress Communities.

Awesome WordPress A curated list of Awesome WordPress Theme, Plugins and Framework development Resources and WordPress Communities. Inspired by bayand

Dropndot Limited 91 Dec 26, 2022
A custom WordPress nav walker class to fully implement the Twitter Bootstrap 4.0+ navigation style (v3-branch available for Bootstrap 3) in a custom theme using the WordPress built in menu manager.

WP Bootstrap Navwalker This code in the main repo branch is undergoing a big shakeup to bring it in line with recent standards and to merge and test t

WP Bootstrap 3.3k Jan 5, 2023
Twenty Twenty-Two, the default WordPress theme that will launch with WordPress 5.9.

Twenty Twenty-Two Welcome to the development repository for the default theme that will launch with WordPress 5.9. About Twenty Twenty-Two is designed

null 414 Nov 28, 2022
WordPress Framework based on parent theme

Cherry Framework The most delicious WordPress framework Fully responsive design, easy install, steady updates, great number of shortcodes and widgets,

Cherry Framework 158 Nov 23, 2022
Hozokit - Theme Building Framework for WordPress

Hozokit - Theme Building Framework for WordPress Hozokit gives you the power to create unique WordPress themes without the WordPress hassle.

cristiano 16 Nov 15, 2022
List of high-ranking websites powered by WordPress (everything but news and blogs)

Powered By WordPress About 25% of the web is powered by WordPress. A big majority of these sites are private blogs but also heavy-weights such as Sony

MB 19 Dec 23, 2022
A WordPress theme switcher for developers

WP Theme Switcher To help you build or preview a new theme directly on your site without affecting your visitors (they always see the default theme wh

WP Clevel 3 Oct 20, 2021
Custom WordPress theme for DotOrg

wd_s Debt Collective Theme Table of Contents Introduction Getting Started Prerequisites Quick Start Advanced Setup Development Contributing and Suppor

The Debt Collective 1 Oct 31, 2022
Sakura🌸: A Wonderful WordPress Theme

Sakura??: A Wonderful WordPress Theme

幼稚鬼呀 2 Dec 15, 2022
The most powerful all in one, SEO-friendly theme for WordPress.

Help us Become a backer via Patreon. Make one time donation with PayPal. About Seven SERP Theme Seven SERP Theme is an open source WordPress theme. Wi

Seven SERP 3 Nov 19, 2021
Création du thème "mytheme" WordPress from Scratch

<!DOCTYPE html> <html lang="fr"> <head> <meta name="viewport" content="width=device-width" /> <meta http-equiv="Content-Type" content="text/html;

Jules Eulalie 0 Dec 27, 2021
A WordPress theme I developed for metamaxlab.com website.

=== metamaxlab === A WordPress theme I developed for metamaxlab.com website. This theme has compatibility with Bootstrap 5.1, Font Awesome, and Jetp

Gregory Noguera 0 Jul 17, 2022
Advanced Import : One Click Import for WordPress or Theme Demo Data

Advanced Import is a very flexible plugin which convenient user to import site data( posts, page, media and even widget and customizer option ).

Santosh Kunwar 1 Jan 18, 2022
A one-page user-profile WordPress theme

X3P0 - Profile A one-page user-profile WordPress theme. Currently, it ships with a few patterns. More will be added. Credits patterns/artist.php - Pho

X3P0 25 Nov 4, 2022
A completely BLANK WordPress theme for using with Oxygen Builder.

A completely BLANK WordPress "theme" to use with Oxygen Builder. After installation and activation delete all other themes. This theme will never need to be updated.

WebSchematix 10 Aug 26, 2022
WordPress Theme - Aquila

WordPress Theme - Aquila I'm creating this theme just for learning wordpress advance theme developement Quote Always try to improve yourself. Some bas

Shahid Mughal 1 Apr 9, 2022
WordPress single-page theme with profile patterns.

X3P0 - Reflections A one-page user-profile WordPress theme. Really, it's just a single page. View Demo → Recommended This theme is designed to work wi

X3P0 25 Nov 4, 2022
Minimalist Forum and Community WordPress Theme ❤

SiForum a WordPress Forum Theme Minimalist Forum and Community Theme made with WordPress and BuddyPress Inspired from Discourse, Flarum and NodeBB. Bu

sinanisler 22 Oct 7, 2022