Plugin Directory

Changeset 3460903


Ignore:
Timestamp:
02/13/2026 04:23:41 PM (8 days ago)
Author:
wpazleen
Message:

v1.3.0

Location:
post-export-import-with-media
Files:
285 added
12 edited

Legend:

Unmodified
Added
Removed
  • post-export-import-with-media/trunk/assets/css/admin.css

    r3425395 r3460903  
    930930}
    931931
     932/* Danger Modal */
     933.peiwm-danger-modal .peiwm-modal-header {
     934    background: #fff5f5;
     935    border-bottom-color: #fed7d7;
     936}
     937
     938.peiwm-danger-modal .peiwm-modal-header h3 {
     939    color: #742a2a;
     940}
     941
     942.peiwm-danger-icon {
     943    font-size: 48px;
     944    color: #e53e3e;
     945    margin-bottom: 15px;
     946    font-weight: bold;
     947}
     948
     949.peiwm-danger-modal .peiwm-modal-footer {
     950    background: #fff5f5;
     951    border-top-color: #fed7d7;
     952}
     953
    932954/* Modal Content Variations */
    933955.peiwm-modal-body.peiwm-text-left {
     
    16911713    }
    16921714}
     1715
     1716
     1717/* PRO Feature Styles */
     1718.peiwm-pro-lock {
     1719    display: inline-block;
     1720    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
     1721    color: #fff;
     1722    padding: 2px 8px;
     1723    border-radius: 3px;
     1724    font-size: 10px;
     1725    font-weight: 600;
     1726    text-transform: uppercase;
     1727    letter-spacing: 0.5px;
     1728    margin-left: 5px;
     1729    vertical-align: middle;
     1730}
     1731
     1732.peiwm-pro-badge-large {
     1733    display: inline-block;
     1734    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
     1735    color: #fff;
     1736    padding: 5px 15px;
     1737    border-radius: 5px;
     1738    font-size: 12px;
     1739    font-weight: 600;
     1740    text-transform: uppercase;
     1741    letter-spacing: 0.5px;
     1742    margin-left: 10px;
     1743    vertical-align: middle;
     1744}
     1745
     1746.peiwm-pro-feature-wrap {
     1747    background: #fff;
     1748    padding: 20px;
     1749    border-radius: 8px;
     1750    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
     1751}
     1752
     1753.peiwm-pro-locked-feature {
     1754    background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
     1755    border: 2px solid #667eea;
     1756    border-radius: 12px;
     1757    padding: 60px 40px;
     1758    text-align: center;
     1759    margin-top: 30px;
     1760    position: relative;
     1761}
     1762
     1763.peiwm-pro-locked-icon {
     1764    font-size: 80px;
     1765    margin-bottom: 20px;
     1766    opacity: 0.8;
     1767}
     1768
     1769.peiwm-pro-locked-feature h2 {
     1770    color: #667eea;
     1771    font-size: 32px;
     1772    margin-bottom: 15px;
     1773    font-weight: 700;
     1774}
     1775
     1776.peiwm-pro-locked-feature>p {
     1777    font-size: 18px;
     1778    color: #4a5568;
     1779    margin-bottom: 30px;
     1780}
     1781
     1782.peiwm-pro-features-list {
     1783    list-style: none;
     1784    padding: 0;
     1785    margin: 0 auto 40px;
     1786    display: inline-block;
     1787    text-align: left;
     1788    max-width: 600px;
     1789}
     1790
     1791.peiwm-pro-features-list li {
     1792    font-size: 16px;
     1793    color: #2d3748;
     1794    padding: 12px 0;
     1795    border-bottom: 1px solid rgba(102, 126, 234, 0.2);
     1796    font-weight: 500;
     1797}
     1798
     1799.peiwm-pro-features-list li:last-child {
     1800    border-bottom: none;
     1801}
     1802
     1803.peiwm-pro-locked-feature .button-hero {
     1804    font-size: 18px;
     1805    padding: 15px 40px;
     1806    height: auto;
     1807    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
     1808    border: none;
     1809    box-shadow: 0 4px 15px rgba(102, 126, 234, 0.4);
     1810    transition: all 0.3s ease;
     1811}
     1812
     1813.peiwm-pro-locked-feature .button-hero:hover {
     1814    transform: translateY(-2px);
     1815    box-shadow: 0 6px 20px rgba(102, 126, 234, 0.6);
     1816}
     1817
     1818.peiwm-pro-feature-active {
     1819    background: #f0f9ff;
     1820    border: 2px dashed #3b82f6;
     1821    border-radius: 8px;
     1822    padding: 40px;
     1823    text-align: center;
     1824    margin-top: 30px;
     1825}
     1826
     1827.peiwm-pro-feature-active p {
     1828    font-size: 16px;
     1829    color: #1e40af;
     1830    margin: 0;
     1831}
     1832
     1833/* Locked Configuration Section with Blurry Glass Effect */
     1834.peiwm-locked-section {
     1835    position: relative;
     1836    padding: 20px;
     1837    margin: 10px;
     1838}
     1839
     1840.peiwm-locked-section::before {
     1841    content: '';
     1842    position: absolute;
     1843    top: 0;
     1844    left: 0;
     1845    right: 0;
     1846    bottom: 0;
     1847    background: rgba(255, 255, 255, 0.3);
     1848    backdrop-filter: blur(1px);
     1849    -webkit-backdrop-filter: blur(8px);
     1850    z-index: 9;
     1851    border-radius: 8px;
     1852}
     1853
     1854.peiwm-locked-section:hover::after {
     1855    transform: scale(1.05);
     1856    box-shadow: 0 6px 20px rgba(102, 126, 234, 0.7);
     1857}
     1858
     1859.peiwm-locked-section input,
     1860.peiwm-locked-section select,
     1861.peiwm-locked-section textarea {
     1862    cursor: not-allowed !important;
     1863}
     1864
     1865/* Clickable PRO Badge Overlay */
     1866.peiwm-pro-upgrade-overlay {
     1867    position: absolute;
     1868    top: 0;
     1869    left: 0;
     1870    right: 0;
     1871    bottom: 0;
     1872    z-index: 11;
     1873    cursor: pointer;
     1874    display: flex;
     1875    align-items: center;
     1876    justify-content: center;
     1877}
     1878
     1879.peiwm-pro-upgrade-badge {
     1880    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
     1881    color: #fff;
     1882    padding: 20px 40px;
     1883    border-radius: 12px;
     1884    font-weight: 700;
     1885    font-size: 16px;
     1886    box-shadow: 0 8px 25px rgba(102, 126, 234, 0.5);
     1887    text-transform: uppercase;
     1888    letter-spacing: 1.5px;
     1889    transition: all 0.3s ease;
     1890    text-decoration: none;
     1891    display: inline-block;
     1892}
     1893
     1894.peiwm-pro-upgrade-badge:hover {
     1895    transform: translateY(-3px);
     1896    box-shadow: 0 12px 35px rgba(102, 126, 234, 0.7);
     1897    color: #fff;
     1898    text-decoration: none;
     1899}
     1900
     1901/* Scheduled Exports Page Styles */
     1902.peiwm-pro-feature-wrap {
     1903    background: linear-gradient(135deg, #fefdf9 0%, #fff7ed 50%, #fef3e2 100%);
     1904    padding: 40px;
     1905    border-radius: 24px;
     1906    box-shadow: var(--shadow-warm);
     1907    max-width: 1200px;
     1908    margin: 20px auto;
     1909}
     1910
     1911.peiwm-pro-feature-wrap h1 {
     1912    font-size: 32px;
     1913    font-weight: 800;
     1914    background: var(--gradient-primary);
     1915    -webkit-background-clip: text;
     1916    -webkit-text-fill-color: transparent;
     1917    background-clip: text;
     1918    margin-bottom: 1rem;
     1919    display: flex;
     1920    align-items: center;
     1921    gap: 1rem;
     1922}
     1923
     1924.peiwm-pro-feature-wrap .description {
     1925    font-size: 16px;
     1926    color: var(--text-secondary);
     1927    margin-bottom: 2rem;
     1928}
     1929
     1930.peiwm-pro-locked-feature {
     1931    background: rgba(255, 255, 255, 0.9);
     1932    backdrop-filter: blur(10px);
     1933    -webkit-backdrop-filter: blur(10px);
     1934    border: 2px solid rgba(249, 115, 22, 0.3);
     1935    border-radius: 24px;
     1936    padding: 60px 40px;
     1937    text-align: center;
     1938    margin-top: 30px;
     1939    position: relative;
     1940    box-shadow: var(--shadow-warm);
     1941}
     1942
     1943.peiwm-pro-locked-icon {
     1944    font-size: 80px;
     1945    margin-bottom: 20px;
     1946    opacity: 0.9;
     1947    animation: pulse 2s ease-in-out infinite;
     1948}
     1949
     1950.peiwm-pro-locked-feature h2 {
     1951    color: var(--primary);
     1952    font-size: 32px;
     1953    margin-bottom: 15px;
     1954    font-weight: 700;
     1955}
     1956
     1957.peiwm-pro-locked-feature>p {
     1958    font-size: 18px;
     1959    color: var(--text-secondary);
     1960    margin-bottom: 30px;
     1961}
     1962
     1963.peiwm-pro-features-list {
     1964    list-style: none;
     1965    padding: 0;
     1966    margin: 0 auto 40px;
     1967    display: inline-block;
     1968    text-align: left;
     1969    max-width: 600px;
     1970}
     1971
     1972.peiwm-pro-features-list li {
     1973    font-size: 16px;
     1974    color: var(--text-primary);
     1975    padding: 12px 0;
     1976    border-bottom: 1px solid rgba(249, 115, 22, 0.2);
     1977    font-weight: 500;
     1978}
     1979
     1980.peiwm-pro-features-list li:last-child {
     1981    border-bottom: none;
     1982}
     1983
     1984.peiwm-pro-locked-feature .button-hero {
     1985    font-size: 18px;
     1986    padding: 15px 40px;
     1987    height: auto;
     1988    background: var(--gradient-primary);
     1989    border: none;
     1990    box-shadow: 0 4px 15px rgba(249, 115, 22, 0.4);
     1991    transition: all 0.3s ease;
     1992    color: white;
     1993    text-decoration: none;
     1994    border-radius: 16px;
     1995}
     1996
     1997.peiwm-pro-locked-feature .button-hero:hover {
     1998    transform: translateY(-3px);
     1999    box-shadow: 0 8px 25px rgba(249, 115, 22, 0.6);
     2000    color: white;
     2001}
     2002
     2003/* Batch Settings Page Styles */
     2004.peiwm-settings-wrap {
     2005    background: linear-gradient(135deg, #fefdf9 0%, #fff7ed 50%, #fef3e2 100%);
     2006    padding: 40px;
     2007    border-radius: 24px;
     2008    box-shadow: var(--shadow-warm);
     2009    max-width: 1200px;
     2010    margin: 20px auto;
     2011}
     2012
     2013.peiwm-settings-wrap h1 {
     2014    font-size: 32px;
     2015    font-weight: 800;
     2016    background: var(--gradient-primary);
     2017    -webkit-background-clip: text;
     2018    -webkit-text-fill-color: transparent;
     2019    background-clip: text;
     2020    margin-bottom: 1rem;
     2021}
     2022
     2023.peiwm-settings-header {
     2024    background: rgba(255, 255, 255, 0.9);
     2025    backdrop-filter: blur(10px);
     2026    -webkit-backdrop-filter: blur(10px);
     2027    padding: 20px;
     2028    border-left: 4px solid var(--primary);
     2029    margin: 20px 0;
     2030    box-shadow: var(--shadow-md);
     2031    border-radius: 12px;
     2032}
     2033
     2034.peiwm-section-title {
     2035    border-bottom: 2px solid var(--primary);
     2036    padding-bottom: 10px;
     2037    margin-top: 30px;
     2038    color: var(--text-primary);
     2039    font-weight: 700;
     2040}
     2041
     2042.peiwm-settings-table {
     2043    border-radius: 12px;
     2044    padding: 20px;
     2045}
     2046
     2047.peiwm-toggle-switch {
     2048    position: relative;
     2049    display: inline-block;
     2050    width: 60px;
     2051    height: 34px;
     2052}
     2053
     2054.peiwm-toggle-switch input {
     2055    opacity: 0;
     2056    width: 0;
     2057    height: 0;
     2058}
     2059
     2060.peiwm-toggle-slider {
     2061    position: absolute;
     2062    cursor: pointer;
     2063    top: 0;
     2064    left: 0;
     2065    right: 0;
     2066    bottom: 0;
     2067    background-color: #ccc;
     2068    transition: .4s;
     2069    border-radius: 34px;
     2070}
     2071
     2072.peiwm-toggle-slider:before {
     2073    position: absolute;
     2074    content: "";
     2075    height: 26px;
     2076    width: 26px;
     2077    left: 4px;
     2078    bottom: 4px;
     2079    background-color: white;
     2080    transition: .4s;
     2081    border-radius: 50%;
     2082}
     2083
     2084input:checked + .peiwm-toggle-slider {
     2085    background: var(--gradient-primary);
     2086}
     2087
     2088input:checked + .peiwm-toggle-slider:before {
     2089    transform: translateX(26px);
     2090}
     2091
     2092.peiwm-feature-badge {
     2093    margin-top: 10px;
     2094}
     2095
     2096.peiwm-badge {
     2097    display: inline-block;
     2098    padding: 4px 12px;
     2099    border-radius: 3px;
     2100    font-size: 11px;
     2101    font-weight: 600;
     2102    text-transform: uppercase;
     2103    letter-spacing: 0.5px;
     2104}
     2105
     2106.peiwm-badge-free {
     2107    background: var(--success);
     2108    color: #fff;
     2109}
     2110
     2111.peiwm-badge-text {
     2112    margin-left: 8px;
     2113    color: var(--text-secondary);
     2114    font-size: 13px;
     2115}
     2116
     2117.peiwm-unit {
     2118    margin-left: 5px;
     2119    color: var(--text-secondary);
     2120}
     2121
     2122.peiwm-recommendations-box {
     2123    background: rgba(255, 255, 255, 0.9);
     2124    backdrop-filter: blur(10px);
     2125    -webkit-backdrop-filter: blur(10px);
     2126    border: 2px solid rgba(249, 115, 22, 0.3);
     2127    border-radius: 16px;
     2128    padding: 20px;
     2129    margin-top: 30px;
     2130    box-shadow: var(--shadow-md);
     2131}
     2132
     2133.peiwm-recommendations-box h3 {
     2134    margin-top: 0;
     2135    color: var(--primary);
     2136}
     2137
     2138.peiwm-stat-row {
     2139    display: flex;
     2140    gap: 20px;
     2141    margin: 15px 0;
     2142}
     2143
     2144.peiwm-stat-item {
     2145    flex: 1;
     2146    background: rgba(255, 255, 255, 0.9);
     2147    padding: 15px;
     2148    border-radius: 12px;
     2149    border: 2px solid var(--border-warm);
     2150    box-shadow: var(--shadow-sm);
     2151    transition: all 0.3s ease;
     2152}
     2153
     2154.peiwm-stat-item:hover {
     2155    border-color: var(--primary);
     2156    transform: translateY(-2px);
     2157    box-shadow: var(--shadow-md);
     2158}
     2159
     2160.peiwm-stat-label {
     2161    font-size: 12px;
     2162    color: var(--text-muted);
     2163    text-transform: uppercase;
     2164    letter-spacing: 0.5px;
     2165}
     2166
     2167.peiwm-stat-value {
     2168    font-size: 24px;
     2169    font-weight: 700;
     2170    background: var(--gradient-primary);
     2171    -webkit-background-clip: text;
     2172    -webkit-text-fill-color: transparent;
     2173    background-clip: text;
     2174    margin-top: 5px;
     2175}
     2176
     2177.peiwm-recommendation {
     2178    background: rgba(255, 255, 255, 0.9);
     2179    padding: 15px;
     2180    border-left: 4px solid var(--primary);
     2181    margin-top: 15px;
     2182    border-radius: 8px;
     2183}
     2184
     2185.peiwm-recommendation strong {
     2186    color: var(--primary);
     2187}
  • post-export-import-with-media/trunk/assets/js/admin.js

    r3425395 r3460903  
    22    'use strict';
    33
    4     // Initialize checkbox default state
     4    // Initialize checkbox default states
     5    $('#peiwm-check-media-library').prop('checked', true);
    56    $('#peiwm-download-missing-images').prop('checked', true);
    67
     
    463464        let currentIndex = 0;
    464465        const totalPosts = posts.length;
     466        let isProcessing = false;
    465467
    466468        function processNextPost() {
     
    472474            }
    473475
     476            if (isProcessing) {
     477                return; // Prevent concurrent processing
     478            }
     479
     480            isProcessing = true;
    474481            const post = posts[currentIndex];
    475482            const downloadMissingImages = $('#peiwm-download-missing-images').is(':checked') ? '1' : '0';
     
    561568        function importPostContent(post) {
    562569            const downloadMissingImages = $('#peiwm-download-missing-images').is(':checked') ? '1' : '0';
     570            const checkMediaLibrary = $('#peiwm-check-media-library').is(':checked') ? '1' : '0';
    563571           
    564572            $.ajax({
    565573                url: peiwm_ajax.ajax_url,
    566574                type: 'POST',
    567                 timeout: 60000, // 1 minute for post creation
     575                timeout: 30000, // Reduced to 30 seconds
    568576                data: {
    569577                    action: 'peiwm_import_post',
    570578                    nonce: peiwm_ajax.nonce,
    571579                    post_data: JSON.stringify(post),
    572                     download_missing_images: downloadMissingImages
     580                    download_missing_images: downloadMissingImages,
     581                    check_media_library: checkMediaLibrary
    573582                },
    574583                success: function (response) {
     
    584593                },
    585594                error: function (xhr, status, error) {
    586                     addLog('✗ Error: ' + post.post_title + ' - ' + error, log);
     595                    if (status === 'timeout') {
     596                        addLog('⚠ Timeout: ' + post.post_title + ' - Request took too long, but may have completed', log, 'peiwm-log-warning');
     597                    } else {
     598                        addLog('✗ Error: ' + post.post_title + ' - ' + error, log);
     599                    }
    587600                },
    588601                complete: function () {
     602                    isProcessing = false;
    589603                    currentIndex++;
    590604                    const progressPercent = Math.round((currentIndex / totalPosts) * 100);
    591605                    progressFill.css('width', progressPercent + '%');
    592                     progressText.text('Importing posts... (' + currentIndex + ' of ' + totalPosts + ')');
    593 
    594                     // Process next post with a small delay
    595                     setTimeout(processNextPost, 100);
     606                    progressText.text('Processing: ' + currentIndex + ' of ' + totalPosts + ' posts (' + progressPercent + '%) - Batch ' + Math.ceil(currentIndex / totalPosts) + '/1');
     607
     608                    // Process next post with a delay to prevent server overload
     609                    setTimeout(processNextPost, 500);
    596610                }
    597611            });
  • post-export-import-with-media/trunk/assets/js/pages.js

    r3425395 r3460903  
    203203            const page = pages[currentIndex];
    204204            const downloadMissingImages = $('#peiwm-download-missing-page-images').is(':checked') ? '1' : '0';
     205            const checkMediaLibrary = $('#peiwm-check-media-library-pages').is(':checked') ? '1' : '0';
    205206           
    206207            // Show what we're about to do
     
    226227                    nonce: peiwm_ajax.nonce,
    227228                    page_data: JSON.stringify(page),
    228                     download_missing_images: downloadMissingImages
     229                    download_missing_images: downloadMissingImages,
     230                    check_media_library: checkMediaLibrary
    229231                },
    230232                success: function (response) {
  • post-export-import-with-media/trunk/includes/class-admin-menu.php

    r3441984 r3460903  
    4141    private function __construct() {
    4242        add_action( 'admin_menu', array( $this, 'add_admin_menu' ) );
     43        add_action( 'admin_menu', array( $this, 'add_recommendations_menu' ), 50 );
    4344        add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_scripts' ) );
    4445        add_action( 'current_screen', array( $this, 'protect_plugin_pages' ) );
     
    117118     */
    118119    public function add_admin_menu() {
     120
    119121        add_menu_page(
    120122            esc_html__( 'WP Post Export Import', 'post-export-import-with-media' ),
     
    157159        );
    158160
    159         // Add recommendations submenu
     161        // Note: Batch Settings (priority 30) and Scheduled Exports (priority 40)
     162        // are added by their respective classes
     163        // Recommendations (priority 50) is added in add_recommendations_menu()
     164    }
     165
     166    /**
     167     * Add recommendations menu (priority 50 to appear last)
     168     */
     169    public function add_recommendations_menu() {
    160170        add_submenu_page(
    161171            'peiwm-secure',
     
    331341            ) );
    332342        }
     343
     344        // Scheduled Exports page
     345        if ( 'export-import-posts_page_peiwm-exports-settings' === $hook ) {
     346            wp_enqueue_style(
     347                'peiwm-admin-css',
     348                PEIWM_PLUGIN_URL . 'assets/css/admin.css',
     349                array(),
     350                PEIWM_VERSION
     351            );
     352        }
     353
     354        // Batch Settings page
     355        if ( 'export-import-posts_page_peiwm-batch-settings' === $hook ) {
     356            wp_enqueue_style(
     357                'peiwm-admin-css',
     358                PEIWM_PLUGIN_URL . 'assets/css/admin.css',
     359                array(),
     360                PEIWM_VERSION
     361            );
     362        }
    333363    }
    334364
     
    373403                        <div class="peiwm-import-options" style="margin-top: 1rem;">
    374404                            <label class="peiwm-checkbox-label">
    375                                 <input type="checkbox" id="peiwm-download-missing-images">
     405                                <input type="checkbox" id="peiwm-check-media-library" checked>
     406                                <span class="peiwm-checkbox-text">
     407                                    <?php echo esc_html__( 'Check media library for post images', 'post-export-import-with-media' ); ?>
     408                                    <small class="peiwm-checkbox-description">
     409                                        <?php echo esc_html__( 'Check if images already exist in media library before importing. Uncheck for faster import (images will be missing).', 'post-export-import-with-media' ); ?>
     410                                    </small>
     411                                </span>
     412                            </label>
     413                           
     414                            <label class="peiwm-checkbox-label" style="margin-top: 0.5rem;">
     415                                <input type="checkbox" id="peiwm-download-missing-images" checked>
    376416                                <span class="peiwm-checkbox-text">
    377417                                    <?php echo esc_html__( 'Download missing images from original URLs', 'post-export-import-with-media' ); ?>
    378418                                    <small class="peiwm-checkbox-description">
    379                                         <?php echo esc_html__( 'If images are not found in media library, try to download them from their original locations', 'post-export-import-with-media' ); ?>
     419                                        <?php echo esc_html__( 'If images are not found in media library, try to download them from their original locations. Uncheck for faster import.', 'post-export-import-with-media' ); ?>
    380420                                    </small>
    381421                                </span>
     
    598638                       
    599639                        <div class="peiwm-import-options" style="margin-top: 1rem;">
     640                            <label class="peiwm-checkbox-label">
     641                                <input type="checkbox" id="peiwm-check-media-library-pages" checked>
     642                                <span class="peiwm-checkbox-text">
     643                                    <?php echo esc_html__( 'Check media library for page images', 'post-export-import-with-media' ); ?>
     644                                    <small class="peiwm-checkbox-description">
     645                                        <?php echo esc_html__( 'Search for images in your media library before downloading. Uncheck for faster import if you plan to add images manually later.', 'post-export-import-with-media' ); ?>
     646                                    </small>
     647                                </span>
     648                            </label>
     649                           
    600650                            <label class="peiwm-checkbox-label">
    601651                                <input type="checkbox" id="peiwm-download-missing-page-images">
     
    10971147        <?php
    10981148    }
     1149
     1150
     1151   
    10991152}
  • post-export-import-with-media/trunk/includes/class-ajax-handler.php

    r3425395 r3460903  
    5252        // Media stats
    5353        add_action( 'wp_ajax_peiwm_get_media_stats', array( $this, 'ajax_get_media_stats' ) );
     54       
     55        // Content stats for batch settings
     56        add_action( 'wp_ajax_peiwm_get_content_stats', array( $this, 'ajax_get_content_stats' ) );
    5457       
    5558        // Download handlers
     
    9295        } catch ( Exception $e ) {
    9396            wp_send_json_error( array( 'message' => esc_html__( 'System test failed', 'post-export-import-with-media' ) ) );
     97        }
     98    }
     99
     100    /**
     101     * AJAX: Get content statistics for batch settings
     102     */
     103    public function ajax_get_content_stats() {
     104        if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ) ), 'peiwm_secure_nonce' ) ) {
     105            wp_send_json_error( array( 'message' => esc_html__( 'Security check failed', 'post-export-import-with-media' ) ) );
     106        }
     107
     108        if ( ! current_user_can( 'manage_options' ) ) {
     109            wp_send_json_error( array( 'message' => esc_html__( 'Permission denied', 'post-export-import-with-media' ) ) );
     110        }
     111
     112        try {
     113            $total_posts = wp_count_posts( 'post' );
     114            $total_pages = wp_count_posts( 'page' );
     115            $total_media = wp_count_posts( 'attachment' );
     116
     117            wp_send_json_success( array(
     118                'total_posts' => $total_posts->publish + $total_posts->draft + $total_posts->pending,
     119                'total_pages' => $total_pages->publish + $total_pages->draft + $total_pages->pending,
     120                'total_media' => $total_media->inherit,
     121            ) );
     122
     123        } catch ( Exception $e ) {
     124            wp_send_json_error( array( 'message' => esc_html__( 'Failed to get content statistics', 'post-export-import-with-media' ) ) );
    94125        }
    95126    }
  • post-export-import-with-media/trunk/includes/class-main.php

    r3425395 r3460903  
    5656        add_action( 'plugins_loaded', array( $this, 'setup_error_suppression' ), 1 );
    5757    }
     58
     59    /**
     60     * Helper function to check if Freemius is available (either from Free or Pro).
     61     *
     62     * @since 1.3.0
     63     * @return object|null Freemius SDK object or null.
     64     */
     65    public function is_pro_active() {
     66        $is_pro_installed = class_exists('PEIWM_Pro_Main') && $this->check_pro_plugin_exists();
     67       
     68        // Get the correct Freemius instance based on which plugin is handling it
     69        $freemius_instance = peiwm_get_freemius_instance();
     70       
     71        // If no Freemius instance available, return false
     72        if ( ! $freemius_instance ) {
     73            return false;
     74        }
     75       
     76        return $freemius_instance->can_use_premium_code__premium_only() && $is_pro_installed;
     77    }
     78
     79    /**
     80     * Helper function to check if Pro version is active.
     81     *
     82     * @since 1.3.0
     83     * @return bool Whether Pro version is active.
     84     */
     85    public function check_pro_plugin_exists() {
     86        // return is_plugin_active( 'post-export-import-with-media-pro/post-export-import-with-media-pro.php' );
     87        return file_exists( WP_PLUGIN_DIR . '/post-export-import-with-media-pro/post-export-import-with-media-pro.php' );
     88    }
     89
    5890
    5991    /**
     
    153185        require_once PEIWM_PLUGIN_PATH . 'includes/class-widgets-menus-handler.php';
    154186        require_once PEIWM_PLUGIN_PATH . 'includes/class-admin-download-buttons.php';
     187        require_once PEIWM_PLUGIN_PATH . 'includes/class-batch-settings.php';
     188        require_once PEIWM_PLUGIN_PATH . 'includes/class-batch-processor.php';
     189        require_once PEIWM_PLUGIN_PATH . 'includes/class-heartbeat-handler.php';
     190        require_once PEIWM_PLUGIN_PATH . 'includes/class-scheduled-exports.php';
    155191        require_once PEIWM_PLUGIN_PATH . 'includes/class-generic-recommendations.php';
    156192    }
     
    206242        // Initialize admin download buttons
    207243        PEIWM_Admin_Download_Buttons::get_instance();
     244       
     245        // Initialize batch settings
     246        PEIWM_Scheduled_Exports::get_instance();
     247       
     248        // Initialize batch settings
     249        PEIWM_Batch_Settings::get_instance();
     250       
     251        // Initialize batch processor
     252        PEIWM_Batch_Processor::get_instance();
     253       
     254        // Initialize heartbeat handler
     255        PEIWM_Heartbeat_Handler::get_instance();
    208256       
    209257        // Initialize recommendations
  • post-export-import-with-media/trunk/includes/class-page-handler.php

    r3425395 r3460903  
    122122     */
    123123    public function ajax_import_page() {
     124        // CRITICAL: Close session early to allow concurrent requests
     125        if ( session_id() ) {
     126            session_write_close();
     127        }
     128       
     129        // Set reasonable execution time limit
     130        @set_time_limit( 60 ); // 60 seconds per page
     131        @ini_set( 'max_execution_time', '60' );
     132       
     133        // Optimize memory usage
     134        @ini_set( 'memory_limit', '256M' );
     135       
    124136        if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ) ), 'peiwm_secure_nonce' ) ) {
    125137            wp_send_json_error( array( 'message' => esc_html__( 'Security check failed', 'post-export-import-with-media' ) ) );
     
    206218            // Import content images first and update page content
    207219            $updated_content = $sanitized_page_data['post_content'];
    208             if ( ! empty( $sanitized_page_data['content_images'] ) ) {
     220            if ( $check_media_library && ! empty( $sanitized_page_data['content_images'] ) ) {
    209221                $updated_content = $this->import_content_images_secure( $page_id, $sanitized_page_data['content_images'], $sanitized_page_data['post_content'], $download_missing_images );
    210222            }
     223            // If not checking media, we skip image processing entirely - images remain as placeholders in content
    211224
    212225            // Import featured image
    213             if ( ! empty( $sanitized_page_data['featured_image'] ) ) {
     226            if ( $check_media_library && ! empty( $sanitized_page_data['featured_image'] ) ) {
    214227                $this->import_featured_image_secure( $page_id, $sanitized_page_data['featured_image'], $download_missing_images );
    215228            }
  • post-export-import-with-media/trunk/includes/class-post-handler.php

    r3425395 r3460903  
    122122     */
    123123    public function ajax_import_post() {
     124        // CRITICAL: Close session early to allow concurrent requests
     125        if ( session_id() ) {
     126            session_write_close();
     127        }
     128       
     129        // Set reasonable execution time limit
     130        @set_time_limit( 60 ); // 60 seconds per post
     131        @ini_set( 'max_execution_time', '60' );
     132       
     133        // Optimize memory usage
     134        @ini_set( 'memory_limit', '256M' );
     135       
    124136        if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ) ), 'peiwm_secure_nonce' ) ) {
    125137            wp_send_json_error( array( 'message' => esc_html__( 'Security check failed', 'post-export-import-with-media' ) ) );
     
    133145            $post_data_raw = isset( $_POST['post_data'] ) ? wp_unslash( $_POST['post_data'] ) : ''; //phpcs:ignore we have sanitize below with sanitize_post_data
    134146            $download_missing_images = isset( $_POST['download_missing_images'] ) && $_POST['download_missing_images'] === '1';
     147            $check_media_library = isset( $_POST['check_media_library'] ) && $_POST['check_media_library'] === '1';
    135148           
    136149            if ( empty( $post_data_raw ) ) {
     
    159172
    160173            if ( ! empty( $existing_posts ) ) {
    161                 wp_reset_postdata(); // Reset before returning
    162174                wp_send_json_success( array(
    163175                    'status' => 'skipped',
     
    165177                ) );
    166178            }
    167 
    168             // Reset post data after check
    169             wp_reset_postdata();
    170179
    171180            // Insert post
     
    182191
    183192            if ( is_wp_error( $post_id ) ) {
    184                 wp_reset_postdata(); // Reset before throwing exception
    185193                throw new Exception( sprintf(
    186194                    esc_html__( 'Failed to create post: %s', 'post-export-import-with-media' ),
     
    189197            }
    190198
    191             // Reset after post creation
    192             wp_reset_postdata();
    193 
    194199            // Set post format
    195200            if ( ! empty( $sanitized_post_data['post_format'] ) && $sanitized_post_data['post_format'] !== 'standard' ) {
     
    214219            // Import content images first and update post content
    215220            $updated_content = $sanitized_post_data['post_content'];
    216             if ( ! empty( $sanitized_post_data['content_images'] ) ) {
     221            if ( $check_media_library && ! empty( $sanitized_post_data['content_images'] ) ) {
    217222                $updated_content = $this->import_content_images_secure( $post_id, $sanitized_post_data['content_images'], $sanitized_post_data['post_content'], $download_missing_images );
    218223            }
     224            // If not checking media, we skip image processing entirely - images remain as placeholders in content
    219225
    220226            // Import featured image
    221             if ( ! empty( $sanitized_post_data['featured_image'] ) ) {
     227            if ( $check_media_library && ! empty( $sanitized_post_data['featured_image'] ) ) {
    222228                $this->import_featured_image_secure( $post_id, $sanitized_post_data['featured_image'], $download_missing_images );
    223229            }
     
    229235                    'post_content' => $updated_content,
    230236                ) );
    231                 // Reset after post update
    232                 wp_reset_postdata();
    233             }
     237            }
     238
     239            // Reset global post data once at the end
     240            wp_reset_postdata();
     241           
     242            // Clear object cache to prevent memory buildup
     243            wp_cache_flush();
    234244
    235245            // Get detailed import results
     
    257267
    258268        } catch ( Exception $e ) {
     269            // Clear cache on error too
     270            wp_cache_flush();
    259271            wp_send_json_error( array( 'message' => esc_html__( 'Import failed. Please check the file format.', 'post-export-import-with-media' ) ) );
    260272        }
     
    265277     */
    266278    public function ajax_check_and_download_image() {
     279        // CRITICAL: Close session early to allow concurrent requests
     280        if ( session_id() ) {
     281            session_write_close();
     282        }
     283       
    267284        if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ) ), 'peiwm_secure_nonce' ) ) {
    268285            wp_send_json_error( array( 'message' => esc_html__( 'Security check failed', 'post-export-import-with-media' ) ) );
     
    755772     */
    756773    private function find_existing_attachment_by_filename( $filename ) {
    757         // First try exact filename match
    758         $attachments = get_posts( array(
    759             'post_type' => 'attachment',
    760             'meta_query' => array(
    761                 array(
    762                     'key' => '_wp_attached_file',
    763                     'value' => $filename,
    764                     'compare' => 'LIKE'
    765                 )
    766             ),
    767             'posts_per_page' => 1
     774        global $wpdb;
     775       
     776        // Use direct database query for better performance
     777        $attachment_id = $wpdb->get_var( $wpdb->prepare(
     778            "SELECT post_id FROM {$wpdb->postmeta}
     779            WHERE meta_key = '_wp_attached_file'
     780            AND meta_value LIKE %s
     781            LIMIT 1",
     782            '%' . $wpdb->esc_like( $filename )
    768783        ) );
    769784
    770         if ( ! empty( $attachments ) ) {
    771             wp_reset_postdata(); // Reset before returning
    772             return $attachments[0]->ID;
    773         }
    774 
    775         // Reset after first query
    776         wp_reset_postdata();
     785        if ( $attachment_id ) {
     786            return absint( $attachment_id );
     787        }
    777788
    778789        // If not found, try searching by post title (filename without extension)
    779790        $title = pathinfo( $filename, PATHINFO_FILENAME );
    780         $attachments = get_posts( array(
    781             'post_type' => 'attachment',
    782             'title' => $title,
    783             'posts_per_page' => 1
     791        $attachment_id = $wpdb->get_var( $wpdb->prepare(
     792            "SELECT ID FROM {$wpdb->posts}
     793            WHERE post_type = 'attachment'
     794            AND post_title = %s
     795            LIMIT 1",
     796            $title
    784797        ) );
    785798
    786         if ( ! empty( $attachments ) ) {
    787             wp_reset_postdata(); // Reset before returning
    788             return $attachments[0]->ID;
    789         }
    790 
    791         // Reset after second query
    792         wp_reset_postdata();
    793 
    794         // Last resort: search by filename in post_title
    795         $attachments = get_posts( array(
    796             'post_type' => 'attachment',
    797             's' => $title,
    798             'posts_per_page' => 1
    799         ) );
    800 
    801         $result = ! empty( $attachments ) ? $attachments[0]->ID : null;
    802         wp_reset_postdata(); // Always reset at the end
    803         return $result;
     799        return $attachment_id ? absint( $attachment_id ) : null;
    804800    }
    805801
     
    987983        $metadata = wp_generate_attachment_metadata( $attachment_id, $file_path );
    988984        wp_update_attachment_metadata( $attachment_id, $metadata );
    989        
    990         // Reset global post data after metadata operations
    991         wp_reset_postdata();
    992985    }
    993986
     
    10211014        remove_filter( 'http_request_timeout', array( $this, 'set_import_timeout' ) );
    10221015        remove_filter( 'http_request_args', array( $this, 'set_import_request_args' ) );
    1023        
    1024         // Reset global post data after media_sideload_image (creates attachment posts)
    1025         wp_reset_postdata();
    10261016       
    10271017        if ( is_wp_error( $attachment_id ) ) {
     
    10721062     */
    10731063    public function set_import_timeout( $timeout ) {
    1074         return 30; // 30 seconds timeout
     1064        return 20; // 20 seconds timeout - reduced from 30
    10751065    }
    10761066
     
    10821072     */
    10831073    public function set_import_request_args( $args ) {
    1084         $args['timeout'] = 30;
    1085         $args['redirection'] = 3; // Limit redirects
     1074        $args['timeout'] = 20; // Reduced from 30
     1075        $args['redirection'] = 2; // Reduced from 3
     1076        $args['httpversion'] = '1.1'; // Use HTTP/1.1 for better compatibility
     1077        $args['blocking'] = true;
     1078        $args['compress'] = true; // Enable compression
    10861079        return $args;
    10871080    }
  • post-export-import-with-media/trunk/includes/class-widgets-menus-handler.php

    r3425395 r3460903  
    246246        $this->execute_with_post_protection( function() {
    247247            try {
    248                 $widgets_data_raw = isset( $_POST['widgets_data'] ) ? wp_unslash( $_POST['widgets_data'] ) : ''; // phpcs:ignore - Sanitize with sanitize_import_data
     248                // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Data is sanitized via sanitize_import_data() method below
     249                $widgets_data_raw = isset( $_POST['widgets_data'] ) ? wp_unslash( $_POST['widgets_data'] ) : '';
     250                // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash -- Already unslashed above
    249251                $replace_existing = isset( $_POST['replace_existing'] ) && $_POST['replace_existing'] === '1';
    250252               
     
    286288        $this->execute_with_post_protection( function() {
    287289            try {
    288                 $menus_data_raw = isset( $_POST['menus_data'] ) ? wp_unslash( $_POST['menus_data'] ) : ''; // phpcs:ignore - Sanitize with sanitize_import_data
     290                // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Data is sanitized via sanitize_import_data() method below
     291                $menus_data_raw = isset( $_POST['menus_data'] ) ? wp_unslash( $_POST['menus_data'] ) : '';
     292                // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash -- Already unslashed above
    289293                $replace_existing = isset( $_POST['replace_existing'] ) && $_POST['replace_existing'] === '1';
    290294               
     
    326330        $this->execute_with_post_protection( function() {
    327331            try {
    328                 $data_raw = isset( $_POST['widgets_menus_data'] ) ? wp_unslash( $_POST['widgets_menus_data'] ) : ''; // phpcs:ignore - Sanitize with sanitize_import_data
     332                // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Data is sanitized via sanitize_import_data() method below
     333                $data_raw = isset( $_POST['widgets_menus_data'] ) ? wp_unslash( $_POST['widgets_menus_data'] ) : '';
     334                // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash -- Already unslashed above
    329335                $replace_existing = isset( $_POST['replace_existing'] ) && $_POST['replace_existing'] === '1';
    330336               
  • post-export-import-with-media/trunk/languages/post-export-import-with-media.pot

    r3441984 r3460903  
    33msgstr ""
    44"Project-Id-Version: \n"
    5 "POT-Creation-Date: 2026-01-18 21:28+0600\n"
     5"POT-Creation-Date: 2026-02-13 22:17+0600\n"
    66"PO-Revision-Date: 2023-11-15 13:18+0600\n"
    77"Last-Translator: \n"
     
    4747#: includes/class-admin-download-buttons.php:244
    4848#: includes/class-admin-download-buttons.php:289
    49 #: includes/class-ajax-handler.php:65 includes/class-ajax-handler.php:102
    50 #: includes/class-ajax-handler.php:182 includes/class-ajax-handler.php:219
     49#: includes/class-ajax-handler.php:68 includes/class-ajax-handler.php:105
     50#: includes/class-ajax-handler.php:133 includes/class-ajax-handler.php:213
     51#: includes/class-ajax-handler.php:250 includes/class-batch-processor.php:80
     52#: includes/class-batch-processor.php:127
     53#: includes/class-batch-processor.php:227
     54#: includes/class-batch-processor.php:274
     55#: includes/class-batch-processor.php:373
     56#: includes/class-batch-processor.php:437
     57#: includes/class-batch-processor.php:553
     58#: includes/class-batch-processor.php:615
     59#: includes/class-batch-processor.php:669
     60#: includes/class-batch-processor.php:731
     61#: includes/class-batch-processor.php:924
    5162#: includes/class-generic-recommendations.php:164
    5263#: includes/class-media-handler.php:80 includes/class-media-handler.php:189
    5364#: includes/class-media-handler.php:319 includes/class-media-handler.php:400
    5465#: includes/class-media-handler.php:463 includes/class-page-handler.php:68
    55 #: includes/class-page-handler.php:125 includes/class-page-handler.php:260
    56 #: includes/class-page-handler.php:590 includes/class-post-handler.php:68
    57 #: includes/class-post-handler.php:125 includes/class-post-handler.php:268
    58 #: includes/class-post-handler.php:346 includes/class-settings-handler.php:154
     66#: includes/class-page-handler.php:137 includes/class-page-handler.php:273
     67#: includes/class-page-handler.php:603 includes/class-post-handler.php:68
     68#: includes/class-post-handler.php:137 includes/class-post-handler.php:285
     69#: includes/class-post-handler.php:363 includes/class-settings-handler.php:154
    5970#: includes/class-settings-handler.php:227
    6071#: includes/class-settings-handler.php:378
     
    6980#: includes/class-widgets-menus-handler.php:196
    7081#: includes/class-widgets-menus-handler.php:239
    71 #: includes/class-widgets-menus-handler.php:279
    72 #: includes/class-widgets-menus-handler.php:319
     82#: includes/class-widgets-menus-handler.php:281
     83#: includes/class-widgets-menus-handler.php:323
    7384msgid "Security check failed"
    7485msgstr ""
     
    7687#: includes/class-admin-download-buttons.php:248
    7788#: includes/class-admin-download-buttons.php:293
    78 #: includes/class-ajax-handler.php:69 includes/class-ajax-handler.php:106
    79 #: includes/class-ajax-handler.php:186 includes/class-ajax-handler.php:223
    80 #: includes/class-media-handler.php:84 includes/class-media-handler.php:193
    81 #: includes/class-media-handler.php:323 includes/class-media-handler.php:404
    82 #: includes/class-media-handler.php:467 includes/class-page-handler.php:72
    83 #: includes/class-page-handler.php:129 includes/class-page-handler.php:264
    84 #: includes/class-page-handler.php:594 includes/class-post-handler.php:72
    85 #: includes/class-post-handler.php:129 includes/class-post-handler.php:272
    86 #: includes/class-post-handler.php:350 includes/class-settings-handler.php:158
     89#: includes/class-ajax-handler.php:72 includes/class-ajax-handler.php:109
     90#: includes/class-ajax-handler.php:137 includes/class-ajax-handler.php:217
     91#: includes/class-ajax-handler.php:254 includes/class-batch-processor.php:84
     92#: includes/class-batch-processor.php:131
     93#: includes/class-batch-processor.php:231
     94#: includes/class-batch-processor.php:278
     95#: includes/class-batch-processor.php:377
     96#: includes/class-batch-processor.php:441
     97#: includes/class-batch-processor.php:557
     98#: includes/class-batch-processor.php:619
     99#: includes/class-batch-processor.php:673
     100#: includes/class-batch-processor.php:735
     101#: includes/class-batch-processor.php:928 includes/class-media-handler.php:84
     102#: includes/class-media-handler.php:193 includes/class-media-handler.php:323
     103#: includes/class-media-handler.php:404 includes/class-media-handler.php:467
     104#: includes/class-page-handler.php:72 includes/class-page-handler.php:141
     105#: includes/class-page-handler.php:277 includes/class-page-handler.php:607
     106#: includes/class-post-handler.php:72 includes/class-post-handler.php:141
     107#: includes/class-post-handler.php:289 includes/class-post-handler.php:367
     108#: includes/class-settings-handler.php:158
    87109#: includes/class-settings-handler.php:231
    88110#: includes/class-settings-handler.php:382
     
    97119#: includes/class-widgets-menus-handler.php:200
    98120#: includes/class-widgets-menus-handler.php:243
    99 #: includes/class-widgets-menus-handler.php:283
    100 #: includes/class-widgets-menus-handler.php:323
     121#: includes/class-widgets-menus-handler.php:285
     122#: includes/class-widgets-menus-handler.php:327
    101123msgid "Permission denied"
    102124msgstr ""
     
    144166msgstr ""
    145167
    146 #: includes/class-admin-menu.php:120
     168#: includes/class-admin-menu.php:122
    147169msgid "WP Post Export Import"
    148170msgstr ""
    149171
    150 #: includes/class-admin-menu.php:121
     172#: includes/class-admin-menu.php:123
    151173msgid "Export/Import Posts"
    152174msgstr ""
    153175
    154 #: includes/class-admin-menu.php:132 includes/class-admin-menu.php:133
    155 #: includes/class-admin-menu.php:571 includes/class-admin-menu.php:576
     176#: includes/class-admin-menu.php:134 includes/class-admin-menu.php:135
     177msgid "Export/Import Pages"
     178msgstr ""
     179
     180#: includes/class-admin-menu.php:144 includes/class-admin-menu.php:145
     181msgid "WordPress Settings"
     182msgstr ""
     183
     184#: includes/class-admin-menu.php:154 includes/class-admin-menu.php:855
     185msgid "Themes & Plugins Backup"
     186msgstr ""
     187
     188#: includes/class-admin-menu.php:155
     189msgid "Themes & Plugins"
     190msgstr ""
     191
     192#: includes/class-admin-menu.php:172
     193msgid "Plugin Recommendations"
     194msgstr ""
     195
     196#: includes/class-admin-menu.php:173
     197msgid "Recommendations"
     198msgstr ""
     199
     200#: includes/class-admin-menu.php:207 includes/class-admin-menu.php:240
     201#: includes/class-admin-menu.php:273 includes/class-admin-menu.php:306
     202msgid "Please select a file to import."
     203msgstr ""
     204
     205#: includes/class-admin-menu.php:208 includes/class-admin-menu.php:241
     206#: includes/class-admin-menu.php:274 includes/class-admin-menu.php:307
     207msgid "File is too large. Please select a file smaller than 500MB."
     208msgstr ""
     209
     210#: includes/class-admin-menu.php:209 includes/class-admin-menu.php:308
     211msgid "Please select a ZIP file."
     212msgstr ""
     213
     214#: includes/class-admin-menu.php:210 includes/class-admin-menu.php:243
     215#: includes/class-admin-menu.php:276 includes/class-admin-menu.php:309
     216msgid "Processing..."
     217msgstr ""
     218
     219#: includes/class-admin-menu.php:211 includes/class-admin-menu.php:244
     220#: includes/class-admin-menu.php:277 includes/class-admin-menu.php:310
     221#: includes/class-admin-menu.php:1114
     222msgid "Success!"
     223msgstr ""
     224
     225#: includes/class-admin-menu.php:212 includes/class-admin-menu.php:245
     226#: includes/class-admin-menu.php:278 includes/class-admin-menu.php:311
     227msgid "Error:"
     228msgstr ""
     229
     230#: includes/class-admin-menu.php:213 includes/class-admin-menu.php:246
     231#: includes/class-admin-menu.php:279 includes/class-admin-menu.php:312
     232msgid "Complete!"
     233msgstr ""
     234
     235#: includes/class-admin-menu.php:214 includes/class-admin-menu.php:247
     236#: includes/class-admin-menu.php:280 includes/class-admin-menu.php:313
     237msgid "Are you sure you want to delete all items? This action cannot be undone."
     238msgstr ""
     239
     240#: includes/class-admin-menu.php:242 includes/class-admin-menu.php:275
     241msgid "Please select a JSON file."
     242msgstr ""
     243
     244#: includes/class-admin-menu.php:370 includes/class-admin-menu.php:606
     245#: includes/class-admin-menu.php:700 includes/class-admin-menu.php:851
     246#: includes/class-admin-menu.php:1062 includes/class-batch-settings.php:279
     247#: includes/class-scheduled-exports.php:853
     248msgid "You do not have sufficient permissions to access this page."
     249msgstr ""
     250
     251#: includes/class-admin-menu.php:375
     252msgid "Export/Import Posts & Media"
     253msgstr ""
     254
     255#: includes/class-admin-menu.php:380
     256msgid "Posts Export/Import"
     257msgstr ""
     258
     259#: includes/class-admin-menu.php:383 includes/class-admin-menu.php:386
     260#: includes/class-admin-menu.php:561
     261msgid "Export Posts"
     262msgstr ""
     263
     264#: includes/class-admin-menu.php:384
     265msgid "Export all posts with their metadata and featured images."
     266msgstr ""
     267
     268#: includes/class-admin-menu.php:391
     269msgid "Import Posts"
     270msgstr ""
     271
     272#: includes/class-admin-menu.php:392
     273msgid "Import posts from a previously exported JSON file."
     274msgstr ""
     275
     276#: includes/class-admin-menu.php:396 includes/class-admin-menu.php:632
     277#: includes/class-admin-menu.php:761 includes/class-admin-menu.php:812
     278msgid "Select JSON File"
     279msgstr ""
     280
     281#: includes/class-admin-menu.php:399 includes/class-admin-menu.php:487
     282#: includes/class-admin-menu.php:635 includes/class-admin-menu.php:764
     283#: includes/class-admin-menu.php:815 includes/class-admin-menu.php:911
     284#: includes/class-admin-menu.php:994
     285msgid "Start Import"
     286msgstr ""
     287
     288#: includes/class-admin-menu.php:407
     289msgid "Check media library for post images"
     290msgstr ""
     291
     292#: includes/class-admin-menu.php:409
     293msgid "Check if images already exist in media library before importing. Uncheck for faster import (images will be missing)."
     294msgstr ""
     295
     296#: includes/class-admin-menu.php:417 includes/class-admin-menu.php:653
     297msgid "Download missing images from original URLs"
     298msgstr ""
     299
     300#: includes/class-admin-menu.php:419
     301msgid "If images are not found in media library, try to download them from their original locations. Uncheck for faster import."
     302msgstr ""
     303
     304#: includes/class-admin-menu.php:426 includes/class-admin-menu.php:492
     305#: includes/class-admin-menu.php:662 includes/class-admin-menu.php:774
     306#: includes/class-admin-menu.php:830 includes/class-admin-menu.php:933
     307#: includes/class-admin-menu.php:1016
     308msgid "Import Progress"
     309msgstr ""
     310
     311#: includes/class-admin-menu.php:430 includes/class-admin-menu.php:447
     312#: includes/class-admin-menu.php:496 includes/class-admin-menu.php:513
     313#: includes/class-admin-menu.php:666 includes/class-admin-menu.php:683
     314#: includes/class-admin-menu.php:778 includes/class-admin-menu.php:834
     315#: includes/class-admin-menu.php:896 includes/class-admin-menu.php:937
     316#: includes/class-admin-menu.php:979 includes/class-admin-menu.php:1020
     317msgid "Starting..."
     318msgstr ""
     319
     320#: includes/class-admin-menu.php:436
     321msgid "Delete Posts"
     322msgstr ""
     323
     324#: includes/class-admin-menu.php:437
     325msgid "⚠️ Warning: This will permanently delete all posts. This action cannot be undone."
     326msgstr ""
     327
     328#: includes/class-admin-menu.php:439
     329msgid "Delete All Posts"
     330msgstr ""
     331
     332#: includes/class-admin-menu.php:443 includes/class-admin-menu.php:509
     333msgid "Delete Progress"
     334msgstr ""
     335
     336#: includes/class-admin-menu.php:454
     337msgid "Media Export/Import"
     338msgstr ""
     339
     340#: includes/class-admin-menu.php:457
     341msgid "Media Statistics"
     342msgstr ""
     343
     344#: includes/class-admin-menu.php:461
     345msgid "Loading media statistics..."
     346msgstr ""
     347
     348#: includes/class-admin-menu.php:462
     349msgid "Analyzing your media library"
     350msgstr ""
     351
     352#: includes/class-admin-menu.php:466
     353msgid "Refresh Stats"
     354msgstr ""
     355
     356#: includes/class-admin-menu.php:471 includes/class-admin-menu.php:474
     357msgid "Export Media"
     358msgstr ""
     359
     360#: includes/class-admin-menu.php:472
     361msgid "Export all media files with their metadata as a ZIP file."
     362msgstr ""
     363
     364#: includes/class-admin-menu.php:479
     365msgid "Import Media"
     366msgstr ""
     367
     368#: includes/class-admin-menu.php:480
     369msgid "Import media files from a previously exported ZIP file. Maximum file size: 500MB."
     370msgstr ""
     371
     372#: includes/class-admin-menu.php:484 includes/class-admin-menu.php:908
     373#: includes/class-admin-menu.php:991
     374msgid "Select ZIP File"
     375msgstr ""
     376
     377#: includes/class-admin-menu.php:502
     378msgid "Delete Media"
     379msgstr ""
     380
     381#: includes/class-admin-menu.php:503
     382msgid "⚠️ Warning: This will permanently delete all media files from the library. This action cannot be undone."
     383msgstr ""
     384
     385#: includes/class-admin-menu.php:505
     386msgid "Delete All Media"
     387msgstr ""
     388
     389#: includes/class-admin-menu.php:521
     390msgid "System Test"
     391msgstr ""
     392
     393#: includes/class-admin-menu.php:522
     394msgid "Test your server configuration to ensure compatibility."
     395msgstr ""
     396
     397#: includes/class-admin-menu.php:524
     398msgid "Test Configuration"
     399msgstr ""
     400
     401#: includes/class-admin-menu.php:531
     402msgid "How to Use This Plugin"
     403msgstr ""
     404
     405#: includes/class-admin-menu.php:532
     406msgid "Follow these steps for successful export and import with all images intact:"
     407msgstr ""
     408
     409#: includes/class-admin-menu.php:540
     410msgid "Export Media Files"
     411msgstr ""
     412
     413#: includes/class-admin-menu.php:544
     414msgid "Start by exporting all your media files using the \"Export Media\" button above. This will create a ZIP file containing your images, videos, and documents."
     415msgstr ""
     416
     417#: includes/class-admin-menu.php:550
     418msgid "If your images are still available on the live site, you can enable \"Download missing images from original URLs\". This option downloads media directly from their original sources instead of the export file. Note that this may take more time. For faster imports, export the media first and keep this option unchecked."
     419msgstr ""
     420
     421#: includes/class-admin-menu.php:562
     422msgid "Next, export your posts using the \"Export Posts\" button. This creates a JSON file with all post content and image references."
     423msgstr ""
     424
     425#: includes/class-admin-menu.php:569
     426msgid "Import Media First"
     427msgstr ""
     428
     429#: includes/class-admin-menu.php:570
     430msgid "On your destination site, import the media ZIP file first. This ensures all images are available before importing posts."
     431msgstr ""
     432
     433#: includes/class-admin-menu.php:577
     434msgid "Import Posts Last"
     435msgstr ""
     436
     437#: includes/class-admin-menu.php:578
     438msgid "Finally, import the posts JSON file. The plugin will automatically link posts to the previously imported images."
     439msgstr ""
     440
     441#: includes/class-admin-menu.php:584
     442msgid "Pro Tips"
     443msgstr ""
     444
     445#: includes/class-admin-menu.php:586
     446msgid "✓ Always import media before posts for complete image restoration"
     447msgstr ""
     448
     449#: includes/class-admin-menu.php:587
     450msgid "✓ The plugin will show which images are missing during post import"
     451msgstr ""
     452
     453#: includes/class-admin-menu.php:588
     454msgid "✓ Run the System Test first to ensure your server can handle large files"
     455msgstr ""
     456
     457#: includes/class-admin-menu.php:589
     458msgid "✓ Existing images with the same filename will be reused automatically"
     459msgstr ""
     460
     461#: includes/class-admin-menu.php:590
     462msgid "✓ If you enable \"Download missing images from original URLs\" and ensure the source site is live, media will be fetched directly from the original URLs. This means you won’t need to import media files separately, though the process may take additional time to download and complete."
     463msgstr ""
     464
     465#: includes/class-admin-menu.php:611 includes/class-admin-menu.php:616
    156466msgid "Pages Export/Import"
    157467msgstr ""
    158468
    159 #: includes/class-admin-menu.php:142 includes/class-admin-menu.php:143
    160 msgid "WordPress Settings"
    161 msgstr ""
    162 
    163 #: includes/class-admin-menu.php:152 includes/class-admin-menu.php:805
    164 msgid "Themes & Plugins Backup"
    165 msgstr ""
    166 
    167 #: includes/class-admin-menu.php:153
    168 msgid "Themes & Plugins"
    169 msgstr ""
    170 
    171 #: includes/class-admin-menu.php:162
    172 msgid "Plugin Recommendations"
    173 msgstr ""
    174 
    175 #: includes/class-admin-menu.php:163
    176 msgid "Recommendations"
    177 msgstr ""
    178 
    179 #: includes/class-admin-menu.php:197 includes/class-admin-menu.php:230
    180 #: includes/class-admin-menu.php:263 includes/class-admin-menu.php:296
    181 msgid "Please select a file to import."
    182 msgstr ""
    183 
    184 #: includes/class-admin-menu.php:198 includes/class-admin-menu.php:231
    185 #: includes/class-admin-menu.php:264 includes/class-admin-menu.php:297
    186 msgid "File is too large. Please select a file smaller than 500MB."
    187 msgstr ""
    188 
    189 #: includes/class-admin-menu.php:199 includes/class-admin-menu.php:298
    190 msgid "Please select a ZIP file."
    191 msgstr ""
    192 
    193 #: includes/class-admin-menu.php:200 includes/class-admin-menu.php:233
    194 #: includes/class-admin-menu.php:266 includes/class-admin-menu.php:299
    195 msgid "Processing..."
    196 msgstr ""
    197 
    198 #: includes/class-admin-menu.php:201 includes/class-admin-menu.php:234
    199 #: includes/class-admin-menu.php:267 includes/class-admin-menu.php:300
    200 #: includes/class-admin-menu.php:1064
    201 msgid "Success!"
    202 msgstr ""
    203 
    204 #: includes/class-admin-menu.php:202 includes/class-admin-menu.php:235
    205 #: includes/class-admin-menu.php:268 includes/class-admin-menu.php:301
    206 msgid "Error:"
    207 msgstr ""
    208 
    209 #: includes/class-admin-menu.php:203 includes/class-admin-menu.php:236
    210 #: includes/class-admin-menu.php:269 includes/class-admin-menu.php:302
    211 msgid "Complete!"
    212 msgstr ""
    213 
    214 #: includes/class-admin-menu.php:204 includes/class-admin-menu.php:237
    215 #: includes/class-admin-menu.php:270 includes/class-admin-menu.php:303
    216 msgid "Are you sure you want to delete all items? This action cannot be undone."
    217 msgstr ""
    218 
    219 #: includes/class-admin-menu.php:232 includes/class-admin-menu.php:265
    220 msgid "Please select a JSON file."
    221 msgstr ""
    222 
    223 #: includes/class-admin-menu.php:340 includes/class-admin-menu.php:566
    224 #: includes/class-admin-menu.php:650 includes/class-admin-menu.php:801
    225 #: includes/class-admin-menu.php:1012
    226 msgid "You do not have sufficient permissions to access this page."
    227 msgstr ""
    228 
    229 #: includes/class-admin-menu.php:345
    230 msgid "Export/Import Posts & Media"
    231 msgstr ""
    232 
    233 #: includes/class-admin-menu.php:350
    234 msgid "Posts Export/Import"
    235 msgstr ""
    236 
    237 #: includes/class-admin-menu.php:353 includes/class-admin-menu.php:356
    238 #: includes/class-admin-menu.php:521
    239 msgid "Export Posts"
    240 msgstr ""
    241 
    242 #: includes/class-admin-menu.php:354
    243 msgid "Export all posts with their metadata and featured images."
    244 msgstr ""
    245 
    246 #: includes/class-admin-menu.php:361
    247 msgid "Import Posts"
    248 msgstr ""
    249 
    250 #: includes/class-admin-menu.php:362
    251 msgid "Import posts from a previously exported JSON file."
    252 msgstr ""
    253 
    254 #: includes/class-admin-menu.php:366 includes/class-admin-menu.php:592
    255 #: includes/class-admin-menu.php:711 includes/class-admin-menu.php:762
    256 msgid "Select JSON File"
    257 msgstr ""
    258 
    259 #: includes/class-admin-menu.php:369 includes/class-admin-menu.php:447
    260 #: includes/class-admin-menu.php:595 includes/class-admin-menu.php:714
    261 #: includes/class-admin-menu.php:765 includes/class-admin-menu.php:861
    262 #: includes/class-admin-menu.php:944
    263 msgid "Start Import"
    264 msgstr ""
    265 
    266 #: includes/class-admin-menu.php:377 includes/class-admin-menu.php:603
    267 msgid "Download missing images from original URLs"
    268 msgstr ""
    269 
    270 #: includes/class-admin-menu.php:379 includes/class-admin-menu.php:605
     469#: includes/class-admin-menu.php:619 includes/class-admin-menu.php:622
     470msgid "Export Pages"
     471msgstr ""
     472
     473#: includes/class-admin-menu.php:620
     474msgid "Export all pages with their metadata, featured images, and hierarchy."
     475msgstr ""
     476
     477#: includes/class-admin-menu.php:627
     478msgid "Import Pages"
     479msgstr ""
     480
     481#: includes/class-admin-menu.php:628
     482msgid "Import pages from a previously exported JSON file."
     483msgstr ""
     484
     485#: includes/class-admin-menu.php:643
     486msgid "Check media library for page images"
     487msgstr ""
     488
     489#: includes/class-admin-menu.php:645
     490msgid "Search for images in your media library before downloading. Uncheck for faster import if you plan to add images manually later."
     491msgstr ""
     492
     493#: includes/class-admin-menu.php:655
    271494msgid "If images are not found in media library, try to download them from their original locations"
    272495msgstr ""
    273496
    274 #: includes/class-admin-menu.php:386 includes/class-admin-menu.php:452
    275 #: includes/class-admin-menu.php:612 includes/class-admin-menu.php:724
    276 #: includes/class-admin-menu.php:780 includes/class-admin-menu.php:883
    277 #: includes/class-admin-menu.php:966
    278 msgid "Import Progress"
    279 msgstr ""
    280 
    281 #: includes/class-admin-menu.php:390 includes/class-admin-menu.php:407
    282 #: includes/class-admin-menu.php:456 includes/class-admin-menu.php:473
    283 #: includes/class-admin-menu.php:616 includes/class-admin-menu.php:633
    284 #: includes/class-admin-menu.php:728 includes/class-admin-menu.php:784
    285 #: includes/class-admin-menu.php:846 includes/class-admin-menu.php:887
    286 #: includes/class-admin-menu.php:929 includes/class-admin-menu.php:970
    287 msgid "Starting..."
    288 msgstr ""
    289 
    290 #: includes/class-admin-menu.php:396
    291 msgid "Delete Posts"
    292 msgstr ""
    293 
    294 #: includes/class-admin-menu.php:397
    295 msgid "⚠️ Warning: This will permanently delete all posts. This action cannot be undone."
    296 msgstr ""
    297 
    298 #: includes/class-admin-menu.php:399
    299 msgid "Delete All Posts"
    300 msgstr ""
    301 
    302 #: includes/class-admin-menu.php:403 includes/class-admin-menu.php:469
    303 msgid "Delete Progress"
    304 msgstr ""
    305 
    306 #: includes/class-admin-menu.php:414
    307 msgid "Media Export/Import"
    308 msgstr ""
    309 
    310 #: includes/class-admin-menu.php:417
    311 msgid "Media Statistics"
    312 msgstr ""
    313 
    314 #: includes/class-admin-menu.php:421
    315 msgid "Loading media statistics..."
    316 msgstr ""
    317 
    318 #: includes/class-admin-menu.php:422
    319 msgid "Analyzing your media library"
    320 msgstr ""
    321 
    322 #: includes/class-admin-menu.php:426
    323 msgid "Refresh Stats"
    324 msgstr ""
    325 
    326 #: includes/class-admin-menu.php:431 includes/class-admin-menu.php:434
    327 msgid "Export Media"
    328 msgstr ""
    329 
    330 #: includes/class-admin-menu.php:432
    331 msgid "Export all media files with their metadata as a ZIP file."
    332 msgstr ""
    333 
    334 #: includes/class-admin-menu.php:439
    335 msgid "Import Media"
    336 msgstr ""
    337 
    338 #: includes/class-admin-menu.php:440
    339 msgid "Import media files from a previously exported ZIP file. Maximum file size: 500MB."
    340 msgstr ""
    341 
    342 #: includes/class-admin-menu.php:444 includes/class-admin-menu.php:858
    343 #: includes/class-admin-menu.php:941
    344 msgid "Select ZIP File"
    345 msgstr ""
    346 
    347 #: includes/class-admin-menu.php:462
    348 msgid "Delete Media"
    349 msgstr ""
    350 
    351 #: includes/class-admin-menu.php:463
    352 msgid "⚠️ Warning: This will permanently delete all media files from the library. This action cannot be undone."
    353 msgstr ""
    354 
    355 #: includes/class-admin-menu.php:465
    356 msgid "Delete All Media"
    357 msgstr ""
    358 
    359 #: includes/class-admin-menu.php:481
    360 msgid "System Test"
    361 msgstr ""
    362 
    363 #: includes/class-admin-menu.php:482
    364 msgid "Test your server configuration to ensure compatibility."
    365 msgstr ""
    366 
    367 #: includes/class-admin-menu.php:484
    368 msgid "Test Configuration"
    369 msgstr ""
    370 
    371 #: includes/class-admin-menu.php:491
    372 msgid "How to Use This Plugin"
    373 msgstr ""
    374 
    375 #: includes/class-admin-menu.php:492
    376 msgid "Follow these steps for successful export and import with all images intact:"
    377 msgstr ""
    378 
    379 #: includes/class-admin-menu.php:500
    380 msgid "Export Media Files"
    381 msgstr ""
    382 
    383 #: includes/class-admin-menu.php:504
    384 msgid "Start by exporting all your media files using the \"Export Media\" button above. This will create a ZIP file containing your images, videos, and documents."
    385 msgstr ""
    386 
    387 #: includes/class-admin-menu.php:510
    388 msgid "If your images are still available on the live site, you can enable \"Download missing images from original URLs\". This option downloads media directly from their original sources instead of the export file. Note that this may take more time. For faster imports, export the media first and keep this option unchecked."
    389 msgstr ""
    390 
    391 #: includes/class-admin-menu.php:522
    392 msgid "Next, export your posts using the \"Export Posts\" button. This creates a JSON file with all post content and image references."
    393 msgstr ""
    394 
    395 #: includes/class-admin-menu.php:529
    396 msgid "Import Media First"
    397 msgstr ""
    398 
    399 #: includes/class-admin-menu.php:530
    400 msgid "On your destination site, import the media ZIP file first. This ensures all images are available before importing posts."
    401 msgstr ""
    402 
    403 #: includes/class-admin-menu.php:537
    404 msgid "Import Posts Last"
    405 msgstr ""
    406 
    407 #: includes/class-admin-menu.php:538
    408 msgid "Finally, import the posts JSON file. The plugin will automatically link posts to the previously imported images."
    409 msgstr ""
    410 
    411 #: includes/class-admin-menu.php:544
    412 msgid "Pro Tips"
    413 msgstr ""
    414 
    415 #: includes/class-admin-menu.php:546
    416 msgid "✓ Always import media before posts for complete image restoration"
    417 msgstr ""
    418 
    419 #: includes/class-admin-menu.php:547
    420 msgid "✓ The plugin will show which images are missing during post import"
    421 msgstr ""
    422 
    423 #: includes/class-admin-menu.php:548
    424 msgid "✓ Run the System Test first to ensure your server can handle large files"
    425 msgstr ""
    426 
    427 #: includes/class-admin-menu.php:549
    428 msgid "✓ Existing images with the same filename will be reused automatically"
    429 msgstr ""
    430 
    431 #: includes/class-admin-menu.php:550
    432 msgid "✓ If you enable \"Download missing images from original URLs\" and ensure the source site is live, media will be fetched directly from the original URLs. This means you won’t need to import media files separately, though the process may take additional time to download and complete."
    433 msgstr ""
    434 
    435 #: includes/class-admin-menu.php:579 includes/class-admin-menu.php:582
    436 msgid "Export Pages"
    437 msgstr ""
    438 
    439 #: includes/class-admin-menu.php:580
    440 msgid "Export all pages with their metadata, featured images, and hierarchy."
    441 msgstr ""
    442 
    443 #: includes/class-admin-menu.php:587
    444 msgid "Import Pages"
    445 msgstr ""
    446 
    447 #: includes/class-admin-menu.php:588
    448 msgid "Import pages from a previously exported JSON file."
    449 msgstr ""
    450 
    451 #: includes/class-admin-menu.php:622 includes/class-admin-menu.php:625
     497#: includes/class-admin-menu.php:672 includes/class-admin-menu.php:675
    452498msgid "Delete All Pages"
    453499msgstr ""
    454500
    455 #: includes/class-admin-menu.php:623
     501#: includes/class-admin-menu.php:673
    456502msgid "Permanently delete all pages from your website. This action cannot be undone."
    457503msgstr ""
    458504
    459 #: includes/class-admin-menu.php:629
     505#: includes/class-admin-menu.php:679
    460506msgid "Deletion Progress"
    461507msgstr ""
    462508
    463 #: includes/class-admin-menu.php:655 includes/class-admin-menu.php:660
     509#: includes/class-admin-menu.php:705 includes/class-admin-menu.php:710
    464510msgid "WordPress Settings Export/Import"
    465511msgstr ""
    466512
    467 #: includes/class-admin-menu.php:663 includes/class-admin-menu.php:701
     513#: includes/class-admin-menu.php:713 includes/class-admin-menu.php:751
    468514msgid "Export Settings"
    469515msgstr ""
    470516
    471 #: includes/class-admin-menu.php:664
     517#: includes/class-admin-menu.php:714
    472518msgid "Export WordPress configuration settings from General, Writing, Reading, Discussion, Media, Permalinks, and Privacy sections."
    473519msgstr ""
    474520
    475 #: includes/class-admin-menu.php:667
     521#: includes/class-admin-menu.php:717
    476522msgid "Select Settings Groups to Export:"
    477523msgstr ""
    478524
    479 #: includes/class-admin-menu.php:671 includes/class-settings-handler.php:418
     525#: includes/class-admin-menu.php:721 includes/class-settings-handler.php:418
    480526msgid "General Settings"
    481527msgstr ""
    482528
    483 #: includes/class-admin-menu.php:675 includes/class-settings-handler.php:423
     529#: includes/class-admin-menu.php:725 includes/class-settings-handler.php:423
    484530msgid "Writing Settings"
    485531msgstr ""
    486532
    487 #: includes/class-admin-menu.php:679 includes/class-settings-handler.php:428
     533#: includes/class-admin-menu.php:729 includes/class-settings-handler.php:428
    488534msgid "Reading Settings"
    489535msgstr ""
    490536
    491 #: includes/class-admin-menu.php:683 includes/class-settings-handler.php:433
     537#: includes/class-admin-menu.php:733 includes/class-settings-handler.php:433
    492538msgid "Discussion Settings"
    493539msgstr ""
    494540
    495 #: includes/class-admin-menu.php:687 includes/class-settings-handler.php:438
     541#: includes/class-admin-menu.php:737 includes/class-settings-handler.php:438
    496542msgid "Media Settings"
    497543msgstr ""
    498544
    499 #: includes/class-admin-menu.php:691 includes/class-settings-handler.php:443
     545#: includes/class-admin-menu.php:741 includes/class-settings-handler.php:443
    500546msgid "Permalink Settings"
    501547msgstr ""
    502548
    503 #: includes/class-admin-menu.php:695 includes/class-settings-handler.php:448
     549#: includes/class-admin-menu.php:745 includes/class-settings-handler.php:448
    504550msgid "Privacy Settings"
    505551msgstr ""
    506552
    507 #: includes/class-admin-menu.php:706
     553#: includes/class-admin-menu.php:756
    508554msgid "Import Settings"
    509555msgstr ""
    510556
    511 #: includes/class-admin-menu.php:707
     557#: includes/class-admin-menu.php:757
    512558msgid "Import WordPress settings from a previously exported JSON file."
    513559msgstr ""
    514560
    515 #: includes/class-admin-menu.php:719
     561#: includes/class-admin-menu.php:769
    516562msgid "Settings Preview & Selection:"
    517563msgstr ""
    518564
    519 #: includes/class-admin-menu.php:736
     565#: includes/class-admin-menu.php:786
    520566msgid "Widgets & Navigation Menus"
    521567msgstr ""
    522568
    523 #: includes/class-admin-menu.php:739
     569#: includes/class-admin-menu.php:789
    524570msgid "Export Widgets & Menus"
    525571msgstr ""
    526572
    527 #: includes/class-admin-menu.php:740
     573#: includes/class-admin-menu.php:790
    528574msgid "Export your widgets and navigation menus configuration."
    529575msgstr ""
    530576
    531 #: includes/class-admin-menu.php:744
     577#: includes/class-admin-menu.php:794
    532578msgid "Export Widgets Only"
    533579msgstr ""
    534580
    535 #: includes/class-admin-menu.php:747
     581#: includes/class-admin-menu.php:797
    536582msgid "Export Menus Only"
    537583msgstr ""
    538584
    539 #: includes/class-admin-menu.php:750
     585#: includes/class-admin-menu.php:800
    540586msgid "Export Both"
    541587msgstr ""
    542588
    543 #: includes/class-admin-menu.php:756
     589#: includes/class-admin-menu.php:806
    544590msgid "Import Widgets & Menus"
    545591msgstr ""
    546592
    547 #: includes/class-admin-menu.php:757
     593#: includes/class-admin-menu.php:807
    548594msgid "Import widgets and navigation menus from a previously exported JSON file."
    549595msgstr ""
    550596
    551 #: includes/class-admin-menu.php:773
     597#: includes/class-admin-menu.php:823
    552598msgid "Replace existing widgets and menus"
    553599msgstr ""
    554600
    555 #: includes/class-admin-menu.php:774
     601#: includes/class-admin-menu.php:824
    556602msgid "Clear existing widgets and menus before importing"
    557603msgstr ""
    558604
    559 #: includes/class-admin-menu.php:812
     605#: includes/class-admin-menu.php:862
    560606msgid "Themes Backup"
    561607msgstr ""
    562608
    563 #: includes/class-admin-menu.php:815 includes/class-admin-menu.php:838
     609#: includes/class-admin-menu.php:865 includes/class-admin-menu.php:888
    564610msgid "Export Themes"
    565611msgstr ""
    566612
    567 #: includes/class-admin-menu.php:816
     613#: includes/class-admin-menu.php:866
    568614msgid "Create a backup of your themes as a ZIP file."
    569615msgstr ""
    570616
    571 #: includes/class-admin-menu.php:821
     617#: includes/class-admin-menu.php:871
    572618msgid "Active Theme Only"
    573619msgstr ""
    574620
    575 #: includes/class-admin-menu.php:825
     621#: includes/class-admin-menu.php:875
    576622msgid "All Installed Themes"
    577623msgstr ""
    578624
    579 #: includes/class-admin-menu.php:829
     625#: includes/class-admin-menu.php:879
    580626msgid "Selected Themes"
    581627msgstr ""
    582628
    583 #: includes/class-admin-menu.php:842 includes/class-admin-menu.php:925
     629#: includes/class-admin-menu.php:892 includes/class-admin-menu.php:975
    584630msgid "Export Progress"
    585631msgstr ""
    586632
    587 #: includes/class-admin-menu.php:852
     633#: includes/class-admin-menu.php:902
    588634msgid "Import Themes"
    589635msgstr ""
    590636
    591 #: includes/class-admin-menu.php:853
     637#: includes/class-admin-menu.php:903
    592638msgid "Import themes from a previously exported ZIP file."
    593639msgstr ""
    594640
    595 #: includes/class-admin-menu.php:869
     641#: includes/class-admin-menu.php:919
    596642msgid "Replace existing themes"
    597643msgstr ""
    598644
    599 #: includes/class-admin-menu.php:870
     645#: includes/class-admin-menu.php:920
    600646msgid "Overwrite themes that already exist"
    601647msgstr ""
    602648
    603 #: includes/class-admin-menu.php:876
     649#: includes/class-admin-menu.php:926
    604650msgid "Activate imported theme"
    605651msgstr ""
    606652
    607 #: includes/class-admin-menu.php:877
     653#: includes/class-admin-menu.php:927
    608654msgid "Switch to the first imported theme"
    609655msgstr ""
    610656
    611 #: includes/class-admin-menu.php:895
     657#: includes/class-admin-menu.php:945
    612658msgid "Plugins Backup"
    613659msgstr ""
    614660
    615 #: includes/class-admin-menu.php:898 includes/class-admin-menu.php:921
     661#: includes/class-admin-menu.php:948 includes/class-admin-menu.php:971
    616662msgid "Export Plugins"
    617663msgstr ""
    618664
    619 #: includes/class-admin-menu.php:899
     665#: includes/class-admin-menu.php:949
    620666msgid "Create a backup of your plugins as a ZIP file."
    621667msgstr ""
    622668
    623 #: includes/class-admin-menu.php:904
     669#: includes/class-admin-menu.php:954
    624670msgid "Active Plugins Only"
    625671msgstr ""
    626672
    627 #: includes/class-admin-menu.php:908
     673#: includes/class-admin-menu.php:958
    628674msgid "All Installed Plugins"
    629675msgstr ""
    630676
    631 #: includes/class-admin-menu.php:912
     677#: includes/class-admin-menu.php:962
    632678msgid "Selected Plugins"
    633679msgstr ""
    634680
    635 #: includes/class-admin-menu.php:935
     681#: includes/class-admin-menu.php:985
    636682msgid "Import Plugins"
    637683msgstr ""
    638684
    639 #: includes/class-admin-menu.php:936
     685#: includes/class-admin-menu.php:986
    640686msgid "Import plugins from a previously exported ZIP file."
    641687msgstr ""
    642688
    643 #: includes/class-admin-menu.php:952
     689#: includes/class-admin-menu.php:1002
    644690msgid "Replace existing plugins"
    645691msgstr ""
    646692
    647 #: includes/class-admin-menu.php:953
     693#: includes/class-admin-menu.php:1003
    648694msgid "Overwrite plugins that already exist"
    649695msgstr ""
    650696
    651 #: includes/class-admin-menu.php:959
     697#: includes/class-admin-menu.php:1009
    652698msgid "Activate imported plugins"
    653699msgstr ""
    654700
    655 #: includes/class-admin-menu.php:960
     701#: includes/class-admin-menu.php:1010
    656702msgid "Automatically activate plugins after import"
    657703msgstr ""
    658704
    659 #: includes/class-admin-menu.php:978
     705#: includes/class-admin-menu.php:1028 includes/class-scheduled-exports.php:969
    660706msgid "Settings"
    661707msgstr ""
    662708
    663 #: includes/class-admin-menu.php:985
     709#: includes/class-admin-menu.php:1035
    664710msgid "Admin Download Buttons"
    665711msgstr ""
    666712
    667 #: includes/class-admin-menu.php:988
     713#: includes/class-admin-menu.php:1038
    668714msgid "Add download buttons to WordPress Themes and Plugins pages"
    669715msgstr ""
    670716
    671 #: includes/class-admin-menu.php:991
     717#: includes/class-admin-menu.php:1041
    672718msgid "When enabled, download buttons will appear on the Appearance > Themes and Plugins pages, allowing you to download individual themes and plugins as ZIP files."
    673719msgstr ""
    674720
    675 #: includes/class-admin-menu.php:1021
     721#: includes/class-admin-menu.php:1071
    676722msgid "Discover powerful plugins to enhance your WordPress experience and boost your site's functionality"
    677723msgstr ""
    678724
    679 #: includes/class-admin-menu.php:1043
     725#: includes/class-admin-menu.php:1093
    680726msgid "Confirmation"
    681727msgstr ""
    682728
    683 #: includes/class-admin-menu.php:1047
     729#: includes/class-admin-menu.php:1097
    684730msgid "Are you sure you want to proceed?"
    685731msgstr ""
    686732
    687 #: includes/class-admin-menu.php:1051
     733#: includes/class-admin-menu.php:1101 includes/class-scheduled-exports.php:1127
    688734msgid "Cancel"
    689735msgstr ""
    690736
    691 #: includes/class-admin-menu.php:1054
     737#: includes/class-admin-menu.php:1104
    692738msgid "Confirm"
    693739msgstr ""
    694740
    695 #: includes/class-admin-menu.php:1069
     741#: includes/class-admin-menu.php:1119
    696742msgid "Operation completed successfully!"
    697743msgstr ""
    698744
    699 #: includes/class-admin-menu.php:1073
     745#: includes/class-admin-menu.php:1123
    700746msgid "OK"
    701747msgstr ""
    702748
    703 #: includes/class-admin-menu.php:1083
     749#: includes/class-admin-menu.php:1133
    704750msgid "Error"
    705751msgstr ""
    706752
    707 #: includes/class-admin-menu.php:1088
     753#: includes/class-admin-menu.php:1138
    708754msgid "An error occurred."
    709755msgstr ""
    710756
    711 #: includes/class-admin-menu.php:1092
     757#: includes/class-admin-menu.php:1142
    712758msgid "Close"
    713759msgstr ""
    714760
    715 #: includes/class-ajax-handler.php:93
     761#: includes/class-ajax-handler.php:96
    716762msgid "System test failed"
    717763msgstr ""
    718764
    719 #: includes/class-ajax-handler.php:128
     765#: includes/class-ajax-handler.php:124
     766msgid "Failed to get content statistics"
     767msgstr ""
     768
     769#: includes/class-ajax-handler.php:159
    720770msgid "Failed to initialize filesystem"
    721771msgstr ""
    722772
    723 #: includes/class-ajax-handler.php:173
     773#: includes/class-ajax-handler.php:204
    724774msgid "Failed to get media statistics"
    725775msgstr ""
    726776
    727 #: includes/class-ajax-handler.php:192 includes/class-ajax-handler.php:229
     777#: includes/class-ajax-handler.php:223 includes/class-ajax-handler.php:260
    728778msgid "File not specified"
    729779msgstr ""
    730780
    731 #: includes/class-ajax-handler.php:199 includes/class-ajax-handler.php:236
     781#: includes/class-ajax-handler.php:230 includes/class-ajax-handler.php:267
    732782msgid "File not found"
     783msgstr ""
     784
     785#: includes/class-batch-processor.php:93
     786msgid "No posts found to export"
     787msgstr ""
     788
     789#: includes/class-batch-processor.php:118
     790#: includes/class-batch-processor.php:265
     791#: includes/class-batch-processor.php:428
     792msgid "Failed to start batch export"
     793msgstr ""
     794
     795#: includes/class-batch-processor.php:139
     796#: includes/class-batch-processor.php:286
     797#: includes/class-batch-processor.php:449
     798#: includes/class-batch-processor.php:627
     799#: includes/class-batch-processor.php:743 includes/class-media-handler.php:332
     800msgid "Invalid batch ID"
     801msgstr ""
     802
     803#: includes/class-batch-processor.php:145
     804#: includes/class-batch-processor.php:292
     805#: includes/class-batch-processor.php:455
     806#: includes/class-batch-processor.php:633
     807#: includes/class-batch-processor.php:749
     808msgid "Batch session expired"
     809msgstr ""
     810
     811#: includes/class-batch-processor.php:191
     812#: includes/class-batch-processor.php:337
     813#: includes/class-batch-processor.php:467 includes/class-media-handler.php:107
     814msgid "Could not create export directory"
     815msgstr ""
     816
     817#: includes/class-batch-processor.php:199
     818#: includes/class-batch-processor.php:345
     819msgid "Failed to write export file"
     820msgstr ""
     821
     822#: includes/class-batch-processor.php:240
     823msgid "No pages found to export"
     824msgstr ""
     825
     826#: includes/class-batch-processor.php:382 includes/class-media-handler.php:89
     827msgid "ZipArchive extension is required"
     828msgstr ""
     829
     830#: includes/class-batch-processor.php:394 includes/class-media-handler.php:100
     831msgid "No media files found to export"
     832msgstr ""
     833
     834#: includes/class-batch-processor.php:475 includes/class-media-handler.php:115
     835msgid "Could not create ZIP file"
     836msgstr ""
     837
     838#: includes/class-batch-processor.php:525
     839msgid "No valid media files found in this batch"
     840msgstr ""
     841
     842#: includes/class-batch-processor.php:564
     843msgid "No posts data provided"
     844msgstr ""
     845
     846#: includes/class-batch-processor.php:570
     847#: includes/class-batch-processor.php:686 includes/class-page-handler.php:155
     848#: includes/class-page-handler.php:621 includes/class-post-handler.php:156
     849#: includes/class-post-handler.php:303 includes/class-settings-handler.php:245
     850#: includes/class-widgets-menus-handler.php:260
     851#: includes/class-widgets-menus-handler.php:302
     852#: includes/class-widgets-menus-handler.php:344
     853msgid "Invalid JSON data provided"
     854msgstr ""
     855
     856#: includes/class-batch-processor.php:574
     857msgid "Invalid posts data format"
     858msgstr ""
     859
     860#: includes/class-batch-processor.php:680
     861msgid "No pages data provided"
     862msgstr ""
     863
     864#: includes/class-batch-processor.php:690
     865msgid "Invalid pages data format"
     866msgstr ""
     867
     868#: includes/class-batch-processor.php:944
     869msgid "Invalid images data"
     870msgstr ""
     871
     872#: includes/class-batch-settings.php:93 includes/class-batch-settings.php:94
     873msgid "Batch Settings"
     874msgstr ""
     875
     876#: includes/class-batch-settings.php:285
     877msgid "Batch Processing Settings"
     878msgstr ""
     879
     880#: includes/class-batch-settings.php:289
     881msgid "Configure batch processing for large-scale import/export operations. Please note that importing posts is a resource-intensive process, as it needs to detect and process all associated images, post formatting, WordPress tags, categories, attributes, and other metadata. For better performance and server stability, bulk import with batch processing is highly recommended."
     882msgstr ""
     883
     884#: includes/class-batch-settings.php:305
     885msgid "Enable Batch Processing"
     886msgstr ""
     887
     888#: includes/class-batch-settings.php:320
     889msgid "Enable this to process large-scale operations in batches. "
     890msgstr ""
     891
     892#: includes/class-batch-settings.php:323
     893msgid "FREE"
     894msgstr ""
     895
     896#: includes/class-batch-settings.php:324
     897msgid "Available in free version"
     898msgstr ""
     899
     900#: includes/class-batch-settings.php:341
     901#: includes/class-scheduled-exports.php:883
     902#: includes/class-scheduled-exports.php:918
     903msgid "Upgrade to PRO"
     904msgstr ""
     905
     906#: includes/class-batch-settings.php:346
     907msgid "Batch Configuration"
     908msgstr ""
     909
     910#: includes/class-batch-settings.php:358
     911msgid "Posts Batch Size"
     912msgstr ""
     913
     914#: includes/class-batch-settings.php:374
     915msgid "Number of posts per batch file. Default: 100 (Range: 10-10,000)"
     916msgstr ""
     917
     918#: includes/class-batch-settings.php:375
     919msgid "For 100K+ posts: Use 1000-5000"
     920msgstr ""
     921
     922#: includes/class-batch-settings.php:384
     923msgid "Pages Batch Size"
     924msgstr ""
     925
     926#: includes/class-batch-settings.php:400
     927msgid "Number of pages per batch file. Default: 100 (Range: 10-10,000)"
     928msgstr ""
     929
     930#: includes/class-batch-settings.php:401
     931msgid "For 10K+ pages: Use 1000-5000"
     932msgstr ""
     933
     934#: includes/class-batch-settings.php:410
     935msgid "Concurrent Requests"
     936msgstr ""
     937
     938#: includes/class-batch-settings.php:427
     939msgid "How many posts/pages to process simultaneously. Default: 50 (Range: 5-200)"
     940msgstr ""
     941
     942#: includes/class-batch-settings.php:428
     943msgid "⚡ This is the KEY setting for speed!"
     944msgstr ""
     945
     946#: includes/class-batch-settings.php:429
     947msgid "• Small server (shared hosting): 5-10"
     948msgstr ""
     949
     950#: includes/class-batch-settings.php:430
     951msgid "• Medium server (VPS): 20-80"
     952msgstr ""
     953
     954#: includes/class-batch-settings.php:431
     955msgid "• Powerful server (dedicated): 100-200"
     956msgstr ""
     957
     958#: includes/class-batch-settings.php:432
     959msgid "• With 100 concurrent: 100K posts in ~20 minutes (vs 50+ hours sequential)"
     960msgstr ""
     961
     962#: includes/class-batch-settings.php:441
     963msgid "Media Files Batch Size"
     964msgstr ""
     965
     966#: includes/class-batch-settings.php:457
     967msgid "Number of media files per batch. Default: 50 (Range: 10-1000)"
     968msgstr ""
     969
     970#: includes/class-batch-settings.php:466
     971msgid "Media ZIP Size Limit (MB)"
     972msgstr ""
     973
     974#: includes/class-batch-settings.php:483
     975msgid "Maximum size for each media ZIP file. Default: 50MB (Range: 10-500MB)"
     976msgstr ""
     977
     978#: includes/class-batch-settings.php:492
     979msgid "Batch Delay (ms)"
     980msgstr ""
     981
     982#: includes/class-batch-settings.php:509
     983msgid "Delay between batches to prevent server overload. Default: 200ms (Range: 0-5000ms)"
     984msgstr ""
     985
     986#: includes/class-batch-settings.php:510
     987msgid "• Powerful server: 0-100ms (no delay needed)"
     988msgstr ""
     989
     990#: includes/class-batch-settings.php:511
     991msgid "• Shared hosting: 500-1000ms (prevent throttling)"
     992msgstr ""
     993
     994#: includes/class-batch-settings.php:520
     995msgid "📊 Recommended Settings Based on Your Content"
     996msgstr ""
     997
     998#: includes/class-batch-settings.php:522
     999msgid "Loading content statistics..."
     1000msgstr ""
     1001
     1002#: includes/class-batch-settings.php:527
     1003#: includes/class-scheduled-exports.php:1088
     1004msgid "Save Settings"
    7331005msgstr ""
    7341006
     
    7781050#: includes/class-generic-recommendations.php:565
    7791051msgid "This plugin doesn&#8217;t work with your version of PHP."
    780 msgstr ""
    781 
    782 #: includes/class-media-handler.php:89
    783 msgid "ZipArchive extension is required"
    784 msgstr ""
    785 
    786 #: includes/class-media-handler.php:100
    787 msgid "No media files found to export"
    788 msgstr ""
    789 
    790 #: includes/class-media-handler.php:107
    791 msgid "Could not create export directory"
    792 msgstr ""
    793 
    794 #: includes/class-media-handler.php:115
    795 msgid "Could not create ZIP file"
    7961052msgstr ""
    7971053
     
    8541110msgstr ""
    8551111
    856 #: includes/class-media-handler.php:332
    857 msgid "Invalid batch ID"
    858 msgstr ""
    859 
    8601112#: includes/class-media-handler.php:338
    8611113msgid "Batch not found or expired"
     
    8891141msgstr ""
    8901142
    891 #: includes/class-media-handler.php:454 includes/class-page-handler.php:314
    892 #: includes/class-post-handler.php:400
     1143#: includes/class-media-handler.php:454 includes/class-page-handler.php:327
     1144#: includes/class-post-handler.php:417
    8931145msgid "Delete operation failed. Please try again."
    8941146msgstr ""
     
    9621214msgstr ""
    9631215
    964 #: includes/class-page-handler.php:137
     1216#: includes/class-page-handler.php:149
    9651217msgid "No page data provided"
    9661218msgstr ""
    9671219
    968 #: includes/class-page-handler.php:143 includes/class-page-handler.php:608
    969 #: includes/class-post-handler.php:143 includes/class-post-handler.php:286
    970 #: includes/class-settings-handler.php:245
    971 #: includes/class-widgets-menus-handler.php:258
    972 #: includes/class-widgets-menus-handler.php:298
    973 #: includes/class-widgets-menus-handler.php:338
    974 msgid "Invalid JSON data provided"
    975 msgstr ""
    976 
    977 #: includes/class-page-handler.php:147
     1220#: includes/class-page-handler.php:159
    9781221msgid "Invalid page data"
    9791222msgstr ""
    9801223
    981 #: includes/class-page-handler.php:164
     1224#: includes/class-page-handler.php:176
    9821225msgid "Page already exists"
    9831226msgstr ""
    9841227
    985 #: includes/class-page-handler.php:188
     1228#: includes/class-page-handler.php:200
    9861229#, php-format
    9871230msgid "Failed to create page: %s"
    9881231msgstr ""
    9891232
    990 #: includes/class-page-handler.php:251 includes/class-post-handler.php:259
     1233#: includes/class-page-handler.php:264 includes/class-post-handler.php:271
    9911234msgid "Import failed. Please check the file format."
    9921235msgstr ""
    9931236
    994 #: includes/class-page-handler.php:276
     1237#: includes/class-page-handler.php:289
    9951238msgid "No pages found to delete"
    9961239msgstr ""
    9971240
    998 #: includes/class-page-handler.php:295
     1241#: includes/class-page-handler.php:308
    9991242#, php-format
    10001243msgid "Deleted %d pages successfully"
    10011244msgstr ""
    10021245
    1003 #: includes/class-page-handler.php:301
     1246#: includes/class-page-handler.php:314
    10041247#, php-format
    10051248msgid ". Failed to delete %d pages."
    10061249msgstr ""
    10071250
    1008 #: includes/class-page-handler.php:602 includes/class-post-handler.php:280
     1251#: includes/class-page-handler.php:615 includes/class-post-handler.php:297
    10091252msgid "No image data provided"
    10101253msgstr ""
    10111254
    1012 #: includes/class-page-handler.php:612 includes/class-post-handler.php:290
     1255#: includes/class-page-handler.php:625 includes/class-post-handler.php:307
    10131256msgid "Invalid image data"
    10141257msgstr ""
    10151258
    1016 #: includes/class-page-handler.php:617 includes/class-post-handler.php:295
     1259#: includes/class-page-handler.php:630 includes/class-post-handler.php:312
    10171260msgid "No filename provided"
    10181261msgstr ""
    10191262
    1020 #: includes/class-post-handler.php:137
     1263#: includes/class-post-handler.php:150
    10211264msgid "No post data provided"
    10221265msgstr ""
    10231266
    1024 #: includes/class-post-handler.php:147
     1267#: includes/class-post-handler.php:160
    10251268msgid "Invalid post data"
    10261269msgstr ""
    10271270
    1028 #: includes/class-post-handler.php:164
     1271#: includes/class-post-handler.php:176
    10291272msgid "Post already exists"
    10301273msgstr ""
    10311274
    1032 #: includes/class-post-handler.php:186
     1275#: includes/class-post-handler.php:194
    10331276#, php-format
    10341277msgid "Failed to create post: %s"
    10351278msgstr ""
    10361279
    1037 #: includes/class-post-handler.php:362
     1280#: includes/class-post-handler.php:379
    10381281msgid "No posts found to delete"
    10391282msgstr ""
    10401283
    1041 #: includes/class-post-handler.php:381
     1284#: includes/class-post-handler.php:398
    10421285#, php-format
    10431286msgid "Deleted %d posts successfully"
    10441287msgstr ""
    10451288
    1046 #: includes/class-post-handler.php:387
     1289#: includes/class-post-handler.php:404
    10471290#, php-format
    10481291msgid ". Failed to delete %d posts."
     1292msgstr ""
     1293
     1294#: includes/class-scheduled-exports.php:158
     1295msgid "Once Weekly"
     1296msgstr ""
     1297
     1298#: includes/class-scheduled-exports.php:164
     1299msgid "Once Monthly"
     1300msgstr ""
     1301
     1302#: includes/class-scheduled-exports.php:682
     1303#, php-format
     1304msgid "[%s] Scheduled Export Completed"
     1305msgstr ""
     1306
     1307#: includes/class-scheduled-exports.php:686
     1308msgid "Your scheduled export has completed successfully."
     1309msgstr ""
     1310
     1311#: includes/class-scheduled-exports.php:687
     1312msgid "Exported files:"
     1313msgstr ""
     1314
     1315#: includes/class-scheduled-exports.php:691
     1316msgid "Storage location:"
     1317msgstr ""
     1318
     1319#: includes/class-scheduled-exports.php:797
     1320#: includes/class-scheduled-exports.php:798
     1321#: includes/class-scheduled-exports.php:866
     1322msgid "Scheduled Exports"
     1323msgstr ""
     1324
     1325#: includes/class-scheduled-exports.php:868
     1326msgid "Automate your backups with scheduled exports. Set it and forget it!"
     1327msgstr ""
     1328
     1329#: includes/class-scheduled-exports.php:887
     1330msgid "Enable Scheduled Exports"
     1331msgstr ""
     1332
     1333#: includes/class-scheduled-exports.php:900
     1334msgid "Enable automatic scheduled exports of your content."
     1335msgstr ""
     1336
     1337#: includes/class-scheduled-exports.php:904
     1338msgid "Next scheduled run:"
     1339msgstr ""
     1340
     1341#: includes/class-scheduled-exports.php:925
     1342msgid "Schedule Frequency"
     1343msgstr ""
     1344
     1345#: includes/class-scheduled-exports.php:930
     1346msgid "Daily"
     1347msgstr ""
     1348
     1349#: includes/class-scheduled-exports.php:931
     1350msgid "Export once every day"
     1351msgstr ""
     1352
     1353#: includes/class-scheduled-exports.php:937
     1354msgid "Weekly"
     1355msgstr ""
     1356
     1357#: includes/class-scheduled-exports.php:938
     1358msgid "Export once every week"
     1359msgstr ""
     1360
     1361#: includes/class-scheduled-exports.php:944
     1362msgid "Monthly"
     1363msgstr ""
     1364
     1365#: includes/class-scheduled-exports.php:945
     1366msgid "Export once every month"
     1367msgstr ""
     1368
     1369#: includes/class-scheduled-exports.php:953
     1370msgid "What to Export"
     1371msgstr ""
     1372
     1373#: includes/class-scheduled-exports.php:957
     1374msgid "Posts"
     1375msgstr ""
     1376
     1377#: includes/class-scheduled-exports.php:961
     1378msgid "Pages"
     1379msgstr ""
     1380
     1381#: includes/class-scheduled-exports.php:965
     1382msgid "Media"
     1383msgstr ""
     1384
     1385#: includes/class-scheduled-exports.php:976
     1386msgid "Email Notifications"
     1387msgstr ""
     1388
     1389#: includes/class-scheduled-exports.php:989
     1390msgid "Send email notifications when exports complete."
     1391msgstr ""
     1392
     1393#: includes/class-scheduled-exports.php:994
     1394msgid "Email Addresses"
     1395msgstr ""
     1396
     1397#: includes/class-scheduled-exports.php:1005
     1398msgid "Enter email addresses separated by commas. Leave empty to use admin email:"
     1399msgstr ""
     1400
     1401#: includes/class-scheduled-exports.php:1013
     1402msgid "Backup Rotation"
     1403msgstr ""
     1404
     1405#: includes/class-scheduled-exports.php:1026
     1406msgid "Automatically delete old backups to save space."
     1407msgstr ""
     1408
     1409#: includes/class-scheduled-exports.php:1031
     1410msgid "Keep Last N Backups"
     1411msgstr ""
     1412
     1413#: includes/class-scheduled-exports.php:1044
     1414msgid "Number of recent backups to keep. Older backups will be automatically deleted. (Range: 1-100)"
     1415msgstr ""
     1416
     1417#: includes/class-scheduled-exports.php:1051
     1418msgid "Storage Mode"
     1419msgstr ""
     1420
     1421#: includes/class-scheduled-exports.php:1057
     1422msgid "Local Storage"
     1423msgstr ""
     1424
     1425#: includes/class-scheduled-exports.php:1058
     1426msgid "Save backups to your server"
     1427msgstr ""
     1428
     1429#: includes/class-scheduled-exports.php:1059
     1430msgid "Active"
     1431msgstr ""
     1432
     1433#: includes/class-scheduled-exports.php:1066
     1434msgid "Google Drive"
     1435msgstr ""
     1436
     1437#: includes/class-scheduled-exports.php:1067
     1438msgid "Save backups to Google Drive"
     1439msgstr ""
     1440
     1441#: includes/class-scheduled-exports.php:1068
     1442msgid "Coming Soon"
     1443msgstr ""
     1444
     1445#: includes/class-scheduled-exports.php:1076
     1446msgid "Local Storage Path"
     1447msgstr ""
     1448
     1449#: includes/class-scheduled-exports.php:1079
     1450msgid "Backups are stored in your WordPress uploads directory for security and easy access."
     1451msgstr ""
     1452
     1453#: includes/class-scheduled-exports.php:1095
     1454msgid "Existing Backups"
     1455msgstr ""
     1456
     1457#: includes/class-scheduled-exports.php:1096
     1458msgid "Manage your scheduled export backups."
     1459msgstr ""
     1460
     1461#: includes/class-scheduled-exports.php:1099
     1462msgid "Refresh List"
     1463msgstr ""
     1464
     1465#: includes/class-scheduled-exports.php:1105
     1466msgid "Loading backups..."
     1467msgstr ""
     1468
     1469#: includes/class-scheduled-exports.php:1116
     1470#: includes/class-scheduled-exports.php:1130
     1471msgid "Delete Backup"
     1472msgstr ""
     1473
     1474#: includes/class-scheduled-exports.php:1121
     1475msgid "Are you sure you want to delete this backup?"
     1476msgstr ""
     1477
     1478#: includes/class-scheduled-exports.php:1123
     1479msgid "This action cannot be undone."
    10491480msgstr ""
    10501481
     
    12071638msgstr ""
    12081639
    1209 #: includes/class-widgets-menus-handler.php:252
     1640#: includes/class-widgets-menus-handler.php:254
    12101641msgid "No widgets data provided"
    12111642msgstr ""
    12121643
    1213 #: includes/class-widgets-menus-handler.php:292
     1644#: includes/class-widgets-menus-handler.php:296
    12141645msgid "No menus data provided"
    12151646msgstr ""
    12161647
    1217 #: includes/class-widgets-menus-handler.php:332
     1648#: includes/class-widgets-menus-handler.php:338
    12181649msgid "No data provided"
    12191650msgstr ""
    12201651
    1221 #: includes/class-widgets-menus-handler.php:358
     1652#: includes/class-widgets-menus-handler.php:364
    12221653#, php-format
    12231654msgid "Import completed: %d widgets and %d menus imported"
    12241655msgstr ""
    12251656
    1226 #: includes/class-widgets-menus-handler.php:492
     1657#: includes/class-widgets-menus-handler.php:498
    12271658msgid "No widgets data found"
    12281659msgstr ""
    12291660
    1230 #: includes/class-widgets-menus-handler.php:545
     1661#: includes/class-widgets-menus-handler.php:551
    12311662#, php-format
    12321663msgid "Widgets import completed: %d imported, %d skipped, %d failed"
    12331664msgstr ""
    12341665
    1235 #: includes/class-widgets-menus-handler.php:574
     1666#: includes/class-widgets-menus-handler.php:580
    12361667msgid "No menus data found"
    12371668msgstr ""
    12381669
    1239 #: includes/class-widgets-menus-handler.php:642
     1670#: includes/class-widgets-menus-handler.php:648
    12401671#, php-format
    12411672msgid "Navigation menus import completed: %d imported, %d skipped, %d failed"
  • post-export-import-with-media/trunk/post-export-import-with-media.php

    r3441984 r3460903  
    1212 * Plugin URI: https://wordpress.org/plugins/post-export-import-with-media/
    1313 * Description: Post Export Import with Media: A secure plugin to export and import WordPress posts and media files with real-time progress.
    14  * Version:           1.2.1
     14 * Version:           1.3.0
    1515 * Requires at least: 6.7
    1616 * Requires PHP:      7.4
     
    3030// Define plugin constants for better maintainability
    3131if ( ! defined( 'PEIWM_VERSION' ) ) {
    32     define( 'PEIWM_VERSION', '1.2.1' );
     32    define( 'PEIWM_VERSION', '1.3.0' );
    3333}
    3434
     
    4747
    4848if ( ! function_exists( 'peiwm_fs' ) ) {
    49     // Create a helper function for easy SDK access.
     49    /**
     50     * Freemius SDK with smart initialization - "Pro Takes Ownership, Free Steps Aside" pattern.
     51     *
     52     * @since 1.3.0
     53     * @return object|null Freemius SDK object.
     54     */
    5055    function peiwm_fs() {
    5156        global $peiwm_fs;
    5257
    5358        if ( ! isset( $peiwm_fs ) ) {
     59            // Check if Pro version is active - if so, let Pro handle Freemius
     60            if ( is_plugin_active( 'post-export-import-with-media-pro/post-export-import-with-media-pro.php' ) ) {
     61                // Pro is active - Free steps aside, only load analytics
     62                return null; // Pro will handle all Freemius functionality
     63            }
     64
    5465            // Include Freemius SDK.
    5566            require_once dirname( __FILE__ ) . '/freemius/start.php';
     
    5869                'id'                  => '23084',
    5970                'slug'                => 'post-export-import-with-media',
     71                'premium_slug'        => 'post-export-import-with-media-pro',
    6072                'type'                => 'plugin',
    6173                'public_key'          => 'pk_acaed015b901db29328b246e9e572',
    6274                'is_premium'          => false,
    63                 'has_premium_version' => true,
    64                 'has_paid_plans'      => true,
    65                 'is_org_compliant'    => true,
     75                'has_premium_version' => true,
     76                'has_paid_plans'      => true,
     77                'is_org_compliant'    => true,
    6678                'menu'                => array(
    6779                    'slug'           => 'peiwm-secure',
    6880                    'first-path'     => 'admin.php?page=peiwm-secure',
    69                     'network'        => true,
    70                     'account'        => false,
    71                     'pricing'        => false,
    72                     'contact'        => true,
    73                     'support'        => true,
     81                    'network'        => true,
     82                    'pricing'        => true,
     83                    'contact'        => true,
     84                    'support'        => true,
     85                ),
     86                'parallel_activation' => array(
     87                    'enabled'                  => true,
     88                    'premium_version_basename' => 'post-export-import-with-media-pro/post-export-import-with-media-pro.php',
    7489                ),
    7590            ) );
     
    7893        return $peiwm_fs;
    7994    }
     95   
     96    // Only initialize if Pro is not active
     97    if ( ! is_plugin_active( 'post-export-import-with-media-pro/post-export-import-with-media-pro.php' ) ) {
     98        peiwm_fs();
     99        do_action( 'peiwm_fs_loaded' );
     100    }
     101}
    80102
    81     // Init Freemius.
    82     peiwm_fs();
    83     // Signal that SDK was initiated.
    84     do_action( 'peiwm_fs_loaded' );
     103/**
     104 * Helper function to check if Freemius is available (either from Free or Pro).
     105 *
     106 * @since 1.1.0
     107 * @return object|null Freemius SDK object or null.
     108 */
     109function peiwm_get_freemius_instance() {
     110    // If Pro is active, get Freemius instance from Pro
     111    if ( is_plugin_active( 'post-export-import-with-media-pro/post-export-import-with-media-pro.php' ) ) {
     112        // Pro handles Freemius, so get it from Pro's function
     113        if ( function_exists( 'peiwm_pro_get_freemius_instance' ) ) {
     114            return peiwm_pro_get_freemius_instance();
     115        }
     116        // Fallback: try to get Pro's Freemius instance directly
     117        return function_exists( 'peiwm_fs' ) ? peiwm_fs() : null;
     118    }
     119   
     120    // Otherwise, Free handles it
     121    return function_exists( 'peiwm_fs' ) ? peiwm_fs() : null;
    85122}
    86123
  • post-export-import-with-media/trunk/readme.txt

    r3441984 r3460903  
    55Tested up to: 6.9
    66Requires PHP: 7.4
    7 Stable Tag: 1.2.1
     7Stable Tag: 1.3.0
    88License: GPLv2 or later
    99License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    1414**Post Export Import with Media** is a simple yet powerful WordPress plugin that helps you securely transfer posts, pages, media, widgets, menus, themes, plugins & settings along with their media files between WordPress sites. Unlike the default exporter, this plugin ensures that images and attachments are included, so you don’t end up with broken links or missing media. 
    1515
    16 Whether you're moving to a new host, creating staging sites, or backing up your content, this plugin handles everything with professional-grade reliability and user-friendly interface.
     16Whether you're moving to a new host, creating staging sites, or backing up your content, this plugin handles everything with professional-grade reliability, user-friendly interface and powerful built-in Batch Processing for high-performance transfers all designed for simplicity and control.
    1717
    1818### ✨ Key Features 
     
    2626- Lightweight and beginner-friendly interface 
    2727- Works for bloggers, developers, and site administrators 
     28- Batch Processing Settings (Optimized for large-scale websites)
     29- Scheduled Exports (Automated Backups)
    2830
    2931#### **Pages Export/Import**
     
    132134== Changelog ==
    133135
     136### 1.3.0 – 13 Feb 2026
     137
     138- **New:** Batch Processing Settings for large-scale export/import
     139  - Configure Posts, Pages, Media batch size
     140  - Concurrent Requests control
     141  - Media ZIP Size Limit (MB)
     142  - Batch Delay (ms)
     143  - Recommended settings based on content size
     144
     145- **New:** Scheduled Exports (Automated Backups)
     146  - Frequency: Daily, Weekly, Monthly
     147  - Export: Posts, Pages, Media, Settings
     148  - Email notifications on completion
     149  - Backup rotation (auto delete old backups)
     150
     151- **Storage Mode:**
     152  - Local Storage (Active)
     153  - Google Drive (Coming Soon)
     154
     155- **Improvement:** Backup management (Download & Delete existing backups)
     156
     157
    134158### 1.2.1 – 18 Jan 2026
    135159- **Enhancement:** Codebase Enhancement
Note: See TracChangeset for help on using the changeset viewer.