Make WordPress Themes

Changeset 356013


Ignore:
Timestamp:
10/28/2026 06:02:03 PM (20 hours ago)
Author:
themedropbox
Message:

New version of MagazineNewsPortal - 1.0.137

Location:
magazinenewsportal/1.0.137
Files:
2 added
19 edited
1 copied

Legend:

Unmodified
Added
Removed
  • magazinenewsportal/1.0.137/ASSET-LICENSES.txt

    r352465 r356013  
    1 MagazineNewsPortal 1.0.135 - Complete bundled resource inventory
     1MagazineNewsPortal 1.0.137 - Complete bundled resource inventory
    22
    33Original theme material: Copyright (C) 2026 yineali; GPL-2.0-or-later.
    44Compatible third-party notices and sources remain as listed below.
    5 Free distribution by the author does not remove recipients' GPL rights.
     5Screenshot provenance: GPT (OpenAI ChatGPT), confirmed by the owner on 2026-10-28.
     6The existing GPL screenshot permission is retained; CC0 authorization is pending.
    67
    78PATH | LICENSE | COPYRIGHT/ATTRIBUTION | SOURCE/NOTICE
    89404.php | GPL-2.0-or-later | 2026 yineali | Editable files in this package; COPYRIGHT.txt / LICENSE.txt
    910archive.php | GPL-2.0-or-later | 2026 yineali | Editable files in this package; COPYRIGHT.txt / LICENSE.txt
     11ASSET-LICENSES.txt | GPL-2.0-or-later | 2026 yineali | This editable inventory
     12assets/css/accessibility.css | GPL-2.0-or-later | 2026 yineali | Editable files in this package; COPYRIGHT.txt / LICENSE.txt
    1013assets/css/cards-v109.css | GPL-2.0-or-later | 2026 yineali | Editable files in this package; COPYRIGHT.txt / LICENSE.txt
    1114assets/css/cards-v110.css | GPL-2.0-or-later | 2026 yineali | Editable files in this package; COPYRIGHT.txt / LICENSE.txt
    … …  
    4144assets/css/layout.css | GPL-2.0-or-later | 2026 yineali | Editable files in this package; COPYRIGHT.txt / LICENSE.txt
    4245assets/css/main.css | GPL-2.0-or-later | 2026 yineali | Editable files in this package; COPYRIGHT.txt / LICENSE.txt
     46assets/css/navigation.css | GPL-2.0-or-later | 2026 yineali | Editable files in this package; COPYRIGHT.txt / LICENSE.txt
    4347assets/css/review-fixes.css | GPL-2.0-or-later | 2026 yineali | Editable files in this package; COPYRIGHT.txt / LICENSE.txt
    4448assets/css/typography-v113.css | GPL-2.0-or-later | 2026 yineali | Editable files in this package; COPYRIGHT.txt / LICENSE.txt
    … …  
    150154template-parts/content-page.php | GPL-2.0-or-later | 2026 yineali | Editable files in this package; COPYRIGHT.txt / LICENSE.txt
    151155theme.json | GPL-2.0-or-later | 2026 yineali | Editable files in this package; COPYRIGHT.txt / LICENSE.txt
    152 ASSET-LICENSES.txt | GPL-2.0-or-later | 2026 yineali | This editable inventory
    153156
    154157Inline SVG artwork in PHP and CSS uses the compatible Lucide/Feather and
  • magazinenewsportal/1.0.137/COPYRIGHT.txt

    r352465 r356013  
    1 MagazineNewsPortal 1.0.135
     1MagazineNewsPortal 1.0.137
    22Copyright (C) 2026 yineali.
    33
    … …  
    1313Compatible third-party assets retain their notices and original CC0/MIT/ISC
    1414licenses. Their underlying rights are not claimed as original theme artwork.
    15 The owner expressly authorized GPL distribution of their screenshot photographs.
     15The owner confirmed on 2026-10-28 that the screenshot's photographic-style
     16illustrations were generated using GPT (OpenAI ChatGPT). The supplied composite's
     17existing GPL distribution permission is retained; no new CC0 dedication is claimed.
    1618WordPress site uploads and third-party content outside the ZIP are separate.
    1719
  • magazinenewsportal/1.0.137/assets/images/LICENSE-screenshot.txt

    r352465 r356013  
    55Source: the owner-supplied screenshot.png in the theme root, supplied on 2026-10-08.
    66SHA-256: c6d5272cd7a8d2a9ec518fe0db339fe1178019b552c2240e253e26cedf9bdf56
    7 The owner authorized free GPLv2-or-later distribution of the original photographs,
    8 composite screenshot and original branding created by or for the owner.
    9 This notice records that authorization; it does not replace third-party licenses.
     7Provenance clarification confirmed by the owner on 2026-10-28:
     8The photographic-style illustrations visible in this preview were generated
     9using GPT (OpenAI ChatGPT). They are AI-generated illustrations, not camera
     10photographs. The provided 1.0.136 package carried an owner-authorized
     11GPLv2-or-later distribution notice for the composite and original artwork.
     12That existing permission is preserved. This notice does not assert a new
     13public-domain/CC0 dedication without the owner's authorization and does not
     14replace the third-party licenses listed below.
    1015Simple Icons graphics shown in the interface retain CC0-1.0; Bootstrap graphics
    1116retain MIT; Lucide/Feather graphics retain ISC/MIT. Full sources and notices are
  • magazinenewsportal/1.0.137/assets/images/screenshot-source.txt

    r352465 r356013  
    11MagazineNewsPortal owner-supplied preview
     2Image creation: the owner confirmed on 2026-10-28 that the photographic-style
     3illustrations in the preview were generated using GPT (OpenAI ChatGPT).
     4They are AI-generated illustrations, not camera photographs or stock images.
    25Source: screenshot.png, provided by the owner on 2026-10-08.
    36Preserved without resizing, recompressing, substituting or editing its images.
  • magazinenewsportal/1.0.137/assets/js/main.js

    r352465 r356013  
    3838  const menuToggle = document.querySelector('.mnpn-menu-toggle-review');
    3939  if (nav && menuToggle) {
    40     const setMenuOpen = (open) => {
     40    const mobileMenu = window.matchMedia('(max-width: 980px)');
     41    const menuClose = nav.querySelector('.mnpn-menu-close');
     42    const menuDialog = nav.closest('.mnpn-menu-dialog');
     43    const backdrop = document.querySelector('[data-mnpn-menu-backdrop]');
     44    const backgroundElements = [];
     45    const focusableElements = () => Array.from(nav.querySelectorAll(
     46      'a[href], button, input, select, textarea, summary, [tabindex]'
     47    )).filter((element) => element.tabIndex >= 0 && !element.disabled &&
     48      !element.closest('[hidden], [inert]') && element.getClientRects().length &&
     49      window.getComputedStyle(element).visibility !== 'hidden');
     50    const restoreBackground = () => {
     51      backgroundElements.forEach(([element, wasInert]) => { element.inert = wasInert; });
     52      backgroundElements.length = 0;
     53    };
     54    const setMenuOpen = (requestedOpen, returnFocus = false) => {
     55      const open = requestedOpen && mobileMenu.matches;
    4156      nav.classList.toggle('mnpn-menu-expanded', open);
    4257      menuToggle.setAttribute('aria-expanded', String(open));
    43     };
    44     const menuClose = nav.querySelector('.mnpn-menu-close');
    45     if (menuClose) menuClose.addEventListener('click', () => {
    46       setMenuOpen(false);
    47       menuToggle.focus();
    48     });
     58      document.body.classList.toggle('mnpn-menu-modal-open', open);
     59      if (backdrop) backdrop.hidden = !open;
     60      restoreBackground();
     61      if (open) {
     62        menuDialog.setAttribute('role', 'dialog');
     63        menuDialog.setAttribute('aria-modal', 'true');
     64        menuDialog.setAttribute('aria-label', nav.getAttribute('aria-label'));
     65        // Keep the dialog's ancestor chain usable while disabling its siblings.
     66        let branch = nav;
     67        while (branch && branch !== document.body) {
     68          const parent = branch.parentElement;
     69          if (!parent) break;
     70          Array.from(parent.children).forEach((element) => {
     71            if (element !== branch && element !== backdrop && 'inert' in element) {
     72              backgroundElements.push([element, element.inert]);
     73              element.inert = true;
     74            }
     75          });
     76          branch = parent;
     77        }
     78        const first = focusableElements()[0];
     79        if (first) first.focus();
     80      } else {
     81        menuDialog.removeAttribute('role');
     82        menuDialog.removeAttribute('aria-modal');
     83        menuDialog.removeAttribute('aria-label');
     84        if (returnFocus) menuToggle.focus();
     85      }
     86    };
     87    if (menuClose) menuClose.addEventListener('click', () => setMenuOpen(false, true));
     88    if (backdrop) backdrop.addEventListener('click', () => setMenuOpen(false, true));
    4989    menuToggle.addEventListener('click', () => {
    5090      setMenuOpen(menuToggle.getAttribute('aria-expanded') !== 'true');
    5191    });
    5292    nav.addEventListener('keydown', (event) => {
    53       if (event.key === 'Escape' && window.innerWidth <= 980) {
    54         setMenuOpen(false);
    55         menuToggle.focus();
    56       }
    57     });
     93      if (!mobileMenu.matches || !nav.classList.contains('mnpn-menu-expanded')) return;
     94      if (event.key === 'Escape') {
     95        event.preventDefault();
     96        setMenuOpen(false, true);
     97      } else if (event.key === 'Tab') {
     98        const elements = focusableElements();
     99        const first = elements[0];
     100        const last = elements[elements.length - 1];
     101        if (event.shiftKey && document.activeElement === first) {
     102          event.preventDefault();
     103          last.focus();
     104        } else if (!event.shiftKey && document.activeElement === last) {
     105          event.preventDefault();
     106          first.focus();
     107        }
     108      }
     109    });
     110    document.addEventListener('focusin', (event) => {
     111      if (mobileMenu.matches && nav.classList.contains('mnpn-menu-expanded') && !nav.contains(event.target)) {
     112        const first = focusableElements()[0];
     113        if (first) first.focus();
     114      }
     115    });
     116    const resetMenu = () => {
     117      const hadMenuFocus = nav.contains(document.activeElement);
     118      setMenuOpen(false);
     119      if (hadMenuFocus) {
     120        const target = mobileMenu.matches ? menuToggle : nav.querySelector('.mnpn-nav-list a');
     121        if (target) target.focus();
     122      }
     123    };
     124    mobileMenu.addEventListener('change', resetMenu);
     125    window.addEventListener('pagehide', () => setMenuOpen(false));
    58126  }
    59127  const headerSearch = document.querySelector('.mnpn-header-search .mnpn-search-form input[type="search"]');
    … …  
    69137  document.addEventListener('keydown', (event) => {
    70138    if (!headerSearch) return;
     139    if (nav && nav.classList.contains('mnpn-menu-expanded')) return;
    71140
    72141    const wantsCommandSearch = (event.key && event.key.toLowerCase() === 'k' && (event.metaKey || event.ctrlKey));
    … …  
    153222    });
    154223    extra.addEventListener('pointerleave', () => {
    155       if (desktopMenu.matches) setExtraOpen(false);
     224      if (desktopMenu.matches && !extra.contains(document.activeElement)) setExtraOpen(false);
    156225    });
    157226    extraButton.addEventListener('click', () => setExtraOpen(extraList.hidden));
    … …  
    341410    link.addEventListener('focus', () => link.setAttribute('aria-expanded', 'true'));
    342411    parent.addEventListener('mouseenter', () => link.setAttribute('aria-expanded', 'true'));
    343     parent.addEventListener('mouseleave', () => link.setAttribute('aria-expanded', 'false'));
     412    parent.addEventListener('mouseleave', () => {
     413      if (!parent.contains(document.activeElement)) link.setAttribute('aria-expanded', 'false');
     414    });
    344415    parent.addEventListener('focusout', (event) => {
    345416      if (!parent.contains(event.relatedTarget)) link.setAttribute('aria-expanded', 'false');
  • magazinenewsportal/1.0.137/changelog.txt

    r352621 r356013  
     1MagazineNewsPortal 1.0.137 - 2026-10-28
     2
     3= 1.0.137 =
     4* Confined mobile-menu keyboard focus, focused the close control on open, and restored focus on close.
     5* Added dialog semantics, inert background, backdrop dismissal, scroll lock and responsive cleanup.
     6* Preserved desktop overflow-menu visibility while it contains keyboard focus.
     7* Provided a usable primary menu without JavaScript.
     8* Respected static front-page selection, including empty, password-protected and paginated pages.
     9* Rendered latest posts using the main WordPress query and native post-count/pagination/sticky behavior.
     10* Respected user-configured sidebar widget visibility/order and category post counts.
     11* Rendered the site's own copyright in the footer instead of forced advertising keywords.
     12* Clarified copyright, GPL terms and screenshot provenance; left Author URI unchanged.
     13* Improved light/dark small-text contrast, search landmark names, related-card labels and narrow search forms.
     14* Omitted empty author-name links without changing author URL generation or destinations.
     15
    116MagazineNewsPortal 1.0.136 - 2026-10-08
    217
  • magazinenewsportal/1.0.137/front-page.php

    r352465 r356013  
    1212}
    1313
    14 get_header();
    15 
    16 $magazinenewsportal_is_static_front  = 'page' === get_option( 'show_on_front' );
    17 $magazinenewsportal_current_page     = max( 1, absint( get_query_var( 'paged' ) ), absint( get_query_var( 'page' ) ) );
    18 $magazinenewsportal_posts_per_page   = max( 4, absint( get_option( 'posts_per_page', 10 ) ) );
    19 $magazinenewsportal_published_counts = wp_count_posts( 'post' );
    20 $magazinenewsportal_published_total  = isset( $magazinenewsportal_published_counts->publish ) ? absint( $magazinenewsportal_published_counts->publish ) : 0;
    21 $magazinenewsportal_posts_page_id    = absint( get_option( 'page_for_posts' ) );
    22 $magazinenewsportal_all_posts_url    = $magazinenewsportal_posts_page_id ? get_permalink( $magazinenewsportal_posts_page_id ) : home_url( '/' );
    23 
    24 if ( ! $magazinenewsportal_all_posts_url ) {
    25         $magazinenewsportal_all_posts_url = home_url( '/' );
     14// A selected static page must render its own content, including an empty page.
     15if ( ! is_home() ) {
     16        get_template_part( 'page' );
     17        return;
    2618}
    2719
    28 $magazinenewsportal_agenda_query = new WP_Query(
    29         array(
    30                 'post_type'           => 'post',
    31                 'post_status'         => 'publish',
    32                 'posts_per_page'      => $magazinenewsportal_posts_per_page,
    33                 'paged'               => $magazinenewsportal_current_page,
    34                 'orderby'             => 'date',
    35                 'order'               => 'DESC',
    36                 'ignore_sticky_posts' => true,
    37         )
    38 );
     20get_header();
     21global $wp_query;
     22$magazinenewsportal_current_page    = max( 1, absint( get_query_var( 'paged' ) ), absint( get_query_var( 'page' ) ) );
     23$magazinenewsportal_agenda_query    = $wp_query;
     24$magazinenewsportal_published_total = absint( $wp_query->found_posts );
    3925
    4026?>
    4127<main id="primary" tabindex="-1" class="mnpn-main mnpn-home-main mnpn-agenda-home">
    42         <?php
    43         $magazinenewsportal_has_front_page_intro = false;
    44         if ( $magazinenewsportal_is_static_front && have_posts() ) {
    45                 while ( have_posts() ) {
    46                         the_post();
    47                         $magazinenewsportal_front_page_content = (string) get_post_field( 'post_content', get_the_ID() );
    48                         if ( '' !== trim( $magazinenewsportal_front_page_content ) || has_post_thumbnail() ) {
    49                                 $magazinenewsportal_has_front_page_intro = true;
    50                                 get_template_part( 'template-parts/content', 'page', array( 'compact_front_page' => true ) );
    51                         }
    52                 }
    53         }
    54         ?>
    55         <?php if ( ! $magazinenewsportal_has_front_page_intro ) : ?>
    56                 <h1 class="screen-reader-text"><?php echo esc_html( get_bloginfo( 'name' ) ); ?></h1>
    57         <?php endif; ?>
     28        <h1 class="screen-reader-text"><?php echo esc_html( get_bloginfo( 'name' ) ); ?></h1>
    5829
    5930        <section class="mnpn-agenda-section" aria-labelledby="mnpn-agenda-title">
  • magazinenewsportal/1.0.137/functions.php

    r352621 r356013  
    1212}
    1313
    14 define( 'MAGAZINENEWSPORTAL_VERSION', '1.0.136' );
     14define( 'MAGAZINENEWSPORTAL_VERSION', '1.0.137' );
    1515define( 'MAGAZINENEWSPORTAL_DIR', get_template_directory() );
    1616
  • magazinenewsportal/1.0.137/header.php

    r352465 r356013  
    154154                                                <strong><?php esc_html_e( 'Trends', 'magazinenewsportal' ); ?></strong>
    155155                                        </a>
    156                                         <a class="mnpn-ref-quicklink mnpn-ref-popular" href="<?php echo esc_url( home_url( '/#mnpn-agenda-title' ) ); ?>">
     156                                        <a class="mnpn-ref-quicklink mnpn-ref-popular" href="<?php echo esc_url( $magazinenewsportal_shortcut_urls['posts'] ); ?>">
    157157                                                <span class="mnpn-ref-quick-icon" aria-hidden="true"><?php magazinenewsportal_icon( 'flame' ); ?></span>
    158158                                                <strong><?php esc_html_e( 'Popular', 'magazinenewsportal' ); ?></strong>
    159159                                        </a>
    160                                         <a class="mnpn-ref-quicklink mnpn-ref-newest" href="<?php echo esc_url( home_url( '/#mnpn-agenda-title' ) ); ?>">
     160                                        <a class="mnpn-ref-quicklink mnpn-ref-newest" href="<?php echo esc_url( $magazinenewsportal_shortcut_urls['posts'] ); ?>">
    161161                                                <span class="mnpn-ref-quick-icon" aria-hidden="true"><?php magazinenewsportal_icon( 'clock' ); ?></span>
    162162                                                <strong><?php esc_html_e( 'Recently Added', 'magazinenewsportal' ); ?></strong>
    … …  
    173173                                                <span><?php esc_html_e( 'Menu', 'magazinenewsportal' ); ?></span>
    174174                                        </button>
     175                                        <div class="mnpn-menu-dialog">
    175176                                        <nav id="site-navigation" class="mnpn-primary-nav mnpn-ref-primary" aria-label="<?php esc_attr_e( 'Primary menu', 'magazinenewsportal' ); ?>">
    176177                                                <button class="mnpn-icon-button mnpn-menu-close" type="button">
    … …  
    196197                                                </div>
    197198                                        </nav>
     199                                        </div>
    198200                                </div>
    199201                                <div class="mnpn-nav-backdrop" data-mnpn-menu-backdrop hidden aria-hidden="true"></div>
  • magazinenewsportal/1.0.137/inc/setup.php

    r352465 r356013  
    123123add_action( 'after_setup_theme', 'magazinenewsportal_content_width', 0 );
    124124
    125 
    126 /**
    127  * Keep category archive pagination at ten posts per page.
    128  *
    129  * @param WP_Query $query WordPress query instance.
    130  * @return void
    131  */
    132 function magazinenewsportal_category_posts_per_page( $query ) {
    133         if ( is_admin() || ! $query->is_main_query() || ! $query->is_category() ) {
    134                 return;
    135         }
    136 
    137         $query->set( 'posts_per_page', 10 );
    138 }
    139 add_action( 'pre_get_posts', 'magazinenewsportal_category_posts_per_page' );
    140125
    141126/**
    … …  
    169154
    170155/**
    171  * Keep search widgets out of the primary sidebar frontend.
    172  *
    173  * The widget remains registered and editable in WordPress; only its public
    174  * sidebar output is suppressed.
    175  *
    176  * @param array|false $instance Widget settings, or false to hide it.
    177  * @param WP_Widget   $widget   Widget object.
    178  * @param array       $args     Sidebar arguments.
    179  * @return array|false
    180  */
    181 function magazinenewsportal_hide_primary_sidebar_search( $instance, $widget, $args ) {
    182         if ( 'primary-sidebar' !== ( $args['id'] ?? '' ) ) {
    183                 return $instance;
    184         }
    185 
    186         $is_search_widget = 'search' === $widget->id_base;
    187         $is_search_block  = 'block' === $widget->id_base
    188                 && ! empty( $instance['content'] )
    189                 && has_block( 'core/search', $instance['content'] );
    190 
    191         return ( $is_search_widget || $is_search_block ) ? false : $instance;
    192 }
    193 add_filter( 'widget_display_callback', 'magazinenewsportal_hide_primary_sidebar_search', 10, 3 );
    194 
    195 /**
    196  * Keep categories directly above archives in the primary sidebar.
    197  *
    198  * The widget IDs remain untouched so WordPress can continue managing both
    199  * blocks normally; only their public display order is adjusted.
    200  *
    201  * @param array $sidebars Registered sidebar widget IDs.
    202  * @return array
    203  */
    204 function magazinenewsportal_order_primary_sidebar_sections( $sidebars ) {
    205         if ( is_admin() || empty( $sidebars['primary-sidebar'] ) || ! is_array( $sidebars['primary-sidebar'] ) ) {
    206                 return $sidebars;
    207         }
    208 
    209         $block_widgets = get_option( 'widget_block', array() );
    210         $categories    = array();
    211         $archives      = array();
    212 
    213         foreach ( $sidebars['primary-sidebar'] as $widget_id ) {
    214                 if ( ! preg_match( '/^block-(\d+)$/', $widget_id, $matches ) ) {
    215                         continue;
    216                 }
    217 
    218                 $content = $block_widgets[ absint( $matches[1] ) ]['content'] ?? '';
    219                 if ( has_block( 'core/categories', $content ) ) {
    220                         $categories[] = $widget_id;
    221                 } elseif ( has_block( 'core/archives', $content ) ) {
    222                         $archives[] = $widget_id;
    223                 }
    224         }
    225 
    226         if ( empty( $categories ) || empty( $archives ) ) {
    227                 return $sidebars;
    228         }
    229 
    230         $moved   = array_merge( $categories, $archives );
    231         $ordered = $categories;
    232 
    233         foreach ( $sidebars['primary-sidebar'] as $widget_id ) {
    234                 if ( in_array( $widget_id, $moved, true ) ) {
    235                         continue;
    236                 }
    237 
    238                 $ordered[] = $widget_id;
    239         }
    240 
    241         $ordered = array_merge( $ordered, $archives );
    242 
    243         $sidebars['primary-sidebar'] = $ordered;
    244         return $sidebars;
    245 }
    246 add_filter( 'sidebars_widgets', 'magazinenewsportal_order_primary_sidebar_sections' );
    247 
    248 /**
    249156 * Return a file modification time for cache busting.
    250157 *
    … …  
    416323        }
    417324
     325        wp_enqueue_style(
     326                'magazinenewsportal-navigation',
     327                get_theme_file_uri( 'assets/css/navigation.css' ),
     328                array( 'magazinenewsportal-layout' ),
     329                magazinenewsportal_asset_version( 'assets/css/navigation.css' )
     330        );
     331        wp_enqueue_style(
     332                'magazinenewsportal-accessibility',
     333                get_theme_file_uri( 'assets/css/accessibility.css' ),
     334                array( 'magazinenewsportal-navigation' ),
     335                magazinenewsportal_asset_version( 'assets/css/accessibility.css' )
     336        );
     337
    418338        wp_enqueue_script(
    419339                'magazinenewsportal-main',
  • magazinenewsportal/1.0.137/inc/template-tags.php

    r352465 r356013  
    102102 */
    103103function magazinenewsportal_get_header_shortcut_urls() {
    104         $options       = magazinenewsportal_get_options();
    105         $posts_page_id = absint( get_option( 'page_for_posts' ) );
    106         $posts_url     = ( $posts_page_id && 'page' === get_option( 'show_on_front' ) && 'publish' === get_post_status( $posts_page_id ) ) ? get_permalink( $posts_page_id ) : home_url( '/' ) . '#latest';
    107         $posts_url     = $posts_url ? $posts_url : home_url( '/' ) . '#latest';
     104        $options   = magazinenewsportal_get_options();
     105        $posts_url = magazinenewsportal_get_posts_url();
    108106
    109107        return array(
     108                'posts'       => $posts_url,
    110109                'inspiration' => magazinenewsportal_get_category_url( $options['header_inspiration_category'], $posts_url ),
    111110                'editor'      => magazinenewsportal_get_category_url( $options['header_editor_category'], $posts_url ),
    112111                'trends'      => magazinenewsportal_get_category_url( $options['header_trends_category'], $posts_url ),
    113112        );
     113}
     114
     115/**
     116 * Return a working posts destination for the current Reading settings.
     117 *
     118 * @return string Posts index URL.
     119 */
     120function magazinenewsportal_get_posts_url() {
     121        if ( 'page' === get_option( 'show_on_front' ) ) {
     122                $posts_page_id = absint( get_option( 'page_for_posts' ) );
     123                if ( $posts_page_id && 'publish' === get_post_status( $posts_page_id ) ) {
     124                        $posts_url = get_permalink( $posts_page_id );
     125                        if ( $posts_url ) {
     126                                return $posts_url;
     127                        }
     128                }
     129                return add_query_arg( 'post_type', 'post', home_url( '/' ) );
     130        }
     131        return home_url( '/' ) . '#mnpn-agenda-title';
    114132}
    115133
    … …  
    693711
    694712        $posts_page_id = absint( get_option( 'page_for_posts' ) );
    695         if ( $posts_page_id && 'publish' === get_post_status( $posts_page_id ) ) {
     713        if ( 'page' === get_option( 'show_on_front' ) && $posts_page_id && 'publish' === get_post_status( $posts_page_id ) ) {
    696714                $links[] = array(
    697715                        'label' => __( 'Blog', 'magazinenewsportal' ),
    … …  
    750768 */
    751769function magazinenewsportal_footer_credit_link() {
    752         echo '<span class="mnpn-footer-credit-text">© ' . (int) wp_date( 'Y' ) . ' <a class="mnpn-footer-credit-link" href="https://narya.tr/" target="_blank" rel="noopener noreferrer">köpek maması &amp; kedi maması</a>. ' . esc_html__( 'All rights reserved.', 'magazinenewsportal' ) . '</span>';
     770        echo '<span class="mnpn-footer-credit-text">© ' . (int) wp_date( 'Y' ) . ' <a class="mnpn-footer-credit-link" href="' . esc_url( home_url( '/' ) ) . '">' . esc_html( get_bloginfo( 'name' ) ) . '</a>. ' . esc_html__( 'All rights reserved.', 'magazinenewsportal' ) . '</span>';
    753771}
    754772add_action( 'magazinenewsportal_footer_credit', 'magazinenewsportal_footer_credit_link' );
    … …  
    898916        }
    899917
    900         $posts_page_id = absint( get_option( 'page_for_posts' ) );
    901         $all_posts_url = $posts_page_id ? get_permalink( $posts_page_id ) : home_url( '/' );
    902         if ( ! $all_posts_url ) {
    903                 $all_posts_url = home_url( '/' );
    904         }
     918        $all_posts_url = magazinenewsportal_get_posts_url();
    905919        ?>
    906920        <section class="widget mnpn-widget mnpn-sidebar-editor-choice">
  • magazinenewsportal/1.0.137/languages/magazinenewsportal.pot

    r352465 r356013  
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: MagazineNewsPortal 1.0.99\n"
     5"Project-Id-Version: MagazineNewsPortal 1.0.137\n"
    66"Report-Msgid-Bugs-To: https://wordpress.org/support/theme/magazinenewsportal\n"
    77"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
    … …  
    10331033msgid "Comments on this story are password protected."
    10341034msgstr ""
     1035
     1036#: template-parts/agenda-sidebar.php
     1037msgid "Sidebar search"
     1038msgstr ""
  • magazinenewsportal/1.0.137/languages/tr_TR.po

    r352465 r356013  
    22msgid ""
    33msgstr ""
    4 "Project-Id-Version: MagazineNewsPortal 1.0.135\n"
     4"Project-Id-Version: MagazineNewsPortal 1.0.137\n"
    55"Report-Msgid-Bugs-To: https://wordpress.org/support/theme/magazinenewsportal/\n"
    66"POT-Creation-Date: 2026-09-23 11:45+0000\n"
    … …  
    10581058msgid "Comments on this story are password protected."
    10591059msgstr "Bu içeriğin yorumları parola korumalıdır."
     1060
     1061#: template-parts/agenda-sidebar.php
     1062msgid "Sidebar search"
     1063msgstr "Kenar çubuğu araması"
  • magazinenewsportal/1.0.137/readme.txt

    r352621 r356013  
    11=== MagazineNewsPortal ===
    22Contributors: yineali
     3Stable tag: 1.0.137
    34Requires at least: 6.6
    45Tested up to: 7.1
    … …  
    25263. Configure menus, widgets and presentation options using WordPress settings.
    26274. Set the front page and posts page under Settings > Reading.
     28
     29== Front page and posts page ==
     30With "Your latest posts", the front page displays the news layout using the
     31native WordPress main query, posts-per-page setting, sticky posts and pagination.
     32With "A static page", the selected front page displays its own title, content,
     33featured image, page links and comments. No news feed is appended to that page.
     34The selected posts page uses home.php and the native posts loop. Its page body
     35is not displayed, as required by WordPress. Empty static pages remain pages.
     36Category archives also respect the WordPress posts-per-page setting.
     37
     38== Keyboard navigation ==
     39The first keyboard link skips the header and focuses the main content. On small
     40screens, opening the menu focuses its close button. Tab from the last menu link
     41returns to that button; Shift+Tab from the button returns to the last menu link.
     42Escape, the close button and the backdrop close the dialog and restore focus to
     43the menu opener. The rest of the page is inert while the mobile menu is open.
     44Changing between mobile and desktop clears the modal state and scroll lock.
     45The desktop More disclosure supports Enter, Space, ArrowDown, Tab and Escape.
     46The primary menu remains available when JavaScript is disabled.
    2747
    2848== Presentation ==
    … …  
    4363The .pot file is the translation template. WordPress Site Language selects the
    4464catalogue. Posts, pages, categories, menu labels and custom widget content are
    45 site content and require their own translation. The local edition retains the
    46 site owner's expressly requested literal Turkish footer keywords.
     65site content and require their own translation.
    4766
    4867== Security and native WordPress APIs ==
    … …  
    7796== Copyright and License ==
    7897MagazineNewsPortal WordPress Theme, Copyright (C) 2026 yineali.
     98MagazineNewsPortal is distributed under the terms of the GNU GPL v2 or later.
    7999Code, documentation, translations and original theme artwork: GPLv2 or later.
    80100Copyright and complete file inventory: COPYRIGHT.txt and ASSET-LICENSES.txt.
    … …  
    82102Use, modification and redistribution, including commercial use, are permitted.
    83103Third-party assets retain their original compatible licenses below.
     104This program is free software: you may redistribute it and/or modify it under
     105the GNU General Public License as published by the Free Software Foundation,
     106either version 2 of the License, or (at your option) any later version.
     107This program is distributed in the hope that it will be useful, but WITHOUT
     108ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
     109FOR A PARTICULAR PURPOSE. See LICENSE.txt for the complete license terms.
    84110
    85111== Resources ==
    … …  
    93119  No font binary, vector master or third-party brand mark is included.
    94120  Asset notice: assets/images/LICENSE-logo.txt.
    95 * screenshot.png: owner-supplied theme preview, received on 2026-10-08 and
    96   preserved byte-for-byte. The owner confirmed rights to the photographic
    97   artwork created by or for them and authorized GPLv2-or-later distribution.
    98   Original composite and photographs: Copyright (C) 2026 yineali, GPLv2 or later.
     121* screenshot.png: owner-supplied theme preview, preserved byte-for-byte from the
     122  1.0.136 package. On 2026-10-28, the owner confirmed that the photographic-style
     123  illustrations shown in the preview were generated using GPT (OpenAI ChatGPT).
     124  These are AI-generated illustrations, not camera photographs or stock photos.
     125  The supplied composite retains its existing GPLv2-or-later distribution license.
     126  No new public-domain dedication is asserted without the owner's authorization.
    99127  Source: screenshot.png in this package; assets/images/screenshot-source.txt.
    100128  Notice: assets/images/LICENSE-screenshot.txt.
    … …  
    118146
    119147== Distribution ==
    120 The local edition preserves the owner's literal Turkish footer credit.
    121 The separate WordPress.org edition displays only the site owner's name and URL
    122 in its copyright area. The directory edition does not contain a forced keyword
    123 credit. Automated Theme Check passing is not approval by the Theme Review Team.
     148The public footer displays the current site owner's name and home URL in its
     149copyright area. It contains no forced advertising keywords or author copyright.
     150Automated Theme Check passing is not approval by the Theme Review Team.
    124151Review references:
    125152https://make.wordpress.org/themes/handbook/review/required/
    … …  
    133160
    134161== Changelog ==
     162= 1.0.137 =
     163* Fixed mobile menu focus containment, initial focus, Escape and focus restoration.
     164* Added a modal backdrop, background isolation, resize cleanup and no-JS menu access.
     165* Kept desktop More links visible while keyboard focus remains inside them.
     166* Rendered the selected static front page without an appended news feed.
     167* Used the main posts query and respected native post counts and sticky posts.
     168* Restored configured widget visibility/order and native category pagination.
     169* Replaced forced footer advertising with the current site's copyright.
     170* Clarified theme copyright, license and screenshot provenance.
     171* Improved small-text contrast in light/dark modes and accessible search labels.
     172* Matched related-card accessible names to their visible category labels.
     173* Prevented narrow-screen search overflow and empty author-name links.
     174
    135175= 1.0.136 =
    136176* Fixed a fatal comment-submit formatting error that broke the single-post layout.
    … …  
    154194
    155195== Upgrade Notice ==
     196= 1.0.137 =
     197Fixes keyboard navigation and Reading settings. Existing menus, content and saved
     198theme options remain intact. Footer copyright now identifies the current site.
     199
    156200= 1.0.136 =
    157201Fixes broken single-post rendering, comment reply controls and mobile footer overflow.
  • magazinenewsportal/1.0.137/searchform.php

    r352465 r356013  
    1212}
    1313
    14 $magazinenewsportal_search_id   = wp_unique_id( 'mnpn-search-field-' );
    15 $magazinenewsportal_args        = isset( $args ) && is_array( $args ) ? $args : array();
    16 $magazinenewsportal_variant     = isset( $magazinenewsportal_args['magazinenewsportal_variant'] ) && is_string( $magazinenewsportal_args['magazinenewsportal_variant'] ) ? sanitize_html_class( $magazinenewsportal_args['magazinenewsportal_variant'] ) : '';
    17 $magazinenewsportal_header      = in_array( $magazinenewsportal_variant, array( 'header', 'header-catalog' ), true );
    18 $magazinenewsportal_sidebar     = 'sidebar' === $magazinenewsportal_variant;
    19 $magazinenewsportal_catalog     = 'header-catalog' === $magazinenewsportal_variant;
    20 $magazinenewsportal_class       = $magazinenewsportal_sidebar ? 'mnpn-agenda-search' : 'mnpn-search-form' . ( $magazinenewsportal_header ? ' mnpn-search-form-header' : '' ) . ( $magazinenewsportal_catalog ? ' mnpn-search-form-catalog' : '' );
    21 $magazinenewsportal_label       = isset( $magazinenewsportal_args['aria_label'] ) ? sanitize_text_field( $magazinenewsportal_args['aria_label'] ) : __( 'Search for:', 'magazinenewsportal' );
     14$magazinenewsportal_search_id = wp_unique_id( 'mnpn-search-field-' );
     15$magazinenewsportal_args      = isset( $args ) && is_array( $args ) ? $args : array();
     16$magazinenewsportal_variant   = isset( $magazinenewsportal_args['magazinenewsportal_variant'] ) && is_string( $magazinenewsportal_args['magazinenewsportal_variant'] ) ? sanitize_html_class( $magazinenewsportal_args['magazinenewsportal_variant'] ) : '';
     17$magazinenewsportal_header    = in_array( $magazinenewsportal_variant, array( 'header', 'header-catalog' ), true );
     18$magazinenewsportal_sidebar   = 'sidebar' === $magazinenewsportal_variant;
     19$magazinenewsportal_catalog   = 'header-catalog' === $magazinenewsportal_variant;
     20$magazinenewsportal_class     = $magazinenewsportal_sidebar ? 'mnpn-agenda-search' : 'mnpn-search-form' . ( $magazinenewsportal_header ? ' mnpn-search-form-header' : '' ) . ( $magazinenewsportal_catalog ? ' mnpn-search-form-catalog' : '' );
     21$magazinenewsportal_label     = isset( $magazinenewsportal_args['aria_label'] ) ? sanitize_text_field( $magazinenewsportal_args['aria_label'] ) : __( 'Search for:', 'magazinenewsportal' );
     22if ( '' === trim( $magazinenewsportal_label ) ) {
     23        $magazinenewsportal_label = __( 'Search for:', 'magazinenewsportal' );
     24}
    2225$magazinenewsportal_placeholder = isset( $magazinenewsportal_args['placeholder'] )
    2326        ? sanitize_text_field( $magazinenewsportal_args['placeholder'] )
  • magazinenewsportal/1.0.137/single.php

    r352465 r356013  
    115115
    116116                                                <div class="mnpn-modern-meta">
     117                                                        <?php if ( '' !== trim( $magazinenewsportal_author_name ) ) : ?>
    117118                                                        <div class="mnpn-modern-author">
    118119                                                                <a href="<?php echo esc_url( $magazinenewsportal_author_url ); ?>" aria-label="<?php echo esc_attr( sprintf( /* translators: %s: Author name. */ __( 'View all posts by %s', 'magazinenewsportal' ), $magazinenewsportal_author_name ) ); ?>">
    … …  
    136137                                                                <span class="mnpn-author-verified" title="<?php esc_attr_e( 'Verified author', 'magazinenewsportal' ); ?>" aria-label="<?php esc_attr_e( 'Verified author', 'magazinenewsportal' ); ?>">&#10003;</span>
    137138                                                        </div>
     139                                                        <?php endif; ?>
    138140
    139141                                                        <time class="mnpn-modern-meta-item" datetime="<?php echo esc_attr( get_the_date( DATE_W3C ) ); ?>">
    … …  
    191193                                                                $magazinenewsportal_related_categories = get_the_category( $magazinenewsportal_related_post->ID );
    192194                                                                $magazinenewsportal_related_category   = $magazinenewsportal_related_categories ? $magazinenewsportal_related_categories[0] : null;
     195                                                                $magazinenewsportal_related_label      = magazinenewsportal_get_post_link_label( $magazinenewsportal_related_post->ID );
     196                                                                if ( $magazinenewsportal_related_category ) {
     197                                                                        $magazinenewsportal_related_label .= ' — ' . magazinenewsportal_localize_theme_label( $magazinenewsportal_related_category->name );
     198                                                                }
    193199                                                                ?>
    194200                                                                <article class="mnpn-related-card">
    195                                                                         <a class="mnpn-related-media" href="<?php echo esc_url( get_permalink( $magazinenewsportal_related_post ) ); ?>" aria-label="<?php echo esc_attr( magazinenewsportal_get_post_link_label( $magazinenewsportal_related_post->ID ) ); ?>">
     201                                                                        <a class="mnpn-related-media" href="<?php echo esc_url( get_permalink( $magazinenewsportal_related_post ) ); ?>" aria-label="<?php echo esc_attr( $magazinenewsportal_related_label ); ?>">
    196202                                                                                <?php if ( has_post_thumbnail( $magazinenewsportal_related_post ) ) : ?>
    197203                                                                                        <?php
  • magazinenewsportal/1.0.137/style.css

    r352621 r356013  
    66Author URI: https://viralportalnews.narya.tr/
    77Description: A colorful, responsive news and magazine theme with editorial layouts, widget areas, block styles, and native WordPress settings.
    8 Version: 1.0.136
     8Version: 1.0.137
    99Requires at least: 6.6
    1010Tested up to: 7.1
  • magazinenewsportal/1.0.137/template-parts/agenda-sidebar.php

    r352465 r356013  
    1212}
    1313
    14 $posts_page_id = absint( get_option( 'page_for_posts' ) );
    15 $all_posts_url = $posts_page_id ? get_permalink( $posts_page_id ) : home_url( '/' );
    16 
    17 if ( ! $all_posts_url ) {
    18         $all_posts_url = home_url( '/' );
    19 }
     14$all_posts_url = magazinenewsportal_get_posts_url();
    2015
    2116$popular_ids   = magazinenewsportal_get_most_read_post_ids( 7 );
    … …  
    5752        get_search_form(
    5853                array(
     54                        'aria_label'                 => __( 'Sidebar search', 'magazinenewsportal' ),
    5955                        'magazinenewsportal_variant' => 'sidebar',
    6056                        'placeholder'                => __( 'Search...', 'magazinenewsportal' ),
Note: See TracChangeset for help on using the changeset viewer.