Release / Build & publish plugin zip (push) Successful in 7s
The social-share buttons function was hooked to projects_after_download_button, but the template never fired that action — the buttons never rendered. Added a do_action() call after the View Repo button. The Follow button hardcoded a GitHub URL and used the GitHub-specific github-button class (which only acts on github.com). Replaced with a plain styled link pointing at the owner's actual URL (works for any provider). Removed the assets/js/buttons.js enqueue since nothing uses the github-button class anymore. Renamed the project-github-button CSS class on the View Repo link to project-repo-button since it's provider-neutral now.
195 lines
8.8 KiB
PHP
195 lines
8.8 KiB
PHP
<?php
|
|
// Check if the theme is an FSE (block theme)
|
|
$is_fse_theme = wp_theme_has_theme_json() && function_exists( 'wp_is_block_theme' ) && wp_is_block_theme();
|
|
|
|
if ( $is_fse_theme ) {
|
|
wp_head();
|
|
echo do_blocks( '<!-- wp:template-part {"slug":"header"} /-->' );
|
|
} else {
|
|
get_header();
|
|
}
|
|
|
|
$settings = projects_portfolio_settings();
|
|
$project_id = get_the_ID();
|
|
$download_count = (int) get_post_meta( $project_id, '_projects_portfolio_download_count', true );
|
|
|
|
$repo_url = get_post_meta( $project_id, '_projects_portfolio_repo_url', true );
|
|
if ( '' === $repo_url ) {
|
|
$repo_url = get_post_meta( $project_id, '_projects_portfolio_github_url', true );
|
|
}
|
|
|
|
$repo_data = projects_portfolio_get_repo_data( $project_id );
|
|
$version = projects_portfolio_get_version( $project_id );
|
|
$owner = projects_portfolio_get_owner( $project_id );
|
|
|
|
$owner_avatar = $repo_data['owner']['avatar_url'] ?? '';
|
|
$owner_name = $repo_data['owner']['login'] ?? '';
|
|
$owner_url = $repo_data['owner']['html_url'] ?? '';
|
|
$last_updated = $repo_data['updated_at'] ?? '';
|
|
$language = $repo_data['language'] ?? '';
|
|
$license = $repo_data['license']['name'] ?? 'None';
|
|
$browse_url = $repo_url ? projects_portfolio_get_repo_browse_url( $project_id ) : '';
|
|
|
|
if ( $last_updated ) {
|
|
$last_updated = date_i18n( get_option( 'date_format' ), strtotime( $last_updated ) );
|
|
}
|
|
?>
|
|
|
|
<body <?php body_class(); ?>>
|
|
|
|
<div class="project-single-container">
|
|
<div class="project-header">
|
|
<div class="project-banner">
|
|
<?php if ( has_post_thumbnail() ) : ?>
|
|
<?php the_post_thumbnail( 'full' ); ?>
|
|
<?php else : ?>
|
|
<img src="<?php echo esc_url( plugin_dir_url( __FILE__ ) . 'assets/images/placeholder-banner.jpg' ); ?>" alt="<?php esc_attr_e( 'Project Banner', 'projects-wp' ); ?>">
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="project-main-content">
|
|
<div class="project-description">
|
|
<h1 class="project-title">
|
|
<?php
|
|
do_action( 'projects_portfolio_single_title_before' );
|
|
the_title();
|
|
do_action( 'projects_portfolio_single_title_after' );
|
|
?>
|
|
</h1>
|
|
<?php
|
|
do_action( 'projects_portfolio_single_content_before' );
|
|
the_content();
|
|
do_action( 'projects_portfolio_single_content_after' );
|
|
?>
|
|
</div>
|
|
<div class="project-sidebar">
|
|
<div class="project-buttons">
|
|
<a href="<?php echo esc_url( site_url( '/download/' . $project_id ) ); ?>" class="button project-download-button">
|
|
<?php esc_html_e( 'Download Now', 'projects-wp' ); ?>
|
|
</a>
|
|
<?php if ( $repo_url ) : ?>
|
|
<a href="<?php echo esc_url( $browse_url ); ?>" class="button project-repo-button" target="_blank" rel="noopener noreferrer">
|
|
<?php esc_html_e( 'View Repo', 'projects-wp' ); ?>
|
|
</a>
|
|
<?php else : ?>
|
|
<p><?php esc_html_e( 'Repository:', 'projects-wp' ); ?> <?php esc_html_e( 'No repository linked.', 'projects-wp' ); ?></p>
|
|
<?php endif; ?>
|
|
<?php do_action( 'projects_after_download_button', $project_id ); ?>
|
|
</div>
|
|
|
|
<div class="project-meta">
|
|
<?php
|
|
do_action( 'projects_portfolio_single_meta_before' );
|
|
?>
|
|
<table class="project-meta-table">
|
|
<tbody>
|
|
<?php if ( $settings['templates']['version'] ) : ?>
|
|
<tr>
|
|
<th><?php esc_html_e( 'Version:', 'projects-wp' ); ?></th>
|
|
<td><?php esc_html_e( $version ); ?></td>
|
|
</tr>
|
|
<?php endif; ?>
|
|
<?php if ( $settings['templates']['last_updated'] && $last_updated ) : ?>
|
|
<tr>
|
|
<th><?php esc_html_e( 'Updated:', 'projects-wp' ); ?></th>
|
|
<td><?php esc_html_e( $last_updated ); ?></td>
|
|
</tr>
|
|
<?php endif; ?>
|
|
<?php if ( $settings['templates']['license'] && $license ) : ?>
|
|
<tr>
|
|
<th><?php esc_html_e( 'License:', 'projects-wp' ); ?></th>
|
|
<td><?php esc_html_e( $license ); ?></td>
|
|
</tr>
|
|
<?php endif; ?>
|
|
<?php if ( $settings['templates']['language'] && $language ) : ?>
|
|
<tr>
|
|
<th><?php esc_html_e( 'Language:', 'projects-wp' ); ?></th>
|
|
<td><?php esc_html_e( $language ); ?></td>
|
|
</tr>
|
|
<?php endif; ?>
|
|
<?php if ( $settings['templates']['downloads'] ) : ?>
|
|
<tr>
|
|
<th><?php esc_html_e( 'Downloads:', 'projects-wp' ); ?></th>
|
|
<td><?php esc_html_e( $download_count ); ?></td>
|
|
</tr>
|
|
<?php endif; ?>
|
|
<?php
|
|
if ( ! empty( $repo_data ) ) :
|
|
if ( isset( $repo_data['stargazers_count'] ) && $settings['templates']['stargazers_count'] ) : ?>
|
|
<tr>
|
|
<th><?php esc_html_e( 'Stars:', 'projects-wp' ); ?></th>
|
|
<td><?php esc_html_e( $repo_data['stargazers_count'] ); ?></td>
|
|
</tr>
|
|
<?php endif;
|
|
if ( isset( $repo_data['forks_count'] ) && $settings['templates']['forks'] ) : ?>
|
|
<tr>
|
|
<th><?php esc_html_e( 'Forks:', 'projects-wp' ); ?></th>
|
|
<td><?php esc_html_e( $repo_data['forks_count'] ); ?></td>
|
|
</tr>
|
|
<?php endif;
|
|
if ( isset( $repo_data['open_issues_count'] ) && $settings['templates']['open_issues_count'] ) : ?>
|
|
<tr>
|
|
<th><?php esc_html_e( 'Issues:', 'projects-wp' ); ?></th>
|
|
<td><?php esc_html_e( $repo_data['open_issues_count'] ); ?></td>
|
|
</tr>
|
|
<?php endif;
|
|
endif;
|
|
?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<?php if ( $settings['templates']['github_owner'] && $owner_avatar && $owner_name ) : ?>
|
|
<a href="<?php echo esc_url( $browse_url ); ?>">
|
|
<div class="project-owner">
|
|
<span>
|
|
<img src="<?php echo esc_url( $owner_avatar ); ?>" alt="<?php esc_attr_e( $owner_name ); ?>" class="owner-avatar" style="width: 50px; height: 50px; border-radius: 50%;" />
|
|
</span>
|
|
<span>
|
|
<strong>
|
|
<a href="<?php echo esc_url( $owner_url ); ?>" target="_blank" rel="noopener noreferrer"><?php esc_html_e( $owner_name ); ?></a>
|
|
</strong>
|
|
</span>
|
|
<span>
|
|
<a class="button project-follow-button" href="<?php echo esc_url( $owner_url ); ?>" target="_blank" rel="noopener noreferrer"><?php esc_html_e( 'Follow', 'projects-wp' ); ?></a>
|
|
</span>
|
|
</div>
|
|
<?php endif; ?>
|
|
<?php
|
|
do_action( 'projects_portfolio_single_meta_after' );
|
|
?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<?php
|
|
if ( $is_fse_theme ) {
|
|
wp_footer();
|
|
echo do_blocks( '<!-- wp:template-part {"slug":"footer"} /-->' );
|
|
} else {
|
|
get_footer();
|
|
}
|
|
?>
|
|
</body>
|
|
|
|
<?php
|
|
|
|
/**
|
|
* Enqueues theme styles specifically for single and archive pages of the "projects" post type.
|
|
*
|
|
* @since 1.0.0
|
|
* @return void
|
|
*/
|
|
function projects_portfolio_enqueue_theme_styles() {
|
|
if ( is_singular( 'projects' ) || is_post_type_archive( 'projects' ) ) {
|
|
// Enqueue the theme's main stylesheet.
|
|
wp_enqueue_style( 'theme-style', get_stylesheet_uri() );
|
|
|
|
// Enqueue additional theme styles if needed.
|
|
wp_enqueue_style( 'theme-header-style', get_template_directory_uri() . '/css/header.css' );
|
|
wp_enqueue_style( 'theme-footer-style', get_template_directory_uri() . '/css/footer.css' );
|
|
}
|
|
}
|
|
add_action( 'wp_enqueue_scripts', 'projects_portfolio_enqueue_theme_styles' );
|