Skip to content

Commit 3ebbc88

Browse files
Initial commit
1 parent 14a5f9b commit 3ebbc88

35 files changed

Lines changed: 2246 additions & 0 deletions

.gitattributes

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
.github export-ignore
2+
.gitattributes export-ignore
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
name: Generate Installable Plugin or Theme, and Upload as Release Asset
2+
on:
3+
release:
4+
types: [published]
5+
jobs:
6+
build:
7+
name: Upload Release Asset
8+
runs-on: ubuntu-latest
9+
steps:
10+
- name: Checkout code
11+
uses: actions/checkout@v4
12+
- name: setup git config
13+
run: |
14+
git config user.name "GitHub Actions Bot"
15+
git config user.email "<>"
16+
- name: Create artifact
17+
run : |
18+
git archive -o ${{ github.event.repository.name }}-${{ github.ref_name }}.zip --prefix ${{ github.event.repository.name }}/ HEAD
19+
ls
20+
- name: Upload artifact
21+
uses: actions/upload-artifact@v4
22+
with:
23+
name: ${{ github.event.repository.name }}-${{ github.ref_name }}
24+
path: ${{ github.event.repository.name }}-${{ github.ref_name }}.zip
25+
- name: Upload to release
26+
uses: JasonEtco/upload-to-release@master
27+
with:
28+
args: ${{ github.event.repository.name }}-${{ github.ref_name }}.zip application/zip
29+
env:
30+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

.github/workflows/cpcs.yml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
name: ClassicPress Directory Coding Standard checks.
2+
3+
on: [pull_request, push]
4+
5+
concurrency:
6+
group: ${{ github.workflow }}-${{ github.ref }}
7+
cancel-in-progress: true
8+
9+
jobs:
10+
phpcs:
11+
name: CPCS
12+
runs-on: ubuntu-latest
13+
steps:
14+
- uses: actions/checkout@v4
15+
- name: CPCS get rules
16+
run: |
17+
wget -O phpcs.xml https://raw.githubusercontent.com/ClassicPress/ClassicPress-Coding-Standards/main/phpcs.xml
18+
sed -i '/^\t<!-- start config -->.*/a\
19+
<file>.</file>
20+
' phpcs.xml
21+
sed -i '/MY_DOMAIN/ s//xenaviza/' phpcs.xml
22+
mv phpcs.xml phpcs.xml.dist
23+
- name: CPCS checks
24+
uses: 10up/wpcs-action@v1.7.0
25+
with:
26+
use_local_config: 'true'
27+
enable_warnings: 'true'
28+
extra_args: '--report-json=./phpcs.json'
29+
- name: Update summary
30+
run: |
31+
npm i -g github:10up/phpcs-json-to-md
32+
phpcs-json-to-md --path ./phpcs.json --output ./phpcs.md
33+
cat phpcs.md >> $GITHUB_STEP_SUMMARY
34+
if: always()

404.php

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<?php
2+
/**
3+
* The template for displaying 404 pages (not found)
4+
*
5+
* @link https://codex.wordpress.org/Creating_an_Error_404_Page
6+
*
7+
* @package Xenaviza
8+
*/
9+
10+
get_header();
11+
?>
12+
13+
<main id="primary" class="site-main col">
14+
15+
<section class="error-404 not-found">
16+
<header class="page-header pt-1">
17+
<h1 class="page-title"><?php esc_html_e( 'Oops! That page can&rsquo;t be found.', 'xenaviza' ); ?></h1>
18+
</header><!-- .page-header -->
19+
20+
<div class="page-content">
21+
<p><?php esc_html_e( 'It looks like nothing was found at this location. Maybe try one of the links below or a search?', 'xenaviza' ); ?></p>
22+
23+
<?php get_search_form(); ?>
24+
25+
<div class="error-404-widgets">
26+
27+
<?php the_widget( 'WP_Widget_Recent_Posts' ); ?>
28+
29+
<div class="widget widget_categories">
30+
<h2 class="widget-title"><?php esc_html_e( 'Most Used Categories', 'xenaviza' ); ?></h2>
31+
<ul>
32+
<?php
33+
wp_list_categories(
34+
array(
35+
'orderby' => 'count',
36+
'order' => 'DESC',
37+
'show_count' => 1,
38+
'title_li' => '',
39+
'number' => 10,
40+
)
41+
);
42+
?>
43+
</ul>
44+
</div><!-- .widget -->
45+
46+
<?php
47+
/* translators: %1$s: smiley */
48+
$xenaviza_archive_content = '<p>' . sprintf( esc_html__( 'Try looking in the monthly archives. %1$s', 'xenaviza' ), convert_smilies( ':)' ) ) . '</p>';
49+
the_widget( 'WP_Widget_Archives', 'dropdown=1', "after_title=</h2>$xenaviza_archive_content" );
50+
51+
the_widget( 'WP_Widget_Tag_Cloud' );
52+
?>
53+
54+
</div>
55+
56+
</div><!-- .page-content -->
57+
</section><!-- .error-404 -->
58+
59+
</main><!-- #main -->
60+
61+
<?php
62+
get_footer();

README.md

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
# Xenaviza ClassicPress Theme
2+
3+
**Version:** 1.0.0
4+
**Requires PHP:** 7.4
5+
**Requires CP:** 1.7
6+
**Contributors:** IndoCreativeMedia
7+
**Tags:** blog, two-columns, right-sidebar, custom-logo, custom-menu, featured-images, threaded-comments, translation-ready
8+
**License:** GNU General Public License v2 or later
9+
**Text domain:** xenaviza
10+
11+
## Description
12+
13+
Xenaviza is a simple, lightweight, components-ready ClassicPress theme built on the power of Bootstrap and Underscores. Designed for readability and comfortability, it features an intelligent, responsive smart layout, ensuring your content always looks perfectly balanced on any device. Built on high-performing codebase and utilized with ready-made html components, this theme is ideal for blog style sites seeking a modern, minimal interface with strong usability and performance.
14+
15+
## Demo
16+
17+
Theme Demo: https://www.indocreativemedia.com/classicpress-themes-demo/xenaviza/
18+
19+
## Features
20+
21+
- Smart responsive design
22+
- SEO-friendly structure
23+
- Customizable logo image and sidebar
24+
- Widget-ready and supports custom menus
25+
- Clean and minimalistic codebase
26+
- Instantly familiar and easy to use
27+
28+
## Changelog
29+
30+
### 1.0.0
31+
32+
- Initial release
33+
34+
## Installation
35+
36+
1. Download the theme ZIP file.
37+
2. Log in to your ClassicPress dashboard.
38+
3. Navigate to **Appearance > Themes**.
39+
4. Click **Add New**, then **Upload Theme**.
40+
5. Select the ZIP file and click **Install Now**.
41+
6. Activate the theme after installation.
42+
43+
## Customization
44+
45+
- Use the **Customizer** (Appearance > Customize) to tweak appearance.
46+
47+
## License
48+
49+
This theme is licensed under the **GNU General Public License v2.0 or later**.
50+
51+
```
52+
Copyright (C) 2026 IndoCreativeMedia
53+
54+
This program is free software: you can redistribute it and/or modify
55+
it under the terms of the GNU General Public License as published by
56+
the Free Software Foundation, either version 2 of the License, or
57+
(at your option) any later version.
58+
59+
This program is distributed in the hope that it will be useful,
60+
but WITHOUT ANY WARRANTY; without even the implied warranty of
61+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
62+
GNU General Public License for more details.
63+
64+
You should have received a copy of the GNU General Public License
65+
along with this program. If not, see <https://www.gnu.org/licenses/>.
66+
```
67+
68+
## Credits
69+
70+
* Underscores: https://underscores.me/, (c) Automattic, Inc., https://www.gnu.org/licenses/gpl-2.0.html (GPLv2 or later)
71+
* Bootstrap: https://getbootstrap.com / https://github.com/twbs/bootstrap/blob/master/LICENSE (MIT)
72+
* BS5-Navwalker: https://github.com/imanishpushkar/bs5-navwalker/blob/master/LICENSE.md (MIT)
73+
* Momo Trust Sans: https://github.com/typeassociates/MomoTrustSans?tab=OFL-1.1-1-ov-file (OFL-1.1)
74+
* Default thumbnail image: https://pxhere.com/en/photo/760381 (CC0 Public Domain)
75+
* Image in theme screenshot: https://pxhere.com/en/photo/889309 (CC0 Public Domain)
76+
77+
## Donate
78+
79+
Support us so we can continue improving and creating more valuable resources for everyone.
80+
81+
https://ko-fi.com/indocreativemedia

archive.php

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?php
2+
/**
3+
* The template for displaying archive pages
4+
*
5+
* @link https://developer.wordpress.org/themes/basics/template-hierarchy/
6+
*
7+
* @package Xenaviza
8+
*/
9+
10+
get_header();
11+
?>
12+
13+
<main id="primary" class="site-main col-md-7 col-lg-8 mx-auto">
14+
15+
<?php if ( have_posts() ) : ?>
16+
17+
<header class="page-header pt-1 pb-3 mb-4 border-bottom">
18+
<?php
19+
the_archive_title( '<h1 class="page-title">', '</h1>' );
20+
the_archive_description( '<div class="archive-description">', '</div>' );
21+
?>
22+
</header><!-- .page-header -->
23+
24+
<div class="row">
25+
26+
<?php
27+
/* Start the Loop */
28+
while ( have_posts() ) :
29+
the_post();
30+
31+
/*
32+
* Include the Post-Type-specific template for the content.
33+
* If you want to override this in a child theme, then include a file
34+
* called content-___.php (where ___ is the Post Type name) and that will be used instead.
35+
*/
36+
get_template_part( 'template-parts/content', get_post_type() );
37+
38+
endwhile;
39+
40+
the_posts_navigation(); ?>
41+
42+
</div>
43+
44+
<?php
45+
46+
else :
47+
48+
get_template_part( 'template-parts/content', 'none' );
49+
50+
endif;
51+
?>
52+
53+
</main><!-- #main -->
54+
55+
<?php
56+
get_sidebar();
57+
get_footer();

comments.php

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
<?php
2+
/**
3+
* The template for displaying comments
4+
*
5+
* This is the template that displays the area of the page that contains both the current comments
6+
* and the comment form.
7+
*
8+
* @link https://developer.wordpress.org/themes/basics/template-hierarchy/
9+
*
10+
* @package Xenaviza
11+
*/
12+
13+
/*
14+
* If the current post is protected by a password and
15+
* the visitor has not yet entered the password we will
16+
* return early without loading the comments.
17+
*/
18+
if ( post_password_required() ) {
19+
return;
20+
}
21+
?>
22+
23+
<div id="comments" class="comments-area pt-4 mt-3 border-top">
24+
25+
<?php
26+
// You can start editing here -- including this comment!
27+
if ( have_comments() ) :
28+
?>
29+
<h2 class="comments-title">
30+
<?php
31+
$xenaviza_comment_count = get_comments_number();
32+
if ( '1' === $xenaviza_comment_count ) {
33+
printf(
34+
/* translators: 1: title. */
35+
esc_html__( 'One thought on &ldquo;%1$s&rdquo;', 'xenaviza' ),
36+
'<span>' . wp_kses_post( get_the_title() ) . '</span>'
37+
);
38+
} else {
39+
printf(
40+
/* translators: 1: comment count number, 2: title. */
41+
esc_html( _nx( '%1$s thought on &ldquo;%2$s&rdquo;', '%1$s thoughts on &ldquo;%2$s&rdquo;', $xenaviza_comment_count, 'comments title', 'xenaviza' ) ),
42+
number_format_i18n( $xenaviza_comment_count ), // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
43+
'<span>' . wp_kses_post( get_the_title() ) . '</span>'
44+
);
45+
}
46+
?>
47+
</h2><!-- .comments-title -->
48+
49+
<?php the_comments_navigation(); ?>
50+
51+
<ol class="comment-list">
52+
<?php
53+
wp_list_comments(
54+
array(
55+
'style' => 'ol',
56+
'short_ping' => true,
57+
)
58+
);
59+
?>
60+
</ol><!-- .comment-list -->
61+
62+
<?php
63+
the_comments_navigation();
64+
65+
// If comments are closed and there are comments, let's leave a little note, shall we?
66+
if ( ! comments_open() ) :
67+
?>
68+
<p class="no-comments"><?php esc_html_e( 'Comments are closed.', 'xenaviza' ); ?></p>
69+
<?php
70+
endif;
71+
72+
endif; // Check for have_comments().
73+
74+
comment_form();
75+
?>
76+
77+
</div><!-- #comments -->

css/bootstrap.min.css

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
24.9 KB
Binary file not shown.
24.4 KB
Binary file not shown.

0 commit comments

Comments
 (0)