├── CHANGELOG.md
├── LICENSE
├── README.md
├── composer.json
├── composer.lock
├── css
└── admin-styles.css
├── includes
├── breadcrumbs.php
├── meta-output.php
├── metabox.php
├── robots.php
├── settings.php
└── sitemap.php
├── js
├── media-uploader.js
└── seo-character-counter.js
├── languages
├── seo-for-wordpress-af.mo
├── seo-for-wordpress-af.po
├── seo-for-wordpress-de_DE.mo
├── seo-for-wordpress-de_DE.po
├── seo-for-wordpress-es_MX.mo
├── seo-for-wordpress-es_MX.po
├── seo-for-wordpress-fr_FR.mo
├── seo-for-wordpress-fr_FR.po
├── seo-for-wordpress-it_IT.mo
├── seo-for-wordpress-it_IT.po
└── seo-for-wordpress.pot
├── seo-for-wordpress.php
└── vendor
├── autoload.php
├── composer
├── ClassLoader.php
├── InstalledVersions.php
├── LICENSE
├── autoload_classmap.php
├── autoload_namespaces.php
├── autoload_psr4.php
├── autoload_real.php
├── autoload_static.php
├── installed.json
├── installed.php
└── platform_check.php
├── plugin-update-checker
├── Puc
│ ├── v5
│ │ └── PucFactory.php
│ └── v5p4
│ │ ├── Autoloader.php
│ │ ├── DebugBar
│ │ ├── Extension.php
│ │ ├── Panel.php
│ │ ├── PluginExtension.php
│ │ ├── PluginPanel.php
│ │ └── ThemePanel.php
│ │ ├── InstalledPackage.php
│ │ ├── Metadata.php
│ │ ├── OAuthSignature.php
│ │ ├── Plugin
│ │ ├── Package.php
│ │ ├── PluginInfo.php
│ │ ├── Ui.php
│ │ ├── Update.php
│ │ └── UpdateChecker.php
│ │ ├── PucFactory.php
│ │ ├── Scheduler.php
│ │ ├── StateStore.php
│ │ ├── Theme
│ │ ├── Package.php
│ │ ├── Update.php
│ │ └── UpdateChecker.php
│ │ ├── Update.php
│ │ ├── UpdateChecker.php
│ │ ├── UpgraderStatus.php
│ │ ├── Utils.php
│ │ ├── Vcs
│ │ ├── Api.php
│ │ ├── BaseChecker.php
│ │ ├── BitBucketApi.php
│ │ ├── GitHubApi.php
│ │ ├── GitLabApi.php
│ │ ├── PluginUpdateChecker.php
│ │ ├── Reference.php
│ │ ├── ReleaseAssetSupport.php
│ │ ├── ReleaseFilteringFeature.php
│ │ ├── ThemeUpdateChecker.php
│ │ └── VcsCheckerMethods.php
│ │ └── WpCliCheckTrigger.php
├── README.md
├── composer.json
├── css
│ └── puc-debug-bar.css
├── js
│ └── debug-bar.js
├── languages
│ ├── plugin-update-checker-ca.mo
│ ├── plugin-update-checker-ca.po
│ ├── plugin-update-checker-cs_CZ.mo
│ ├── plugin-update-checker-cs_CZ.po
│ ├── plugin-update-checker-da_DK.mo
│ ├── plugin-update-checker-da_DK.po
│ ├── plugin-update-checker-de_DE.mo
│ ├── plugin-update-checker-de_DE.po
│ ├── plugin-update-checker-es_AR.mo
│ ├── plugin-update-checker-es_AR.po
│ ├── plugin-update-checker-es_CL.mo
│ ├── plugin-update-checker-es_CL.po
│ ├── plugin-update-checker-es_CO.mo
│ ├── plugin-update-checker-es_CO.po
│ ├── plugin-update-checker-es_CR.mo
│ ├── plugin-update-checker-es_CR.po
│ ├── plugin-update-checker-es_DO.mo
│ ├── plugin-update-checker-es_DO.po
│ ├── plugin-update-checker-es_ES.mo
│ ├── plugin-update-checker-es_ES.po
│ ├── plugin-update-checker-es_GT.mo
│ ├── plugin-update-checker-es_GT.po
│ ├── plugin-update-checker-es_HN.mo
│ ├── plugin-update-checker-es_HN.po
│ ├── plugin-update-checker-es_MX.mo
│ ├── plugin-update-checker-es_MX.po
│ ├── plugin-update-checker-es_PE.mo
│ ├── plugin-update-checker-es_PE.po
│ ├── plugin-update-checker-es_PR.mo
│ ├── plugin-update-checker-es_PR.po
│ ├── plugin-update-checker-es_UY.mo
│ ├── plugin-update-checker-es_UY.po
│ ├── plugin-update-checker-es_VE.mo
│ ├── plugin-update-checker-es_VE.po
│ ├── plugin-update-checker-fa_IR.mo
│ ├── plugin-update-checker-fa_IR.po
│ ├── plugin-update-checker-fr_CA.mo
│ ├── plugin-update-checker-fr_CA.po
│ ├── plugin-update-checker-fr_FR.mo
│ ├── plugin-update-checker-fr_FR.po
│ ├── plugin-update-checker-hu_HU.mo
│ ├── plugin-update-checker-hu_HU.po
│ ├── plugin-update-checker-it_IT.mo
│ ├── plugin-update-checker-it_IT.po
│ ├── plugin-update-checker-ja.mo
│ ├── plugin-update-checker-ja.po
│ ├── plugin-update-checker-nl_BE.mo
│ ├── plugin-update-checker-nl_BE.po
│ ├── plugin-update-checker-nl_NL.mo
│ ├── plugin-update-checker-nl_NL.po
│ ├── plugin-update-checker-pt_BR.mo
│ ├── plugin-update-checker-pt_BR.po
│ ├── plugin-update-checker-ru_RU.mo
│ ├── plugin-update-checker-ru_RU.po
│ ├── plugin-update-checker-sl_SI.mo
│ ├── plugin-update-checker-sl_SI.po
│ ├── plugin-update-checker-sv_SE.mo
│ ├── plugin-update-checker-sv_SE.po
│ ├── plugin-update-checker-tr_TR.mo
│ ├── plugin-update-checker-tr_TR.po
│ ├── plugin-update-checker-uk_UA.mo
│ ├── plugin-update-checker-uk_UA.po
│ ├── plugin-update-checker-zh_CN.mo
│ ├── plugin-update-checker-zh_CN.po
│ └── plugin-update-checker.pot
├── license.txt
├── load-v5p4.php
├── plugin-update-checker.php
└── vendor
│ ├── Parsedown.php
│ ├── ParsedownModern.php
│ └── PucReadmeParser.php
└── robertdevore
└── wpcom-check
├── LICENSE
├── README.md
├── composer.json
└── src
└── WPComPluginHandler.php
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # CHANGELOG
2 |
3 | ## 1.1.0
4 |
5 | * [🐛 BUG: Fixed composer autoloader check to use class_exists instead of function_exists](https://github.com/robertdevore/seo-for-wordpress/commit/e1527bf3b5005ae8b708c7ee1eda8d5b29881e0b)
6 | * [📦 NEW: Added character counters for title and description meta fields](https://github.com/robertdevore/seo-for-wordpress/commit/92c50c6249d53aedc06c143c89566c9a965e162b)
7 | * [📦 NEW: Added 'Import' settings page to import metadata](https://github.com/robertdevore/seo-for-wordpress/commit/943c36698dd1878ed95c729c6ca418feb4470653)
8 | * [📦 NEW: Added Italian translation](https://github.com/robertdevore/seo-for-wordpress/commit/a6d31e069518d8ace1222f7e7372055747c57426)
9 | * [📦 NEW: Added Afrikaans translation](https://github.com/robertdevore/seo-for-wordpress/commit/23e805141bbe4985cb6fb933e494cc07b1a5a88e)
10 | * [📦 NEW: Added German translation](https://github.com/robertdevore/seo-for-wordpress/commit/21ef21d065f6ec964f1f533427c310fd53310faa)
11 | * [👌 IMPROVE: Updated plugin to load text domain for translations](https://github.com/robertdevore/seo-for-wordpress/commit/38b2ca1f1e52667cb7c153e111f036613607e449)
12 | * [👌 IMPROVE: Updated Plugins page to include link to the plugin settings page](https://github.com/robertdevore/seo-for-wordpress/commit/fc29a8c486f999e9f33e644f36ef2207dd218e10)
13 | * [👌 IMPROVE: Replaced implode() usage with array_reduce()](https://github.com/robertdevore/seo-for-wordpress/commit/5abbb20ebfebca27f25e94737ef1c23a8b8d7bb2)
14 | * [👌 IMPROVE: Updated text strings for localization](https://github.com/robertdevore/seo-for-wordpress/commit/67fde1c480d382bfbffd4affa3c5dfa67c0af26b)
15 |
16 | ## 1.0.1
17 |
18 | * [🐛 BUG: Fixed metabox not saving the SEO image correctly](https://github.com/robertdevore/seo-for-wordpress/commit/166f794da55e733ab618c1e9b8dedddadc5e01e5)
19 | * [📦 NEW: Added WPCom Check script to block usage on wordpress.com](https://github.com/robertdevore/seo-for-wordpress/commit/0c2237b3ef480369495435f492c8a014cf72c01b)
20 | * [📦 NEW: Added French translation](https://github.com/robertdevore/seo-for-wordpress/commit/a54f399970aeccb3c5139c23c260ba14bb79ad4e)
21 | * [📦 NEW: Added Spanish translation](https://github.com/robertdevore/seo-for-wordpress/commit/d725c73fd9e72cdbd406494162f3216c5eabd278)
22 | * [👌 IMPROVE: Updated text strings for localization](https://github.com/robertdevore/seo-for-wordpress/commit/48d4fda26a9fa88690be3ec5dd1b1c7fe624b168)
23 | * [👌 IMPROVE: Updated Social Media settings for clarity about Open Graph usage](https://github.com/robertdevore/seo-for-wordpress/commit/6e6bf1e46bce8239909079fdcd3c671789f7b87f)
24 |
25 | ## 1.0.0
26 |
27 | * Initial commit
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # SEO for WordPress®
2 |
3 | SEO for WordPress® is a free WordPress® plugin designed to optimize your site for search engines.
4 |
5 | It provides tools to manage meta tags, breadcrumbs, RSS customization, robots.txt rules, and sitemaps.
6 |
7 | ## Features
8 |
9 | ### General Settings
10 | - **Website Basics**: Set website name, tagline, and title separators.
11 | - **Social Media Appearance**: Customize Open Graph tags with titles, descriptions, and images.
12 |
13 | ### Advanced Settings
14 | - **Metadata Removal**: Remove unnecessary metadata from the `
` section.
15 | - **Breadcrumbs**: Configure breadcrumbs with separators, prefixes, and styling options.
16 | - **RSS Customization**: Add custom content and featured images to RSS feeds.
17 | - **Sitemaps**: Automatically generate XML sitemaps for all public post types.
18 | - **Custom Robots.txt Rules**: Add tailored directives for search engine bots.
19 |
20 | ### SEO Metabox
21 | - Manage SEO metadata for individual posts, pages, and custom post types, including:
22 | - SEO Title
23 | - Meta Description
24 | - Keywords
25 | - Canonical URL
26 | - Noindex/Nofollow settings
27 |
28 | ### Archive Meta Fields
29 | - Add meta titles, descriptions, and images for taxonomy archives.
30 | - Control indexing and linking behavior for archives.
31 |
32 | ### Breadcrumbs Generator
33 | - Automatically generate breadcrumbs for all pages and integrate them into your theme using a shortcode or hook.
34 |
35 | ## Installation
36 |
37 | 1. **Upload the Plugin**:
38 | - Download the plugin ZIP file.
39 | - Upload it via the WordPress Admin: `Plugins > Add New > Upload Plugin`.
40 |
41 | 2. **Activate the Plugin**:
42 | - Go to `Plugins` in the WordPress admin dashboard and activate "SEO for WordPress."
43 |
44 | 3. **Configure Settings**:
45 | - Navigate to `Settings > SEO Settings` and customize according to your preferences.
46 |
47 | ## Shortcodes and Hooks
48 |
49 | ### Breadcrumbs
50 | - **Shortcode**: `[seo_breadcrumbs]`
51 | - **Hook**: `do_action( 'seo_wp_breadcrumbs_hook' );`
52 |
53 | ## Usage
54 |
55 | 1. **General SEO Settings**:
56 | - Configure basic SEO elements under `Settings > SEO Settings > General`.
57 |
58 | 2. **Advanced Features**:
59 | - Enable advanced SEO settings like custom robots.txt rules and metadata removal.
60 |
61 | 3. **SEO Metabox**:
62 | - Edit SEO settings for posts and pages in the "SEO Settings" metabox while editing content.
63 |
64 | 4. **Archive Settings**:
65 | - Set SEO metadata for categories, tags, and custom taxonomies under their respective editing screens.
66 |
67 | ## Development Notes
68 |
69 | ### Actions and Filters
70 | - **`robots_txt`**: Customizes the robots.txt output.
71 | - **`template_redirect`**: Renders the dynamic sitemap.
72 | - **`save_post`**: Saves SEO metadata for individual posts.
73 |
74 | ### File Organization
75 | - `/includes/`:
76 | - Core functionality such as settings, metaboxes, and sitemap generation.
77 | - `/assets/`:
78 | - Scripts and styles for the admin interface.
79 |
80 | ### Security
81 | - Ensures all inputs are sanitized and validated.
82 | - Implements nonces for form submissions.
83 |
84 | ## Contribution
85 |
86 | ### Bug Reports and Feature Requests
87 | Submit issues or feature requests via [GitHub Issues](https://github.com/robertdevore/seo-for-wordpress/issues).
88 |
89 | ## License
90 |
91 | This project is licensed under the GPLv2 License.
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "require": {
3 | "robertdevore/wpcom-check": "^1.0"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/composer.lock:
--------------------------------------------------------------------------------
1 | {
2 | "_readme": [
3 | "This file locks the dependencies of your project to a known state",
4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
5 | "This file is @generated automatically"
6 | ],
7 | "content-hash": "455764cd9b78270c5af3fb1bf25af96e",
8 | "packages": [
9 | {
10 | "name": "robertdevore/wpcom-check",
11 | "version": "1.0.1",
12 | "source": {
13 | "type": "git",
14 | "url": "https://github.com/robertdevore/wpcom-check.git",
15 | "reference": "25eb61d7e0fbd4b2a87a81c3fa7dca722f8d8058"
16 | },
17 | "dist": {
18 | "type": "zip",
19 | "url": "https://api.github.com/repos/robertdevore/wpcom-check/zipball/25eb61d7e0fbd4b2a87a81c3fa7dca722f8d8058",
20 | "reference": "25eb61d7e0fbd4b2a87a81c3fa7dca722f8d8058",
21 | "shasum": ""
22 | },
23 | "require": {
24 | "php": ">=7.4"
25 | },
26 | "type": "library",
27 | "extra": {
28 | "wordpress-plugin": true
29 | },
30 | "autoload": {
31 | "psr-4": {
32 | "RobertDevore\\WPComCheck\\": "src/"
33 | }
34 | },
35 | "notification-url": "https://packagist.org/downloads/",
36 | "license": [
37 | "MIT"
38 | ],
39 | "authors": [
40 | {
41 | "name": "Robert DeVore",
42 | "email": "me@robertdevore.com",
43 | "homepage": "https://github.com/robertdevore",
44 | "role": "Developer"
45 | }
46 | ],
47 | "description": "A utility to handle WordPress.com-specific plugin compatibility and auto-deactivation.",
48 | "homepage": "https://github.com/robertdevore/wpcom-check",
49 | "keywords": [
50 | "compatibility",
51 | "deactivation",
52 | "plugin",
53 | "wordpress",
54 | "wordpress.com"
55 | ],
56 | "support": {
57 | "issues": "https://github.com/robertdevore/wpcom-check/issues",
58 | "source": "https://github.com/robertdevore/wpcom-check/tree/1.0.1"
59 | },
60 | "time": "2025-01-07T17:17:53+00:00"
61 | }
62 | ],
63 | "packages-dev": [],
64 | "aliases": [],
65 | "minimum-stability": "stable",
66 | "stability-flags": {},
67 | "prefer-stable": false,
68 | "prefer-lowest": false,
69 | "platform": {},
70 | "platform-dev": {},
71 | "plugin-api-version": "2.6.0"
72 | }
73 |
--------------------------------------------------------------------------------
/css/admin-styles.css:
--------------------------------------------------------------------------------
1 | /* General styling for the settings page */
2 |
3 | .seo-for-wordpress-settings .form-table {
4 | margin: 20px 0;
5 | border-collapse: collapse;
6 | width: 100%;
7 | }
8 |
9 | .seo-for-wordpress-settings .form-table th {
10 | text-align: left;
11 | color: #444;
12 | font-size: 1rem;
13 | padding: 15px 20px;
14 | vertical-align: top;
15 | background-color: #f1f1f1;
16 | }
17 |
18 | .seo-for-wordpress-settings .form-table td {
19 | padding: 10px 20px;
20 | }
21 |
22 | /* Text fields and textareas */
23 | .seo-for-wordpress-settings input[type="text"],
24 | .seo-for-wordpress-settings textarea {
25 | width: 100%;
26 | max-width: 500px;
27 | padding: 10px;
28 | border: 1px solid #ddd;
29 | border-radius: 5px;
30 | font-size: 1rem;
31 | }
32 |
33 | /* Modern toggle switches for checkboxes */
34 | .toggle-switch {
35 | position: relative;
36 | display: inline-block;
37 | width: 40px;
38 | height: 20px;
39 | }
40 |
41 | .toggle-switch input {
42 | opacity: 0;
43 | width: 0;
44 | height: 0;
45 | }
46 |
47 | .toggle-switch span {
48 | position: absolute;
49 | top: 0;
50 | left: 0;
51 | right: 0;
52 | bottom: 0;
53 | background-color: #ccc;
54 | border-radius: 20px;
55 | transition: 0.4s;
56 | cursor: pointer;
57 | }
58 |
59 | .toggle-switch span:before {
60 | position: absolute;
61 | content: "";
62 | height: 16px;
63 | width: 16px;
64 | left: 2px;
65 | bottom: 2px;
66 | background-color: white;
67 | border-radius: 50%;
68 | transition: 0.4s;
69 | }
70 |
71 | .toggle-switch input:checked + span {
72 | background-color: #28a745;
73 | }
74 |
75 | .toggle-switch input:checked + span:before {
76 | transform: translateX(20px);
77 | }
78 |
79 | /* Upload button alignment */
80 | .upload-button {
81 | margin-left: 10px;
82 | font-size: 0.9rem;
83 | padding: 5px 10px;
84 | }
85 |
86 | /* Add spacing between form sections */
87 | .seo-for-wordpress-settings .form-table + .form-table {
88 | margin-top: 30px;
89 | }
90 |
91 | /* Wrapper styles for settings page */
92 | .seo-for-wordpress-settings.wrap {
93 | background-color: #ffffff;
94 | border: 1px solid #ddd;
95 | border-radius: 10px;
96 | padding: 20px 30px;
97 | box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
98 | max-width: 900px;
99 | margin: 30px auto;
100 | }
101 |
102 | /* Header styles */
103 | .seo-for-wordpress-settings h1 {
104 | font-size: 1.8rem;
105 | color: #333;
106 | margin-bottom: 20px;
107 | }
108 |
109 | /* Tab navigation styling */
110 | .seo-for-wordpress-settings .nav-tab-wrapper {
111 | display: flex;
112 | justify-content: left;
113 | margin-bottom: 20px;
114 | padding: 0;
115 | border-bottom: 0 !important;
116 | }
117 |
118 | .seo-for-wordpress-settings .nav-tab {
119 | padding: 10px 20px;
120 | border: none;
121 | border-radius: 5px;
122 | color: #0073aa;
123 | text-decoration: none;
124 | transition: all 0.3s ease;
125 | margin-left: 0;
126 | margin-right: 6px;
127 | }
128 |
129 | .seo-for-wordpress-settings .nav-tab:hover {
130 | background-color: #0073aa;
131 | color: #fff;
132 | }
133 |
134 | .seo-for-wordpress-settings .nav-tab-active {
135 | background-color: #0073aa;
136 | color: #fff;
137 | font-weight: bold;
138 | }
139 |
140 | /* Form table styling */
141 | .seo-for-wordpress-settings .form-table {
142 | background-color: #f9f9f9;
143 | border-radius: 10px;
144 | padding: 20px;
145 | box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
146 | }
147 |
148 | .seo-for-wordpress-settings .form-table td {
149 | padding: 10px;
150 | }
151 |
152 | .seo-for-wordpress-settings input[type="text"],
153 | .seo-for-wordpress-settings textarea {
154 | width: 100%;
155 | max-width: 500px;
156 | padding: 10px;
157 | border: 1px solid #ddd;
158 | border-radius: 5px;
159 | box-shadow: inset 0 2px 3px rgba(0, 0, 0, 0.1);
160 | font-size: 1rem;
161 | }
162 |
163 | .seo-for-wordpress-settings textarea {
164 | height: 100px;
165 | }
166 |
167 | /* Buttons */
168 | .seo-for-wordpress-settings .button-primary {
169 | background-color: #0073aa;
170 | color: #fff;
171 | border: none;
172 | border-radius: 5px;
173 | padding: 10px 20px;
174 | font-size: 1rem;
175 | cursor: pointer;
176 | transition: all 0.3s ease;
177 | }
178 |
179 | .seo-for-wordpress-settings .button-primary:hover {
180 | background-color: #005177;
181 | }
182 |
183 | /* Spacing between sections */
184 | .seo-for-wordpress-settings .form-table + .form-table {
185 | margin-top: 30px;
186 | }
187 |
188 | #seowp-support-btn,
189 | #seowp-docs-btn {
190 | line-height: 22px;
191 | float: right;
192 | margin-left: 12px;
193 | display: flex;
194 | align-content: center;
195 | align-items: center;
196 | gap: 6;
197 | }
198 |
199 | .seo-metabox {
200 | margin: 20px 0;
201 | padding: 15px;
202 | background: #f9f9f9;
203 | border: 1px solid #ddd;
204 | border-radius: 6px;
205 | }
206 |
207 | .seo-field-group {
208 | margin-bottom: 15px;
209 | }
210 |
211 | .seo-label {
212 | font-weight: bold;
213 | margin-bottom: 5px;
214 | display: block;
215 | }
216 |
217 | .seo-input {
218 | width: 100%;
219 | padding: 8px;
220 | font-size: 14px;
221 | border: 1px solid #ccc;
222 | border-radius: 4px;
223 | }
224 |
225 | .seo-checkbox-label {
226 | font-size: 14px;
227 | }
228 |
229 | .seo-description {
230 | font-size: 12px;
231 | color: #666;
232 | }
233 |
234 | .seo-upload-button {
235 | margin-top: 5px;
236 | }
237 |
--------------------------------------------------------------------------------
/includes/breadcrumbs.php:
--------------------------------------------------------------------------------
1 | %s',
37 | esc_url( home_url() ),
38 | esc_html( $home_text )
39 | );
40 |
41 | if ( is_singular() ) {
42 | global $post;
43 | $post_ancestors = array_reverse( get_post_ancestors( $post ) );
44 |
45 | foreach ( $post_ancestors as $ancestor_id ) {
46 | $breadcrumbs[] = sprintf(
47 | '%s',
48 | esc_url( get_permalink( $ancestor_id ) ),
49 | esc_html( get_the_title( $ancestor_id ) )
50 | );
51 | }
52 |
53 | if ( $bold_current ) {
54 | $breadcrumbs[] = sprintf( '%s', esc_html( get_the_title() ) );
55 | } else {
56 | $breadcrumbs[] = esc_html( get_the_title() );
57 | }
58 | } elseif ( is_category() || is_tag() || is_tax() ) {
59 | $term = get_queried_object();
60 |
61 | if ( $term && $term->parent ) {
62 | $parent_terms = get_ancestors( $term->term_id, $term->taxonomy );
63 |
64 | foreach ( array_reverse( $parent_terms ) as $parent_id ) {
65 | $parent = get_term( $parent_id );
66 | if ( $parent && ! is_wp_error( $parent ) ) {
67 | $breadcrumbs[] = sprintf(
68 | '%s',
69 | esc_url( get_term_link( $parent ) ),
70 | esc_html( $parent->name )
71 | );
72 | }
73 | }
74 | }
75 |
76 | $breadcrumbs[] = esc_html( single_term_title( '', false ) );
77 | } elseif ( is_archive() ) {
78 | $breadcrumbs[] = esc_html( get_the_archive_title() );
79 | } elseif ( is_search() ) {
80 | $breadcrumbs[] = sprintf(
81 | __( 'Search Results for: %s', 'seo-for-wordpress' ),
82 | esc_html( get_search_query() )
83 | );
84 | } elseif ( is_404() ) {
85 | $breadcrumbs[] = __( '404 Not Found', 'seo-for-wordpress' );
86 | }
87 |
88 | // Generate output.
89 | $output = '';
101 |
102 | return $output;
103 | }
104 |
105 | /**
106 | * Add breadcrumbs to theme locations.
107 | *
108 | * @since 1.0.0
109 | */
110 | add_action( 'seo_wp_breadcrumbs_hook', 'seo_wp_generate_breadcrumbs' );
111 |
112 | /**
113 | * Register the breadcrumbs shortcode.
114 | *
115 | * @since 1.0.0
116 | * @return string Breadcrumbs HTML markup.
117 | */
118 | function seo_wp_breadcrumbs_shortcode() {
119 | return seo_wp_generate_breadcrumbs();
120 | }
121 | add_shortcode( 'seo_breadcrumbs', 'seo_wp_breadcrumbs_shortcode' );
122 |
--------------------------------------------------------------------------------
/includes/meta-output.php:
--------------------------------------------------------------------------------
1 | ID, '_seo_wp_seo_title', true ) : null;
23 | $meta_description = is_singular() ? get_post_meta( $post->ID, '_seo_wp_seo_description', true ) : null;
24 | $meta_image = is_singular() ? get_post_meta( $post->ID, '_seo_wp_seo_image', true ) : null;
25 |
26 | if ( is_category() || is_tag() || is_tax() ) {
27 | $term = get_queried_object();
28 | if ( ! is_wp_error( $term ) && $term ) {
29 | $meta_title = get_term_meta( $term->term_id, 'meta_title', true );
30 | $meta_description = get_term_meta( $term->term_id, 'meta_description', true );
31 | }
32 | }
33 |
34 | // Fallback to global settings.
35 | $settings = get_option( 'seo_wp_settings', [] );
36 | $meta_title = $meta_title ?: ( $settings['social_title'] ?? get_bloginfo( 'name' ) );
37 | $meta_description = $meta_description ?: ( $settings['social_description'] ?? get_bloginfo( 'description' ) );
38 | $meta_image = $meta_image ?: ( $settings['social_image'] ?? '' );
39 |
40 | // Output Open Graph Tags.
41 | echo '' . "\n";
42 | echo '' . "\n";
43 | echo '' . "\n";
44 | echo '' . "\n";
45 | if ( $meta_image ) {
46 | echo '' . "\n";
47 | }
48 | echo '' . "\n";
49 |
50 | // Output Twitter Card Tags.
51 | echo '' . "\n";
52 | echo '' . "\n";
53 | echo '' . "\n";
54 | echo '' . "\n";
55 | if ( $meta_image ) {
56 | echo '' . "\n";
57 | }
58 | }
59 | add_action( 'wp_head', 'seo_wp_output_social_meta', 1 );
60 |
61 | /**
62 | * Modify document title parts.
63 | *
64 | * @since 1.0.0
65 | * @param array $title_parts Title parts array.
66 | * @return array Modified title parts.
67 | */
68 | function seo_wp_replace_title( $title_parts ) {
69 | if ( is_singular() ) {
70 | global $post;
71 |
72 | // Retrieve custom SEO title.
73 | $seo_title = get_post_meta( $post->ID, '_seo_wp_seo_title', true );
74 |
75 | // Retrieve fallback default title from settings.
76 | $settings = get_option( 'seo_wp_settings', [] );
77 | $default_title = $settings['website_name'] ?? '';
78 | $default_tagline = $settings['website_tagline'] ?? '';
79 | $title_separator = $settings['title_separator'] ?? '-';
80 |
81 | // Build the title.
82 | if ( $seo_title ) {
83 | $title_parts['title'] = $seo_title;
84 | } elseif ( $default_title ) {
85 | $title_parts['title'] = $default_title;
86 | if ( $default_tagline ) {
87 | $title_parts['tagline'] = "$title_separator $default_tagline";
88 | }
89 | }
90 | }
91 |
92 | if ( is_category() || is_tag() || is_tax() ) {
93 | $term = get_queried_object();
94 | if ( ! is_wp_error( $term ) && $term ) {
95 | $meta_title = get_term_meta( $term->term_id, 'meta_title', true );
96 | if ( $meta_title ) {
97 | $title_parts['title'] = esc_html( $meta_title );
98 | }
99 | }
100 | }
101 |
102 | return $title_parts;
103 | }
104 | add_filter( 'document_title_parts', 'seo_wp_replace_title', 1 );
105 |
106 | /**
107 | * Output robots meta tag.
108 | *
109 | * @since 1.0.0
110 | * @return void
111 | */
112 | function seo_wp_output_robots_meta() {
113 | $noindex = false;
114 | $nofollow = false;
115 |
116 | if ( is_singular() ) {
117 | global $post;
118 | $noindex = get_post_meta( $post->ID, '_seo_wp_noindex', true );
119 | $nofollow = get_post_meta( $post->ID, '_seo_wp_nofollow', true );
120 | } elseif ( is_category() || is_tag() || is_tax() ) {
121 | $term = get_queried_object();
122 | if ( ! is_wp_error( $term ) && $term ) {
123 | $noindex = get_term_meta( $term->term_id, 'noindex', true );
124 | $nofollow = get_term_meta( $term->term_id, 'nofollow', true );
125 | }
126 | }
127 |
128 | $robots = [];
129 | if ( $noindex ) {
130 | $robots[] = 'noindex';
131 | }
132 | if ( $nofollow ) {
133 | $robots[] = 'nofollow';
134 | }
135 |
136 | if ( ! empty( $robots ) ) {
137 | echo '' . "\n";
138 | }
139 | }
140 | add_action( 'wp_head', 'seo_wp_output_robots_meta', 1 );
141 |
142 | /**
143 | * Output canonical tag.
144 | *
145 | * @since 1.0.0
146 | * @return void
147 | */
148 | function seo_wp_output_canonical_tag() {
149 | $canonical_url = '';
150 |
151 | if ( is_singular() ) {
152 | global $post;
153 | $canonical_url = get_post_meta( $post->ID, '_seo_wp_canonical_url', true );
154 | } elseif ( is_category() || is_tag() || is_tax() ) {
155 | $term = get_queried_object();
156 | if ( ! is_wp_error( $term ) && $term ) {
157 | $canonical_url = get_term_meta( $term->term_id, 'canonical_url', true );
158 | }
159 | }
160 |
161 | // Fallback to default canonical URL.
162 | if ( ! $canonical_url ) {
163 | $canonical_url = home_url( add_query_arg( null, null ) );
164 | }
165 |
166 | echo '' . "\n";
167 | }
168 | add_action( 'wp_head', 'seo_wp_output_canonical_tag', 1 );
169 |
170 | /**
171 | * Output pagination meta tags.
172 | *
173 | * @since 1.0.0
174 | * @return void
175 | */
176 | function seo_wp_output_pagination_meta() {
177 | if ( ! is_singular() && ! is_archive() && ! is_paged() ) {
178 | return;
179 | }
180 |
181 | global $paged, $wp_query;
182 |
183 | if ( ! $paged ) {
184 | $paged = 1;
185 | }
186 |
187 | $prev_page = $paged > 1 ? $paged - 1 : null;
188 | $next_page = $paged < $wp_query->max_num_pages ? $paged + 1 : null;
189 |
190 | if ( $prev_page ) {
191 | echo '' . "\n";
192 | }
193 |
194 | if ( $next_page ) {
195 | echo '' . "\n";
196 | }
197 | }
198 | add_action( 'wp_head', 'seo_wp_output_pagination_meta', 1 );
199 |
--------------------------------------------------------------------------------
/includes/robots.php:
--------------------------------------------------------------------------------
1 | ';
85 | $sitemap .= '';
86 |
87 | // Add homepage to the sitemap.
88 | $sitemap .= '';
89 | $sitemap .= '' . $home_url . '';
90 | $sitemap .= '' . esc_html( date( 'c' ) ) . '';
91 | $sitemap .= 'daily';
92 | $sitemap .= '1.0';
93 | $sitemap .= '';
94 |
95 | // Add links to individual sitemaps.
96 | $post_types = get_post_types( [ 'public' => true ], 'objects' );
97 | foreach ( $post_types as $post_type ) {
98 | $sitemap .= '';
99 | $sitemap .= '' . esc_url( home_url( "/sitemap-{$post_type->name}.xml" ) ) . '';
100 | $sitemap .= '' . esc_html( date( 'c' ) ) . '';
101 | $sitemap .= 'weekly';
102 | $sitemap .= '0.8';
103 | $sitemap .= '';
104 | }
105 |
106 | $sitemap .= '';
107 | return $sitemap;
108 | }
109 |
110 | /**
111 | * Generate a sitemap for a specific post type.
112 | *
113 | * This function generates the XML sitemap for a specific post type, including all published posts.
114 | *
115 | * @since 1.0.0
116 | *
117 | * @param string $post_type The post type for which the sitemap is generated.
118 | * @return string XML content of the post type-specific sitemap.
119 | */
120 | function seo_wp_generate_post_type_sitemap( $post_type ) {
121 | $posts = get_posts( [
122 | 'post_type' => $post_type,
123 | 'posts_per_page' => -1,
124 | 'post_status' => 'publish',
125 | ] );
126 |
127 | $sitemap = '';
128 | $sitemap .= '';
129 |
130 | foreach ( $posts as $post ) {
131 | $sitemap .= '';
132 | $sitemap .= '' . esc_url( get_permalink( $post ) ) . '';
133 | $sitemap .= '' . esc_html( get_the_modified_date( 'c', $post ) ) . '';
134 | $sitemap .= 'weekly';
135 | $sitemap .= '0.8';
136 | $sitemap .= '';
137 | }
138 |
139 | $sitemap .= '';
140 | return $sitemap;
141 | }
142 |
--------------------------------------------------------------------------------
/js/media-uploader.js:
--------------------------------------------------------------------------------
1 | jQuery(document).ready(function ($) {
2 | $('.upload-button, .seo-wp-upload-image').on('click', function (e) {
3 | e.preventDefault();
4 |
5 | // Retrieve the target input field ID or selector
6 | const target = $(this).data('target');
7 | if (!target) {
8 | console.error('Missing data-target attribute for upload button.');
9 | return;
10 | }
11 |
12 | // Initialize the WordPress media frame
13 | const frame = wp.media({
14 | title: 'Select or Upload Image',
15 | button: {
16 | text: 'Use Image',
17 | },
18 | multiple: false,
19 | });
20 |
21 | // Handle image selection
22 | frame.on('select', function () {
23 | const attachment = frame.state().get('selection').first().toJSON();
24 | $(target).val(attachment.url); // Update the target input field with the image URL
25 | });
26 |
27 | frame.open();
28 | });
29 |
30 | $('.seo-upload-button').on('click', function () {
31 | const target = $(this).data('target');
32 | const fileFrame = wp.media({
33 | title: 'Select Image',
34 | button: {
35 | text: 'Use This Image'
36 | },
37 | multiple: false
38 | });
39 |
40 | fileFrame.on('select', function () {
41 | const attachment = fileFrame.state().get('selection').first().toJSON();
42 | $(target).val(attachment.url);
43 | });
44 |
45 | fileFrame.open();
46 | });
47 |
48 | });
49 |
--------------------------------------------------------------------------------
/js/seo-character-counter.js:
--------------------------------------------------------------------------------
1 | document.addEventListener("DOMContentLoaded", function () {
2 | // Constants for SEO field limits
3 | const TITLE_MAX_LENGTH = 60;
4 | const DESCRIPTION_MAX_LENGTH = 160;
5 |
6 | // Get SEO fields
7 | const titleInput = document.getElementById("seo_wp_seo_title");
8 | const descriptionInput = document.getElementById("seo_wp_seo_description");
9 |
10 | // Create counter elements
11 | function createCounterElement(id, maxLength) {
12 | const counter = document.createElement("p");
13 | counter.id = id;
14 | counter.style.fontSize = "12px";
15 | counter.style.color = "#666";
16 | counter.style.marginTop = "5px";
17 | counter.textContent = `0 / ${maxLength} characters`;
18 | return counter;
19 | }
20 |
21 | // Append character counters
22 | if (titleInput) {
23 | const titleCounter = createCounterElement("seo-title-counter", TITLE_MAX_LENGTH);
24 | titleInput.parentNode.appendChild(titleCounter);
25 | updateCounter(titleInput, titleCounter, TITLE_MAX_LENGTH);
26 | titleInput.addEventListener("input", function () {
27 | updateCounter(titleInput, titleCounter, TITLE_MAX_LENGTH);
28 | });
29 | }
30 |
31 | if (descriptionInput) {
32 | const descriptionCounter = createCounterElement("seo-description-counter", DESCRIPTION_MAX_LENGTH);
33 | descriptionInput.parentNode.appendChild(descriptionCounter);
34 | updateCounter(descriptionInput, descriptionCounter, DESCRIPTION_MAX_LENGTH);
35 | descriptionInput.addEventListener("input", function () {
36 | updateCounter(descriptionInput, descriptionCounter, DESCRIPTION_MAX_LENGTH);
37 | });
38 | }
39 |
40 | // Update counter function
41 | function updateCounter(input, counter, maxLength) {
42 | const length = input.value.length;
43 | counter.textContent = `${length} / ${maxLength} characters`;
44 |
45 | if (length > maxLength) {
46 | counter.style.color = "red";
47 | } else if (length > maxLength - 10) {
48 | counter.style.color = "orange";
49 | } else {
50 | counter.style.color = "#666";
51 | }
52 | }
53 | });
54 |
--------------------------------------------------------------------------------
/languages/seo-for-wordpress-af.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/languages/seo-for-wordpress-af.mo
--------------------------------------------------------------------------------
/languages/seo-for-wordpress-de_DE.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/languages/seo-for-wordpress-de_DE.mo
--------------------------------------------------------------------------------
/languages/seo-for-wordpress-es_MX.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/languages/seo-for-wordpress-es_MX.mo
--------------------------------------------------------------------------------
/languages/seo-for-wordpress-fr_FR.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/languages/seo-for-wordpress-fr_FR.mo
--------------------------------------------------------------------------------
/languages/seo-for-wordpress-it_IT.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/languages/seo-for-wordpress-it_IT.mo
--------------------------------------------------------------------------------
/vendor/autoload.php:
--------------------------------------------------------------------------------
1 | $vendorDir . '/composer/InstalledVersions.php',
10 | );
11 |
--------------------------------------------------------------------------------
/vendor/composer/autoload_namespaces.php:
--------------------------------------------------------------------------------
1 | array($vendorDir . '/robertdevore/wpcom-check/src'),
10 | );
11 |
--------------------------------------------------------------------------------
/vendor/composer/autoload_real.php:
--------------------------------------------------------------------------------
1 | register(true);
35 |
36 | return $loader;
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/vendor/composer/autoload_static.php:
--------------------------------------------------------------------------------
1 |
11 | array (
12 | 'RobertDevore\\WPComCheck\\' => 24,
13 | ),
14 | );
15 |
16 | public static $prefixDirsPsr4 = array (
17 | 'RobertDevore\\WPComCheck\\' =>
18 | array (
19 | 0 => __DIR__ . '/..' . '/robertdevore/wpcom-check/src',
20 | ),
21 | );
22 |
23 | public static $classMap = array (
24 | 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
25 | );
26 |
27 | public static function getInitializer(ClassLoader $loader)
28 | {
29 | return \Closure::bind(function () use ($loader) {
30 | $loader->prefixLengthsPsr4 = ComposerStaticInit455764cd9b78270c5af3fb1bf25af96e::$prefixLengthsPsr4;
31 | $loader->prefixDirsPsr4 = ComposerStaticInit455764cd9b78270c5af3fb1bf25af96e::$prefixDirsPsr4;
32 | $loader->classMap = ComposerStaticInit455764cd9b78270c5af3fb1bf25af96e::$classMap;
33 |
34 | }, null, ClassLoader::class);
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/vendor/composer/installed.json:
--------------------------------------------------------------------------------
1 | {
2 | "packages": [
3 | {
4 | "name": "robertdevore/wpcom-check",
5 | "version": "1.0.1",
6 | "version_normalized": "1.0.1.0",
7 | "source": {
8 | "type": "git",
9 | "url": "https://github.com/robertdevore/wpcom-check.git",
10 | "reference": "25eb61d7e0fbd4b2a87a81c3fa7dca722f8d8058"
11 | },
12 | "dist": {
13 | "type": "zip",
14 | "url": "https://api.github.com/repos/robertdevore/wpcom-check/zipball/25eb61d7e0fbd4b2a87a81c3fa7dca722f8d8058",
15 | "reference": "25eb61d7e0fbd4b2a87a81c3fa7dca722f8d8058",
16 | "shasum": ""
17 | },
18 | "require": {
19 | "php": ">=7.4"
20 | },
21 | "time": "2025-01-07T17:17:53+00:00",
22 | "type": "library",
23 | "extra": {
24 | "wordpress-plugin": true
25 | },
26 | "installation-source": "dist",
27 | "autoload": {
28 | "psr-4": {
29 | "RobertDevore\\WPComCheck\\": "src/"
30 | }
31 | },
32 | "notification-url": "https://packagist.org/downloads/",
33 | "license": [
34 | "MIT"
35 | ],
36 | "authors": [
37 | {
38 | "name": "Robert DeVore",
39 | "email": "me@robertdevore.com",
40 | "homepage": "https://github.com/robertdevore",
41 | "role": "Developer"
42 | }
43 | ],
44 | "description": "A utility to handle WordPress.com-specific plugin compatibility and auto-deactivation.",
45 | "homepage": "https://github.com/robertdevore/wpcom-check",
46 | "keywords": [
47 | "compatibility",
48 | "deactivation",
49 | "plugin",
50 | "wordpress",
51 | "wordpress.com"
52 | ],
53 | "support": {
54 | "issues": "https://github.com/robertdevore/wpcom-check/issues",
55 | "source": "https://github.com/robertdevore/wpcom-check/tree/1.0.1"
56 | },
57 | "install-path": "../robertdevore/wpcom-check"
58 | }
59 | ],
60 | "dev": true,
61 | "dev-package-names": []
62 | }
63 |
--------------------------------------------------------------------------------
/vendor/composer/installed.php:
--------------------------------------------------------------------------------
1 | array(
3 | 'name' => '__root__',
4 | 'pretty_version' => 'dev-develop',
5 | 'version' => 'dev-develop',
6 | 'reference' => '3acb9bab6d04ccd53ff30376bc8dfe035e545132',
7 | 'type' => 'library',
8 | 'install_path' => __DIR__ . '/../../',
9 | 'aliases' => array(),
10 | 'dev' => true,
11 | ),
12 | 'versions' => array(
13 | '__root__' => array(
14 | 'pretty_version' => 'dev-develop',
15 | 'version' => 'dev-develop',
16 | 'reference' => '3acb9bab6d04ccd53ff30376bc8dfe035e545132',
17 | 'type' => 'library',
18 | 'install_path' => __DIR__ . '/../../',
19 | 'aliases' => array(),
20 | 'dev_requirement' => false,
21 | ),
22 | 'robertdevore/wpcom-check' => array(
23 | 'pretty_version' => '1.0.1',
24 | 'version' => '1.0.1.0',
25 | 'reference' => '25eb61d7e0fbd4b2a87a81c3fa7dca722f8d8058',
26 | 'type' => 'library',
27 | 'install_path' => __DIR__ . '/../robertdevore/wpcom-check',
28 | 'aliases' => array(),
29 | 'dev_requirement' => false,
30 | ),
31 | ),
32 | );
33 |
--------------------------------------------------------------------------------
/vendor/composer/platform_check.php:
--------------------------------------------------------------------------------
1 | = 70400)) {
8 | $issues[] = 'Your Composer dependencies require a PHP version ">= 7.4.0". You are running ' . PHP_VERSION . '.';
9 | }
10 |
11 | if ($issues) {
12 | if (!headers_sent()) {
13 | header('HTTP/1.1 500 Internal Server Error');
14 | }
15 | if (!ini_get('display_errors')) {
16 | if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
17 | fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
18 | } elseif (!headers_sent()) {
19 | echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
20 | }
21 | }
22 | trigger_error(
23 | 'Composer detected issues in your platform: ' . implode(' ', $issues),
24 | E_USER_ERROR
25 | );
26 | }
27 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/Puc/v5/PucFactory.php:
--------------------------------------------------------------------------------
1 | rootDir = dirname(__FILE__) . '/';
18 |
19 | $namespaceWithSlash = __NAMESPACE__ . '\\';
20 | $this->prefix = $namespaceWithSlash;
21 |
22 | $this->libraryDir = $this->rootDir . '../..';
23 | if ( !self::isPhar() ) {
24 | $this->libraryDir = realpath($this->libraryDir);
25 | }
26 | $this->libraryDir = $this->libraryDir . '/';
27 |
28 | //Usually, dependencies like Parsedown are in the global namespace,
29 | //but if someone adds a custom namespace to the entire library, they
30 | //will be in the same namespace as this class.
31 | $isCustomNamespace = (
32 | substr($namespaceWithSlash, 0, strlen(self::DEFAULT_NS_PREFIX)) !== self::DEFAULT_NS_PREFIX
33 | );
34 | $libraryPrefix = $isCustomNamespace ? $namespaceWithSlash : '';
35 |
36 | $this->staticMap = array(
37 | $libraryPrefix . 'PucReadmeParser' => 'vendor/PucReadmeParser.php',
38 | $libraryPrefix . 'Parsedown' => 'vendor/Parsedown.php',
39 | );
40 |
41 | //Add the generic, major-version-only factory class to the static map.
42 | $versionSeparatorPos = strrpos(__NAMESPACE__, '\\v');
43 | if ( $versionSeparatorPos !== false ) {
44 | $versionSegment = substr(__NAMESPACE__, $versionSeparatorPos + 1);
45 | $pointPos = strpos($versionSegment, 'p');
46 | if ( ($pointPos !== false) && ($pointPos > 1) ) {
47 | $majorVersionSegment = substr($versionSegment, 0, $pointPos);
48 | $majorVersionNs = __NAMESPACE__ . '\\' . $majorVersionSegment;
49 | $this->staticMap[$majorVersionNs . '\\PucFactory'] =
50 | 'Puc/' . $majorVersionSegment . '/Factory.php';
51 | }
52 | }
53 |
54 | spl_autoload_register(array($this, 'autoload'));
55 | }
56 |
57 | /**
58 | * Determine if this file is running as part of a Phar archive.
59 | *
60 | * @return bool
61 | */
62 | private static function isPhar() {
63 | //Check if the current file path starts with "phar://".
64 | static $pharProtocol = 'phar://';
65 | return (substr(__FILE__, 0, strlen($pharProtocol)) === $pharProtocol);
66 | }
67 |
68 | public function autoload($className) {
69 | if ( isset($this->staticMap[$className]) && file_exists($this->libraryDir . $this->staticMap[$className]) ) {
70 | include($this->libraryDir . $this->staticMap[$className]);
71 | return;
72 | }
73 |
74 | if ( strpos($className, $this->prefix) === 0 ) {
75 | $path = substr($className, strlen($this->prefix));
76 | $path = str_replace(array('_', '\\'), '/', $path);
77 | $path = $this->rootDir . $path . '.php';
78 |
79 | if ( file_exists($path) ) {
80 | include $path;
81 | }
82 | }
83 | }
84 | }
85 |
86 | endif;
87 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/Puc/v5p4/DebugBar/Extension.php:
--------------------------------------------------------------------------------
1 | updateChecker = $updateChecker;
18 | if ( isset($panelClass) ) {
19 | $this->panelClass = $panelClass;
20 | }
21 |
22 | if ( (strpos($this->panelClass, '\\') === false) ) {
23 | $this->panelClass = __NAMESPACE__ . '\\' . $this->panelClass;
24 | }
25 |
26 | add_filter('debug_bar_panels', array($this, 'addDebugBarPanel'));
27 | add_action('debug_bar_enqueue_scripts', array($this, 'enqueuePanelDependencies'));
28 |
29 | add_action('wp_ajax_puc_v5_debug_check_now', array($this, 'ajaxCheckNow'));
30 | }
31 |
32 | /**
33 | * Register the PUC Debug Bar panel.
34 | *
35 | * @param array $panels
36 | * @return array
37 | */
38 | public function addDebugBarPanel($panels) {
39 | if ( $this->updateChecker->userCanInstallUpdates() ) {
40 | $panels[] = new $this->panelClass($this->updateChecker);
41 | }
42 | return $panels;
43 | }
44 |
45 | /**
46 | * Enqueue our Debug Bar scripts and styles.
47 | */
48 | public function enqueuePanelDependencies() {
49 | wp_enqueue_style(
50 | 'puc-debug-bar-style-v5',
51 | $this->getLibraryUrl("/css/puc-debug-bar.css"),
52 | array('debug-bar'),
53 | '20221008'
54 | );
55 |
56 | wp_enqueue_script(
57 | 'puc-debug-bar-js-v5',
58 | $this->getLibraryUrl("/js/debug-bar.js"),
59 | array('jquery'),
60 | '20221008'
61 | );
62 | }
63 |
64 | /**
65 | * Run an update check and output the result. Useful for making sure that
66 | * the update checking process works as expected.
67 | */
68 | public function ajaxCheckNow() {
69 | //phpcs:ignore WordPress.Security.NonceVerification.Missing -- Nonce is checked in preAjaxRequest().
70 | if ( !isset($_POST['uid']) || ($_POST['uid'] !== $this->updateChecker->getUniqueName('uid')) ) {
71 | return;
72 | }
73 | $this->preAjaxRequest();
74 | $update = $this->updateChecker->checkForUpdates();
75 | if ( $update !== null ) {
76 | echo "An update is available:";
77 | //phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_print_r -- For debugging output.
78 | echo '', esc_html(print_r($update, true)), '
';
79 | } else {
80 | echo 'No updates found.';
81 | }
82 |
83 | $errors = $this->updateChecker->getLastRequestApiErrors();
84 | if ( !empty($errors) ) {
85 | printf('The update checker encountered %d API error%s.
', count($errors), (count($errors) > 1) ? 's' : '');
86 |
87 | foreach (array_values($errors) as $num => $item) {
88 | $wpError = $item['error'];
89 | /** @var \WP_Error $wpError */
90 | printf('%d) %s
', intval($num + 1), esc_html($wpError->get_error_message()));
91 |
92 | echo '';
93 | printf('- Error code:
%s
', esc_html($wpError->get_error_code()));
94 |
95 | if ( isset($item['url']) ) {
96 | printf('- Requested URL:
%s
', esc_html($item['url']));
97 | }
98 |
99 | if ( isset($item['httpResponse']) ) {
100 | if ( is_wp_error($item['httpResponse']) ) {
101 | $httpError = $item['httpResponse'];
102 | /** @var \WP_Error $httpError */
103 | printf(
104 | '- WordPress HTTP API error:
- %s (
%s
) ',
105 | esc_html($httpError->get_error_message()),
106 | esc_html($httpError->get_error_code())
107 | );
108 | } else {
109 | //Status code.
110 | printf(
111 | '- HTTP status:
%d %s
',
112 | esc_html(wp_remote_retrieve_response_code($item['httpResponse'])),
113 | esc_html(wp_remote_retrieve_response_message($item['httpResponse']))
114 | );
115 |
116 | //Headers.
117 | echo '- Response headers:
';
118 | foreach (wp_remote_retrieve_headers($item['httpResponse']) as $name => $value) {
119 | printf("%s: %s\n", esc_html($name), esc_html($value));
120 | }
121 | echo '
';
122 |
123 | //Body.
124 | $body = wp_remote_retrieve_body($item['httpResponse']);
125 | if ( $body === '' ) {
126 | $body = '(Empty response.)';
127 | } else if ( strlen($body) > self::RESPONSE_BODY_LENGTH_LIMIT ) {
128 | $length = strlen($body);
129 | $body = substr($body, 0, self::RESPONSE_BODY_LENGTH_LIMIT)
130 | . sprintf("\n(Long string truncated. Total length: %d bytes.)", $length);
131 | }
132 |
133 | printf('- Response body:
%s
', esc_html($body));
134 | }
135 | }
136 | echo '';
137 | }
138 | }
139 |
140 | exit;
141 | }
142 |
143 | /**
144 | * Check access permissions and enable error display (for debugging).
145 | */
146 | protected function preAjaxRequest() {
147 | if ( !$this->updateChecker->userCanInstallUpdates() ) {
148 | die('Access denied');
149 | }
150 | check_ajax_referer('puc-ajax');
151 |
152 | //phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.runtime_configuration_error_reporting -- Part of a debugging feature.
153 | error_reporting(E_ALL);
154 | //phpcs:ignore WordPress.PHP.IniSet.display_errors_Blacklisted
155 | @ini_set('display_errors', 'On');
156 | }
157 |
158 | /**
159 | * Remove hooks that were added by this extension.
160 | */
161 | public function removeHooks() {
162 | remove_filter('debug_bar_panels', array($this, 'addDebugBarPanel'));
163 | remove_action('debug_bar_enqueue_scripts', array($this, 'enqueuePanelDependencies'));
164 | remove_action('wp_ajax_puc_v5_debug_check_now', array($this, 'ajaxCheckNow'));
165 | }
166 |
167 | /**
168 | * @param string $filePath
169 | * @return string
170 | */
171 | private function getLibraryUrl($filePath) {
172 | $absolutePath = realpath(dirname(__FILE__) . '/../../../' . ltrim($filePath, '/'));
173 |
174 | //Where is the library located inside the WordPress directory structure?
175 | $absolutePath = PucFactory::normalizePath($absolutePath);
176 |
177 | $pluginDir = PucFactory::normalizePath(WP_PLUGIN_DIR);
178 | $muPluginDir = PucFactory::normalizePath(WPMU_PLUGIN_DIR);
179 | $themeDir = PucFactory::normalizePath(get_theme_root());
180 |
181 | if ( (strpos($absolutePath, $pluginDir) === 0) || (strpos($absolutePath, $muPluginDir) === 0) ) {
182 | //It's part of a plugin.
183 | return plugins_url(basename($absolutePath), $absolutePath);
184 | } else if ( strpos($absolutePath, $themeDir) === 0 ) {
185 | //It's part of a theme.
186 | $relativePath = substr($absolutePath, strlen($themeDir) + 1);
187 | $template = substr($relativePath, 0, strpos($relativePath, '/'));
188 | $baseUrl = get_theme_root_uri($template);
189 |
190 | if ( !empty($baseUrl) && $relativePath ) {
191 | return $baseUrl . '/' . $relativePath;
192 | }
193 | }
194 |
195 | return '';
196 | }
197 | }
198 |
199 | endif;
200 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/Puc/v5p4/DebugBar/Panel.php:
--------------------------------------------------------------------------------
1 | ';
13 |
14 | public function __construct($updateChecker) {
15 | $this->updateChecker = $updateChecker;
16 | $title = sprintf(
17 | '',
18 | esc_attr($this->updateChecker->getUniqueName('uid')),
19 | $this->updateChecker->slug
20 | );
21 | parent::__construct($title);
22 | }
23 |
24 | public function render() {
25 | printf(
26 | '',
27 | esc_attr($this->updateChecker->getUniqueName('debug-bar-panel')),
28 | esc_attr($this->updateChecker->slug),
29 | esc_attr($this->updateChecker->getUniqueName('uid')),
30 | esc_attr(wp_create_nonce('puc-ajax'))
31 | );
32 |
33 | $this->displayConfiguration();
34 | $this->displayStatus();
35 | $this->displayCurrentUpdate();
36 |
37 | echo '
';
38 | }
39 |
40 | private function displayConfiguration() {
41 | echo 'Configuration
';
42 | echo '';
43 | $this->displayConfigHeader();
44 | $this->row('Slug', htmlentities($this->updateChecker->slug));
45 | $this->row('DB option', htmlentities($this->updateChecker->optionName));
46 |
47 | $requestInfoButton = $this->getMetadataButton();
48 | $this->row('Metadata URL', htmlentities($this->updateChecker->metadataUrl) . ' ' . $requestInfoButton . $this->responseBox);
49 |
50 | $scheduler = $this->updateChecker->scheduler;
51 | if ( $scheduler->checkPeriod > 0 ) {
52 | $this->row('Automatic checks', 'Every ' . $scheduler->checkPeriod . ' hours');
53 | } else {
54 | $this->row('Automatic checks', 'Disabled');
55 | }
56 |
57 | if ( isset($scheduler->throttleRedundantChecks) ) {
58 | if ( $scheduler->throttleRedundantChecks && ($scheduler->checkPeriod > 0) ) {
59 | $this->row(
60 | 'Throttling',
61 | sprintf(
62 | 'Enabled. If an update is already available, check for updates every %1$d hours instead of every %2$d hours.',
63 | $scheduler->throttledCheckPeriod,
64 | $scheduler->checkPeriod
65 | )
66 | );
67 | } else {
68 | $this->row('Throttling', 'Disabled');
69 | }
70 | }
71 |
72 | $this->updateChecker->onDisplayConfiguration($this);
73 |
74 | echo '
';
75 | }
76 |
77 | protected function displayConfigHeader() {
78 | //Do nothing. This should be implemented in subclasses.
79 | }
80 |
81 | protected function getMetadataButton() {
82 | return '';
83 | }
84 |
85 | private function displayStatus() {
86 | echo 'Status
';
87 | echo '';
88 | $state = $this->updateChecker->getUpdateState();
89 | $checkNowButton = '';
90 | if ( function_exists('get_submit_button') ) {
91 | $checkNowButton = get_submit_button(
92 | 'Check Now',
93 | 'secondary',
94 | 'puc-check-now-button',
95 | false,
96 | array('id' => $this->updateChecker->getUniqueName('check-now-button'))
97 | );
98 | }
99 |
100 | if ( $state->getLastCheck() > 0 ) {
101 | $this->row('Last check', $this->formatTimeWithDelta($state->getLastCheck()) . ' ' . $checkNowButton . $this->responseBox);
102 | } else {
103 | $this->row('Last check', 'Never');
104 | }
105 |
106 | $nextCheck = wp_next_scheduled($this->updateChecker->scheduler->getCronHookName());
107 | $this->row('Next automatic check', $this->formatTimeWithDelta($nextCheck));
108 |
109 | if ( $state->getCheckedVersion() !== '' ) {
110 | $this->row('Checked version', htmlentities($state->getCheckedVersion()));
111 | $this->row('Cached update', $state->getUpdate());
112 | }
113 | $this->row('Update checker class', htmlentities(get_class($this->updateChecker)));
114 | echo '
';
115 | }
116 |
117 | private function displayCurrentUpdate() {
118 | $update = $this->updateChecker->getUpdate();
119 | if ( $update !== null ) {
120 | echo 'An Update Is Available
';
121 | echo '';
122 | $fields = $this->getUpdateFields();
123 | foreach($fields as $field) {
124 | if ( property_exists($update, $field) ) {
125 | $this->row(
126 | ucwords(str_replace('_', ' ', $field)),
127 | isset($update->$field) ? htmlentities($update->$field) : null
128 | );
129 | }
130 | }
131 | echo '
';
132 | } else {
133 | echo 'No updates currently available
';
134 | }
135 | }
136 |
137 | protected function getUpdateFields() {
138 | return array('version', 'download_url', 'slug',);
139 | }
140 |
141 | private function formatTimeWithDelta($unixTime) {
142 | if ( empty($unixTime) ) {
143 | return 'Never';
144 | }
145 |
146 | $delta = time() - $unixTime;
147 | $result = human_time_diff(time(), $unixTime);
148 | if ( $delta < 0 ) {
149 | $result = 'after ' . $result;
150 | } else {
151 | $result = $result . ' ago';
152 | }
153 | $result .= ' (' . $this->formatTimestamp($unixTime) . ')';
154 | return $result;
155 | }
156 |
157 | private function formatTimestamp($unixTime) {
158 | return gmdate('Y-m-d H:i:s', $unixTime + (get_option('gmt_offset') * 3600));
159 | }
160 |
161 | public function row($name, $value) {
162 | if ( is_object($value) || is_array($value) ) {
163 | //This is specifically for debugging, so print_r() is fine.
164 | //phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_print_r
165 | $value = '' . htmlentities(print_r($value, true)) . '
';
166 | } else if ($value === null) {
167 | $value = 'null
';
168 | }
169 | printf(
170 | '%1$s | %2$s |
',
171 | esc_html($name),
172 | //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Escaped above.
173 | $value
174 | );
175 | }
176 | }
177 |
178 | endif;
179 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/Puc/v5p4/DebugBar/PluginExtension.php:
--------------------------------------------------------------------------------
1 | updateChecker->getUniqueName('uid')) ) {
25 | return;
26 | }
27 | $this->preAjaxRequest();
28 | $info = $this->updateChecker->requestInfo();
29 | if ( $info !== null ) {
30 | echo 'Successfully retrieved plugin info from the metadata URL:';
31 | //phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_print_r -- For debugging output.
32 | echo '', esc_html(print_r($info, true)), '
';
33 | } else {
34 | echo 'Failed to retrieve plugin info from the metadata URL.';
35 | }
36 | exit;
37 | }
38 | }
39 |
40 | endif;
41 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/Puc/v5p4/DebugBar/PluginPanel.php:
--------------------------------------------------------------------------------
1 | row('Plugin file', htmlentities($this->updateChecker->pluginFile));
16 | parent::displayConfigHeader();
17 | }
18 |
19 | protected function getMetadataButton() {
20 | $requestInfoButton = '';
21 | if ( function_exists('get_submit_button') ) {
22 | $requestInfoButton = get_submit_button(
23 | 'Request Info',
24 | 'secondary',
25 | 'puc-request-info-button',
26 | false,
27 | array('id' => $this->updateChecker->getUniqueName('request-info-button'))
28 | );
29 | }
30 | return $requestInfoButton;
31 | }
32 |
33 | protected function getUpdateFields() {
34 | return array_merge(
35 | parent::getUpdateFields(),
36 | array('homepage', 'upgrade_notice', 'tested',)
37 | );
38 | }
39 | }
40 |
41 | endif;
42 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/Puc/v5p4/DebugBar/ThemePanel.php:
--------------------------------------------------------------------------------
1 | row('Theme directory', htmlentities($this->updateChecker->directoryName));
17 | parent::displayConfigHeader();
18 | }
19 |
20 | protected function getUpdateFields() {
21 | return array_merge(parent::getUpdateFields(), array('details_url'));
22 | }
23 | }
24 |
25 | endif;
26 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/Puc/v5p4/InstalledPackage.php:
--------------------------------------------------------------------------------
1 | updateChecker = $updateChecker;
20 | }
21 |
22 | /**
23 | * Get the currently installed version of the plugin or theme.
24 | *
25 | * @return string|null Version number.
26 | */
27 | abstract public function getInstalledVersion();
28 |
29 | /**
30 | * Get the full path of the plugin or theme directory (without a trailing slash).
31 | *
32 | * @return string
33 | */
34 | abstract public function getAbsoluteDirectoryPath();
35 |
36 | /**
37 | * Check whether a regular file exists in the package's directory.
38 | *
39 | * @param string $relativeFileName File name relative to the package directory.
40 | * @return bool
41 | */
42 | public function fileExists($relativeFileName) {
43 | return is_file(
44 | $this->getAbsoluteDirectoryPath()
45 | . DIRECTORY_SEPARATOR
46 | . ltrim($relativeFileName, '/\\')
47 | );
48 | }
49 |
50 | /* -------------------------------------------------------------------
51 | * File header parsing
52 | * -------------------------------------------------------------------
53 | */
54 |
55 | /**
56 | * Parse plugin or theme metadata from the header comment.
57 | *
58 | * This is basically a simplified version of the get_file_data() function from /wp-includes/functions.php.
59 | * It's intended as a utility for subclasses that detect updates by parsing files in a VCS.
60 | *
61 | * @param string|null $content File contents.
62 | * @return string[]
63 | */
64 | public function getFileHeader($content) {
65 | $content = (string)$content;
66 |
67 | //WordPress only looks at the first 8 KiB of the file, so we do the same.
68 | $content = substr($content, 0, 8192);
69 | //Normalize line endings.
70 | $content = str_replace("\r", "\n", $content);
71 |
72 | $headers = $this->getHeaderNames();
73 | $results = array();
74 | foreach ($headers as $field => $name) {
75 | $success = preg_match('/^[ \t\/*#@]*' . preg_quote($name, '/') . ':(.*)$/mi', $content, $matches);
76 |
77 | if ( ($success === 1) && $matches[1] ) {
78 | $value = $matches[1];
79 | if ( function_exists('_cleanup_header_comment') ) {
80 | $value = _cleanup_header_comment($value);
81 | }
82 | $results[$field] = $value;
83 | } else {
84 | $results[$field] = '';
85 | }
86 | }
87 |
88 | return $results;
89 | }
90 |
91 | /**
92 | * @return array Format: ['HeaderKey' => 'Header Name']
93 | */
94 | abstract protected function getHeaderNames();
95 |
96 | /**
97 | * Get the value of a specific plugin or theme header.
98 | *
99 | * @param string $headerName
100 | * @return string Either the value of the header, or an empty string if the header doesn't exist.
101 | */
102 | abstract public function getHeaderValue($headerName);
103 |
104 | }
105 | endif;
106 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/Puc/v5p4/Metadata.php:
--------------------------------------------------------------------------------
1 |
22 | */
23 | protected $extraProperties = array();
24 |
25 | /**
26 | * Create an instance of this class from a JSON document.
27 | *
28 | * @abstract
29 | * @param string $json
30 | * @return self
31 | */
32 | public static function fromJson($json) {
33 | throw new LogicException('The ' . __METHOD__ . ' method must be implemented by subclasses');
34 | }
35 |
36 | /**
37 | * @param string $json
38 | * @param self $target
39 | * @return bool
40 | */
41 | protected static function createFromJson($json, $target) {
42 | /** @var \StdClass $apiResponse */
43 | $apiResponse = json_decode($json);
44 | if ( empty($apiResponse) || !is_object($apiResponse) ){
45 | $errorMessage = "Failed to parse update metadata. Try validating your .json file with https://jsonlint.com/";
46 | do_action('puc_api_error', new WP_Error('puc-invalid-json', $errorMessage));
47 | //phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_trigger_error -- For plugin developers.
48 | trigger_error(esc_html($errorMessage), E_USER_NOTICE);
49 | return false;
50 | }
51 |
52 | $valid = $target->validateMetadata($apiResponse);
53 | if ( is_wp_error($valid) ){
54 | do_action('puc_api_error', $valid);
55 | //phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_trigger_error -- For plugin developers.
56 | trigger_error(esc_html($valid->get_error_message()), E_USER_NOTICE);
57 | return false;
58 | }
59 |
60 | foreach(get_object_vars($apiResponse) as $key => $value){
61 | $target->$key = $value;
62 | }
63 |
64 | return true;
65 | }
66 |
67 | /**
68 | * No validation by default! Subclasses should check that the required fields are present.
69 | *
70 | * @param \StdClass $apiResponse
71 | * @return bool|\WP_Error
72 | */
73 | protected function validateMetadata($apiResponse) {
74 | return true;
75 | }
76 |
77 | /**
78 | * Create a new instance by copying the necessary fields from another object.
79 | *
80 | * @abstract
81 | * @param \StdClass|self $object The source object.
82 | * @return self The new copy.
83 | */
84 | public static function fromObject($object) {
85 | throw new LogicException('The ' . __METHOD__ . ' method must be implemented by subclasses');
86 | }
87 |
88 | /**
89 | * Create an instance of StdClass that can later be converted back to an
90 | * update or info container. Useful for serialization and caching, as it
91 | * avoids the "incomplete object" problem if the cached value is loaded
92 | * before this class.
93 | *
94 | * @return \StdClass
95 | */
96 | public function toStdClass() {
97 | $object = new stdClass();
98 | $this->copyFields($this, $object);
99 | return $object;
100 | }
101 |
102 | /**
103 | * Transform the metadata into the format used by WordPress core.
104 | *
105 | * @return object
106 | */
107 | abstract public function toWpFormat();
108 |
109 | /**
110 | * Copy known fields from one object to another.
111 | *
112 | * @param \StdClass|self $from
113 | * @param \StdClass|self $to
114 | */
115 | protected function copyFields($from, $to) {
116 | $fields = $this->getFieldNames();
117 |
118 | if ( property_exists($from, 'slug') && !empty($from->slug) ) {
119 | //Let plugins add extra fields without having to create subclasses.
120 | $fields = apply_filters($this->getPrefixedFilter('retain_fields') . '-' . $from->slug, $fields);
121 | }
122 |
123 | foreach ($fields as $field) {
124 | if ( property_exists($from, $field) ) {
125 | $to->$field = $from->$field;
126 | }
127 | }
128 | }
129 |
130 | /**
131 | * @return string[]
132 | */
133 | protected function getFieldNames() {
134 | return array();
135 | }
136 |
137 | /**
138 | * @param string $tag
139 | * @return string
140 | */
141 | protected function getPrefixedFilter($tag) {
142 | return 'puc_' . $tag;
143 | }
144 |
145 | public function __set($name, $value) {
146 | $this->extraProperties[$name] = $value;
147 | }
148 |
149 | public function __get($name) {
150 | return isset($this->extraProperties[$name]) ? $this->extraProperties[$name] : null;
151 | }
152 |
153 | public function __isset($name) {
154 | return isset($this->extraProperties[$name]);
155 | }
156 |
157 | public function __unset($name) {
158 | unset($this->extraProperties[$name]);
159 | }
160 | }
161 |
162 | endif;
163 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/Puc/v5p4/OAuthSignature.php:
--------------------------------------------------------------------------------
1 | consumerKey = $consumerKey;
15 | $this->consumerSecret = $consumerSecret;
16 | }
17 |
18 | /**
19 | * Sign a URL using OAuth 1.0.
20 | *
21 | * @param string $url The URL to be signed. It may contain query parameters.
22 | * @param string $method HTTP method such as "GET", "POST" and so on.
23 | * @return string The signed URL.
24 | */
25 | public function sign($url, $method = 'GET') {
26 | $parameters = array();
27 |
28 | //Parse query parameters.
29 | $query = wp_parse_url($url, PHP_URL_QUERY);
30 | if ( !empty($query) ) {
31 | parse_str($query, $parsedParams);
32 | if ( is_array($parsedParams) ) {
33 | $parameters = $parsedParams;
34 | }
35 | //Remove the query string from the URL. We'll replace it later.
36 | $url = substr($url, 0, strpos($url, '?'));
37 | }
38 |
39 | $parameters = array_merge(
40 | $parameters,
41 | array(
42 | 'oauth_consumer_key' => $this->consumerKey,
43 | 'oauth_nonce' => $this->nonce(),
44 | 'oauth_signature_method' => 'HMAC-SHA1',
45 | 'oauth_timestamp' => time(),
46 | 'oauth_version' => '1.0',
47 | )
48 | );
49 | unset($parameters['oauth_signature']);
50 |
51 | //Parameters must be sorted alphabetically before signing.
52 | ksort($parameters);
53 |
54 | //The most complicated part of the request - generating the signature.
55 | //The string to sign contains the HTTP method, the URL path, and all of
56 | //our query parameters. Everything is URL encoded. Then we concatenate
57 | //them with ampersands into a single string to hash.
58 | $encodedVerb = urlencode($method);
59 | $encodedUrl = urlencode($url);
60 | $encodedParams = urlencode(http_build_query($parameters, '', '&'));
61 |
62 | $stringToSign = $encodedVerb . '&' . $encodedUrl . '&' . $encodedParams;
63 |
64 | //Since we only have one OAuth token (the consumer secret) we only have
65 | //to use it as our HMAC key. However, we still have to append an & to it
66 | //as if we were using it with additional tokens.
67 | $secret = urlencode($this->consumerSecret) . '&';
68 |
69 | //The signature is a hash of the consumer key and the base string. Note
70 | //that we have to get the raw output from hash_hmac and base64 encode
71 | //the binary data result.
72 | $parameters['oauth_signature'] = base64_encode(hash_hmac('sha1', $stringToSign, $secret, true));
73 |
74 | return ($url . '?' . http_build_query($parameters));
75 | }
76 |
77 | /**
78 | * Generate a random nonce.
79 | *
80 | * @return string
81 | */
82 | private function nonce() {
83 | $mt = microtime();
84 |
85 | $rand = null;
86 | if ( is_callable('random_bytes') ) {
87 | try {
88 | $rand = random_bytes(16);
89 | } catch (\Exception $ex) {
90 | //Fall back to mt_rand (below).
91 | }
92 | }
93 | if ( $rand === null ) {
94 | //phpcs:ignore WordPress.WP.AlternativeFunctions.rand_mt_rand
95 | $rand = function_exists('wp_rand') ? wp_rand() : mt_rand();
96 | }
97 |
98 | return md5($mt . '_' . $rand);
99 | }
100 | }
101 |
102 | endif;
103 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/Puc/v5p4/Plugin/Package.php:
--------------------------------------------------------------------------------
1 | pluginAbsolutePath = $pluginAbsolutePath;
32 | $this->pluginFile = plugin_basename($this->pluginAbsolutePath);
33 |
34 | parent::__construct($updateChecker);
35 |
36 | //Clear the version number cache when something - anything - is upgraded or WP clears the update cache.
37 | add_filter('upgrader_post_install', array($this, 'clearCachedVersion'));
38 | add_action('delete_site_transient_update_plugins', array($this, 'clearCachedVersion'));
39 | }
40 |
41 | public function getInstalledVersion() {
42 | if ( isset($this->cachedInstalledVersion) ) {
43 | return $this->cachedInstalledVersion;
44 | }
45 |
46 | $pluginHeader = $this->getPluginHeader();
47 | if ( isset($pluginHeader['Version']) ) {
48 | $this->cachedInstalledVersion = $pluginHeader['Version'];
49 | return $pluginHeader['Version'];
50 | } else {
51 | //This can happen if the filename points to something that is not a plugin.
52 | $this->updateChecker->triggerError(
53 | sprintf(
54 | "Cannot read the Version header for '%s'. The filename is incorrect or is not a plugin.",
55 | $this->updateChecker->pluginFile
56 | ),
57 | E_USER_WARNING
58 | );
59 | return null;
60 | }
61 | }
62 |
63 | /**
64 | * Clear the cached plugin version. This method can be set up as a filter (hook) and will
65 | * return the filter argument unmodified.
66 | *
67 | * @param mixed $filterArgument
68 | * @return mixed
69 | */
70 | public function clearCachedVersion($filterArgument = null) {
71 | $this->cachedInstalledVersion = null;
72 | return $filterArgument;
73 | }
74 |
75 | public function getAbsoluteDirectoryPath() {
76 | return dirname($this->pluginAbsolutePath);
77 | }
78 |
79 | /**
80 | * Get the value of a specific plugin or theme header.
81 | *
82 | * @param string $headerName
83 | * @param string $defaultValue
84 | * @return string Either the value of the header, or $defaultValue if the header doesn't exist or is empty.
85 | */
86 | public function getHeaderValue($headerName, $defaultValue = '') {
87 | $headers = $this->getPluginHeader();
88 | if ( isset($headers[$headerName]) && ($headers[$headerName] !== '') ) {
89 | return $headers[$headerName];
90 | }
91 | return $defaultValue;
92 | }
93 |
94 | protected function getHeaderNames() {
95 | return array(
96 | 'Name' => 'Plugin Name',
97 | 'PluginURI' => 'Plugin URI',
98 | 'Version' => 'Version',
99 | 'Description' => 'Description',
100 | 'Author' => 'Author',
101 | 'AuthorURI' => 'Author URI',
102 | 'TextDomain' => 'Text Domain',
103 | 'DomainPath' => 'Domain Path',
104 | 'Network' => 'Network',
105 |
106 | //The newest WordPress version that this plugin requires or has been tested with.
107 | //We support several different formats for compatibility with other libraries.
108 | 'Tested WP' => 'Tested WP',
109 | 'Requires WP' => 'Requires WP',
110 | 'Tested up to' => 'Tested up to',
111 | 'Requires at least' => 'Requires at least',
112 | );
113 | }
114 |
115 | /**
116 | * Get the translated plugin title.
117 | *
118 | * @return string
119 | */
120 | public function getPluginTitle() {
121 | $title = '';
122 | $header = $this->getPluginHeader();
123 | if ( $header && !empty($header['Name']) && isset($header['TextDomain']) ) {
124 | $title = translate($header['Name'], $header['TextDomain']);
125 | }
126 | return $title;
127 | }
128 |
129 | /**
130 | * Get plugin's metadata from its file header.
131 | *
132 | * @return array
133 | */
134 | public function getPluginHeader() {
135 | if ( !is_file($this->pluginAbsolutePath) ) {
136 | //This can happen if the plugin filename is wrong.
137 | $this->updateChecker->triggerError(
138 | sprintf(
139 | "Can't to read the plugin header for '%s'. The file does not exist.",
140 | $this->updateChecker->pluginFile
141 | ),
142 | E_USER_WARNING
143 | );
144 | return array();
145 | }
146 |
147 | if ( !function_exists('get_plugin_data') ) {
148 | require_once(ABSPATH . '/wp-admin/includes/plugin.php');
149 | }
150 | return get_plugin_data($this->pluginAbsolutePath, false, false);
151 | }
152 |
153 | public function removeHooks() {
154 | remove_filter('upgrader_post_install', array($this, 'clearCachedVersion'));
155 | remove_action('delete_site_transient_update_plugins', array($this, 'clearCachedVersion'));
156 | }
157 |
158 | /**
159 | * Check if the plugin file is inside the mu-plugins directory.
160 | *
161 | * @return bool
162 | */
163 | public function isMuPlugin() {
164 | static $cachedResult = null;
165 |
166 | if ( $cachedResult === null ) {
167 | if ( !defined('WPMU_PLUGIN_DIR') || !is_string(WPMU_PLUGIN_DIR) ) {
168 | $cachedResult = false;
169 | return $cachedResult;
170 | }
171 |
172 | //Convert both paths to the canonical form before comparison.
173 | $muPluginDir = realpath(WPMU_PLUGIN_DIR);
174 | $pluginPath = realpath($this->pluginAbsolutePath);
175 | //If realpath() fails, just normalize the syntax instead.
176 | if (($muPluginDir === false) || ($pluginPath === false)) {
177 | $muPluginDir = PucFactory::normalizePath(WPMU_PLUGIN_DIR);
178 | $pluginPath = PucFactory::normalizePath($this->pluginAbsolutePath);
179 | }
180 |
181 | $cachedResult = (strpos($pluginPath, $muPluginDir) === 0);
182 | }
183 |
184 | return $cachedResult;
185 | }
186 | }
187 |
188 | endif;
189 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/Puc/v5p4/Plugin/PluginInfo.php:
--------------------------------------------------------------------------------
1 | sections = (array)$instance->sections;
63 | $instance->icons = (array)$instance->icons;
64 |
65 | return $instance;
66 | }
67 |
68 | /**
69 | * Very, very basic validation.
70 | *
71 | * @param \StdClass $apiResponse
72 | * @return bool|\WP_Error
73 | */
74 | protected function validateMetadata($apiResponse) {
75 | if (
76 | !isset($apiResponse->name, $apiResponse->version)
77 | || empty($apiResponse->name)
78 | || empty($apiResponse->version)
79 | ) {
80 | return new \WP_Error(
81 | 'puc-invalid-metadata',
82 | "The plugin metadata file does not contain the required 'name' and/or 'version' keys."
83 | );
84 | }
85 | return true;
86 | }
87 |
88 |
89 | /**
90 | * Transform plugin info into the format used by the native WordPress.org API
91 | *
92 | * @return object
93 | */
94 | public function toWpFormat(){
95 | $info = new \stdClass;
96 |
97 | //The custom update API is built so that many fields have the same name and format
98 | //as those returned by the native WordPress.org API. These can be assigned directly.
99 | $sameFormat = array(
100 | 'name', 'slug', 'version', 'requires', 'tested', 'rating', 'upgrade_notice',
101 | 'num_ratings', 'downloaded', 'active_installs', 'homepage', 'last_updated',
102 | 'requires_php',
103 | );
104 | foreach($sameFormat as $field){
105 | if ( isset($this->$field) ) {
106 | $info->$field = $this->$field;
107 | } else {
108 | $info->$field = null;
109 | }
110 | }
111 |
112 | //Other fields need to be renamed and/or transformed.
113 | $info->download_link = $this->download_url;
114 | $info->author = $this->getFormattedAuthor();
115 | $info->sections = array_merge(array('description' => ''), $this->sections);
116 |
117 | if ( !empty($this->banners) ) {
118 | //WP expects an array with two keys: "high" and "low". Both are optional.
119 | //Docs: https://wordpress.org/plugins/about/faq/#banners
120 | $info->banners = is_object($this->banners) ? get_object_vars($this->banners) : $this->banners;
121 | $info->banners = array_intersect_key($info->banners, array('high' => true, 'low' => true));
122 | }
123 |
124 | return $info;
125 | }
126 |
127 | protected function getFormattedAuthor() {
128 | if ( !empty($this->author_homepage) ){
129 | /** @noinspection HtmlUnknownTarget */
130 | return sprintf('%s', $this->author_homepage, $this->author);
131 | }
132 | return $this->author;
133 | }
134 | }
135 |
136 | endif;
137 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/Puc/v5p4/Plugin/Update.php:
--------------------------------------------------------------------------------
1 | copyFields($object, $update);
66 | return $update;
67 | }
68 |
69 | /**
70 | * @return string[]
71 | */
72 | protected function getFieldNames() {
73 | return array_merge(parent::getFieldNames(), self::$extraFields);
74 | }
75 |
76 | /**
77 | * Transform the update into the format used by WordPress native plugin API.
78 | *
79 | * @return object
80 | */
81 | public function toWpFormat() {
82 | $update = parent::toWpFormat();
83 |
84 | $update->id = $this->id;
85 | $update->url = $this->homepage;
86 | $update->tested = $this->tested;
87 | $update->requires_php = $this->requires_php;
88 | $update->plugin = $this->filename;
89 |
90 | if ( !empty($this->upgrade_notice) ) {
91 | $update->upgrade_notice = $this->upgrade_notice;
92 | }
93 |
94 | if ( !empty($this->icons) && is_array($this->icons) ) {
95 | //This should be an array with up to 4 keys: 'svg', '1x', '2x' and 'default'.
96 | //Docs: https://developer.wordpress.org/plugins/wordpress-org/plugin-assets/#plugin-icons
97 | $icons = array_intersect_key(
98 | $this->icons,
99 | array('svg' => true, '1x' => true, '2x' => true, 'default' => true)
100 | );
101 | if ( !empty($icons) ) {
102 | $update->icons = $icons;
103 |
104 | //It appears that the 'default' icon isn't used anywhere in WordPress 4.9,
105 | //but lets set it just in case a future release needs it.
106 | if ( !isset($update->icons['default']) ) {
107 | $update->icons['default'] = current($update->icons);
108 | }
109 | }
110 | }
111 |
112 | return $update;
113 | }
114 | }
115 |
116 | endif;
117 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/Puc/v5p4/StateStore.php:
--------------------------------------------------------------------------------
1 | optionName = $optionName;
34 | }
35 |
36 | /**
37 | * Get time elapsed since the last update check.
38 | *
39 | * If there are no recorded update checks, this method returns a large arbitrary number
40 | * (i.e. time since the Unix epoch).
41 | *
42 | * @return int Elapsed time in seconds.
43 | */
44 | public function timeSinceLastCheck() {
45 | $this->lazyLoad();
46 | return time() - $this->lastCheck;
47 | }
48 |
49 | /**
50 | * @return int
51 | */
52 | public function getLastCheck() {
53 | $this->lazyLoad();
54 | return $this->lastCheck;
55 | }
56 |
57 | /**
58 | * Set the time of the last update check to the current timestamp.
59 | *
60 | * @return $this
61 | */
62 | public function setLastCheckToNow() {
63 | $this->lazyLoad();
64 | $this->lastCheck = time();
65 | return $this;
66 | }
67 |
68 | /**
69 | * @return null|Update
70 | */
71 | public function getUpdate() {
72 | $this->lazyLoad();
73 | return $this->update;
74 | }
75 |
76 | /**
77 | * @param Update|null $update
78 | * @return $this
79 | */
80 | public function setUpdate(Update $update = null) {
81 | $this->lazyLoad();
82 | $this->update = $update;
83 | return $this;
84 | }
85 |
86 | /**
87 | * @return string
88 | */
89 | public function getCheckedVersion() {
90 | $this->lazyLoad();
91 | return $this->checkedVersion;
92 | }
93 |
94 | /**
95 | * @param string $version
96 | * @return $this
97 | */
98 | public function setCheckedVersion($version) {
99 | $this->lazyLoad();
100 | $this->checkedVersion = strval($version);
101 | return $this;
102 | }
103 |
104 | /**
105 | * Get translation updates.
106 | *
107 | * @return array
108 | */
109 | public function getTranslations() {
110 | $this->lazyLoad();
111 | if ( isset($this->update, $this->update->translations) ) {
112 | return $this->update->translations;
113 | }
114 | return array();
115 | }
116 |
117 | /**
118 | * Set translation updates.
119 | *
120 | * @param array $translationUpdates
121 | */
122 | public function setTranslations($translationUpdates) {
123 | $this->lazyLoad();
124 | if ( isset($this->update) ) {
125 | $this->update->translations = $translationUpdates;
126 | $this->save();
127 | }
128 | }
129 |
130 | public function save() {
131 | $state = new \stdClass();
132 |
133 | $state->lastCheck = $this->lastCheck;
134 | $state->checkedVersion = $this->checkedVersion;
135 |
136 | if ( isset($this->update)) {
137 | $state->update = $this->update->toStdClass();
138 |
139 | $updateClass = get_class($this->update);
140 | $state->updateClass = $updateClass;
141 | $prefix = $this->getLibPrefix();
142 | if ( Utils::startsWith($updateClass, $prefix) ) {
143 | $state->updateBaseClass = substr($updateClass, strlen($prefix));
144 | }
145 | }
146 |
147 | update_site_option($this->optionName, $state);
148 | $this->isLoaded = true;
149 | }
150 |
151 | /**
152 | * @return $this
153 | */
154 | public function lazyLoad() {
155 | if ( !$this->isLoaded ) {
156 | $this->load();
157 | }
158 | return $this;
159 | }
160 |
161 | protected function load() {
162 | $this->isLoaded = true;
163 |
164 | $state = get_site_option($this->optionName, null);
165 |
166 | if (
167 | !is_object($state)
168 | //Sanity check: If the Utils class is missing, the plugin is probably in the process
169 | //of being deleted (e.g. the old version gets deleted during an update).
170 | || !class_exists(Utils::class)
171 | ) {
172 | $this->lastCheck = 0;
173 | $this->checkedVersion = '';
174 | $this->update = null;
175 | return;
176 | }
177 |
178 | $this->lastCheck = intval(Utils::get($state, 'lastCheck', 0));
179 | $this->checkedVersion = Utils::get($state, 'checkedVersion', '');
180 | $this->update = null;
181 |
182 | if ( isset($state->update) ) {
183 | //This mess is due to the fact that the want the update class from this version
184 | //of the library, not the version that saved the update.
185 |
186 | $updateClass = null;
187 | if ( isset($state->updateBaseClass) ) {
188 | $updateClass = $this->getLibPrefix() . $state->updateBaseClass;
189 | } else if ( isset($state->updateClass) ) {
190 | $updateClass = $state->updateClass;
191 | }
192 |
193 | $factory = array($updateClass, 'fromObject');
194 | if ( ($updateClass !== null) && is_callable($factory) ) {
195 | $this->update = call_user_func($factory, $state->update);
196 | }
197 | }
198 | }
199 |
200 | public function delete() {
201 | delete_site_option($this->optionName);
202 |
203 | $this->lastCheck = 0;
204 | $this->checkedVersion = '';
205 | $this->update = null;
206 | }
207 |
208 | private function getLibPrefix() {
209 | //This assumes that the current class is at the top of the versioned namespace.
210 | return __NAMESPACE__ . '\\';
211 | }
212 | }
213 |
214 | endif;
215 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/Puc/v5p4/Theme/Package.php:
--------------------------------------------------------------------------------
1 | stylesheet = $stylesheet;
21 | $this->theme = wp_get_theme($this->stylesheet);
22 |
23 | parent::__construct($updateChecker);
24 | }
25 |
26 | public function getInstalledVersion() {
27 | return $this->theme->get('Version');
28 | }
29 |
30 | public function getAbsoluteDirectoryPath() {
31 | if ( method_exists($this->theme, 'get_stylesheet_directory') ) {
32 | return $this->theme->get_stylesheet_directory(); //Available since WP 3.4.
33 | }
34 | return get_theme_root($this->stylesheet) . '/' . $this->stylesheet;
35 | }
36 |
37 | /**
38 | * Get the value of a specific plugin or theme header.
39 | *
40 | * @param string $headerName
41 | * @param string $defaultValue
42 | * @return string Either the value of the header, or $defaultValue if the header doesn't exist or is empty.
43 | */
44 | public function getHeaderValue($headerName, $defaultValue = '') {
45 | $value = $this->theme->get($headerName);
46 | if ( ($headerName === false) || ($headerName === '') ) {
47 | return $defaultValue;
48 | }
49 | return $value;
50 | }
51 |
52 | protected function getHeaderNames() {
53 | return array(
54 | 'Name' => 'Theme Name',
55 | 'ThemeURI' => 'Theme URI',
56 | 'Description' => 'Description',
57 | 'Author' => 'Author',
58 | 'AuthorURI' => 'Author URI',
59 | 'Version' => 'Version',
60 | 'Template' => 'Template',
61 | 'Status' => 'Status',
62 | 'Tags' => 'Tags',
63 | 'TextDomain' => 'Text Domain',
64 | 'DomainPath' => 'Domain Path',
65 | );
66 | }
67 | }
68 |
69 | endif;
70 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/Puc/v5p4/Theme/Update.php:
--------------------------------------------------------------------------------
1 | $this->slug,
23 | 'new_version' => $this->version,
24 | 'url' => $this->details_url,
25 | );
26 |
27 | if ( !empty($this->download_url) ) {
28 | $update['package'] = $this->download_url;
29 | }
30 |
31 | return $update;
32 | }
33 |
34 | /**
35 | * Create a new instance of Theme_Update from its JSON-encoded representation.
36 | *
37 | * @param string $json Valid JSON string representing a theme information object.
38 | * @return self New instance of ThemeUpdate, or NULL on error.
39 | */
40 | public static function fromJson($json) {
41 | $instance = new self();
42 | if ( !parent::createFromJson($json, $instance) ) {
43 | return null;
44 | }
45 | return $instance;
46 | }
47 |
48 | /**
49 | * Create a new instance by copying the necessary fields from another object.
50 | *
51 | * @param \StdClass|self $object The source object.
52 | * @return self The new copy.
53 | */
54 | public static function fromObject($object) {
55 | $update = new self();
56 | $update->copyFields($object, $update);
57 | return $update;
58 | }
59 |
60 | /**
61 | * Basic validation.
62 | *
63 | * @param \StdClass $apiResponse
64 | * @return bool|\WP_Error
65 | */
66 | protected function validateMetadata($apiResponse) {
67 | $required = array('version', 'details_url');
68 | foreach($required as $key) {
69 | if ( !isset($apiResponse->$key) || empty($apiResponse->$key) ) {
70 | return new \WP_Error(
71 | 'tuc-invalid-metadata',
72 | sprintf('The theme metadata is missing the required "%s" key.', $key)
73 | );
74 | }
75 | }
76 | return true;
77 | }
78 |
79 | protected function getFieldNames() {
80 | return array_merge(parent::getFieldNames(), self::$extraFields);
81 | }
82 |
83 | protected function getPrefixedFilter($tag) {
84 | return parent::getPrefixedFilter($tag) . '_theme';
85 | }
86 | }
87 |
88 | endif;
89 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/Puc/v5p4/Theme/UpdateChecker.php:
--------------------------------------------------------------------------------
1 | stylesheet = $stylesheet;
27 |
28 | parent::__construct(
29 | $metadataUrl,
30 | $stylesheet,
31 | $customSlug ? $customSlug : $stylesheet,
32 | $checkPeriod,
33 | $optionName
34 | );
35 | }
36 |
37 | /**
38 | * For themes, the update array is indexed by theme directory name.
39 | *
40 | * @return string
41 | */
42 | protected function getUpdateListKey() {
43 | return $this->directoryName;
44 | }
45 |
46 | /**
47 | * Retrieve the latest update (if any) from the configured API endpoint.
48 | *
49 | * @return Update|null An instance of Update, or NULL when no updates are available.
50 | */
51 | public function requestUpdate() {
52 | list($themeUpdate, $result) = $this->requestMetadata(Update::class, 'request_update');
53 |
54 | if ( $themeUpdate !== null ) {
55 | /** @var Update $themeUpdate */
56 | $themeUpdate->slug = $this->slug;
57 | }
58 |
59 | $themeUpdate = $this->filterUpdateResult($themeUpdate, $result);
60 | return $themeUpdate;
61 | }
62 |
63 | protected function getNoUpdateItemFields() {
64 | return array_merge(
65 | parent::getNoUpdateItemFields(),
66 | array(
67 | 'theme' => $this->directoryName,
68 | 'requires' => '',
69 | )
70 | );
71 | }
72 |
73 | public function userCanInstallUpdates() {
74 | return current_user_can('update_themes');
75 | }
76 |
77 | /**
78 | * Create an instance of the scheduler.
79 | *
80 | * @param int $checkPeriod
81 | * @return Scheduler
82 | */
83 | protected function createScheduler($checkPeriod) {
84 | return new Scheduler($this, $checkPeriod, array('load-themes.php'));
85 | }
86 |
87 | /**
88 | * Is there an update being installed right now for this theme?
89 | *
90 | * @param \WP_Upgrader|null $upgrader The upgrader that's performing the current update.
91 | * @return bool
92 | */
93 | public function isBeingUpgraded($upgrader = null) {
94 | return $this->upgraderStatus->isThemeBeingUpgraded($this->stylesheet, $upgrader);
95 | }
96 |
97 | protected function createDebugBarExtension() {
98 | return new DebugBar\Extension($this, DebugBar\ThemePanel::class);
99 | }
100 |
101 | /**
102 | * Register a callback for filtering query arguments.
103 | *
104 | * The callback function should take one argument - an associative array of query arguments.
105 | * It should return a modified array of query arguments.
106 | *
107 | * @param callable $callback
108 | * @return void
109 | */
110 | public function addQueryArgFilter($callback){
111 | $this->addFilter('request_update_query_args', $callback);
112 | }
113 |
114 | /**
115 | * Register a callback for filtering arguments passed to wp_remote_get().
116 | *
117 | * The callback function should take one argument - an associative array of arguments -
118 | * and return a modified array or arguments. See the WP documentation on wp_remote_get()
119 | * for details on what arguments are available and how they work.
120 | *
121 | * @uses add_filter() This method is a convenience wrapper for add_filter().
122 | *
123 | * @param callable $callback
124 | * @return void
125 | */
126 | public function addHttpRequestArgFilter($callback) {
127 | $this->addFilter('request_update_options', $callback);
128 | }
129 |
130 | /**
131 | * Register a callback for filtering theme updates retrieved from the external API.
132 | *
133 | * The callback function should take two arguments. If the theme update was retrieved
134 | * successfully, the first argument passed will be an instance of Theme_Update. Otherwise,
135 | * it will be NULL. The second argument will be the corresponding return value of
136 | * wp_remote_get (see WP docs for details).
137 | *
138 | * The callback function should return a new or modified instance of Theme_Update or NULL.
139 | *
140 | * @uses add_filter() This method is a convenience wrapper for add_filter().
141 | *
142 | * @param callable $callback
143 | * @return void
144 | */
145 | public function addResultFilter($callback) {
146 | $this->addFilter('request_update_result', $callback, 10, 2);
147 | }
148 |
149 | /**
150 | * Create a package instance that represents this plugin or theme.
151 | *
152 | * @return InstalledPackage
153 | */
154 | protected function createInstalledPackage() {
155 | return new Package($this->stylesheet, $this);
156 | }
157 | }
158 |
159 | endif;
160 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/Puc/v5p4/Update.php:
--------------------------------------------------------------------------------
1 | slug = $this->slug;
31 | $update->new_version = $this->version;
32 | $update->package = $this->download_url;
33 |
34 | return $update;
35 | }
36 | }
37 |
38 | endif;
39 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/Puc/v5p4/Utils.php:
--------------------------------------------------------------------------------
1 | $node) ) {
27 | $currentValue = $currentValue->$node;
28 | } else {
29 | return $default;
30 | }
31 | }
32 |
33 | return $currentValue;
34 | }
35 |
36 | /**
37 | * Get the first array element that is not empty.
38 | *
39 | * @param array $values
40 | * @param mixed|null $default Returns this value if there are no non-empty elements.
41 | * @return mixed|null
42 | */
43 | public static function findNotEmpty($values, $default = null) {
44 | if ( empty($values) ) {
45 | return $default;
46 | }
47 |
48 | foreach ($values as $value) {
49 | if ( !empty($value) ) {
50 | return $value;
51 | }
52 | }
53 |
54 | return $default;
55 | }
56 |
57 | /**
58 | * Check if the input string starts with the specified prefix.
59 | *
60 | * @param string $input
61 | * @param string $prefix
62 | * @return bool
63 | */
64 | public static function startsWith($input, $prefix) {
65 | $length = strlen($prefix);
66 | return (substr($input, 0, $length) === $prefix);
67 | }
68 | }
69 |
70 | endif;
71 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/Puc/v5p4/Vcs/BaseChecker.php:
--------------------------------------------------------------------------------
1 | properties = $properties;
23 | }
24 |
25 | /**
26 | * @param string $name
27 | * @return mixed|null
28 | */
29 | public function __get($name) {
30 | return array_key_exists($name, $this->properties) ? $this->properties[$name] : null;
31 | }
32 |
33 | /**
34 | * @param string $name
35 | * @param mixed $value
36 | */
37 | public function __set($name, $value) {
38 | $this->properties[$name] = $value;
39 | }
40 |
41 | /**
42 | * @param string $name
43 | * @return bool
44 | */
45 | public function __isset($name) {
46 | return isset($this->properties[$name]);
47 | }
48 |
49 | }
50 |
51 | endif;
52 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/Puc/v5p4/Vcs/ReleaseAssetSupport.php:
--------------------------------------------------------------------------------
1 | releaseAssetsEnabled = true;
40 | $this->assetFilterRegex = $nameRegex;
41 | $this->releaseAssetPreference = $preference;
42 | }
43 |
44 | /**
45 | * Disable release assets.
46 | *
47 | * @return void
48 | * @noinspection PhpUnused -- Public API
49 | */
50 | public function disableReleaseAssets() {
51 | $this->releaseAssetsEnabled = false;
52 | $this->assetFilterRegex = null;
53 | }
54 |
55 | /**
56 | * Does the specified asset match the name regex?
57 | *
58 | * @param mixed $releaseAsset Data type and structure depend on the host/API.
59 | * @return bool
60 | */
61 | protected function matchesAssetFilter($releaseAsset) {
62 | if ( $this->assetFilterRegex === null ) {
63 | //The default is to accept all assets.
64 | return true;
65 | }
66 |
67 | $name = $this->getFilterableAssetName($releaseAsset);
68 | if ( !is_string($name) ) {
69 | return false;
70 | }
71 | return (bool)preg_match($this->assetFilterRegex, $releaseAsset->name);
72 | }
73 |
74 | /**
75 | * Get the part of asset data that will be checked against the filter regex.
76 | *
77 | * @param mixed $releaseAsset
78 | * @return string|null
79 | */
80 | abstract protected function getFilterableAssetName($releaseAsset);
81 | }
82 |
83 | endif;
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/Puc/v5p4/Vcs/ReleaseFilteringFeature.php:
--------------------------------------------------------------------------------
1 | 100 ) {
39 | throw new \InvalidArgumentException(sprintf(
40 | 'The max number of releases is too high (%d). It must be 100 or less.',
41 | $maxReleases
42 | ));
43 | } else if ( $maxReleases < 1 ) {
44 | throw new \InvalidArgumentException(sprintf(
45 | 'The max number of releases is too low (%d). It must be at least 1.',
46 | $maxReleases
47 | ));
48 | }
49 |
50 | $this->releaseFilterCallback = $callback;
51 | $this->releaseFilterByType = $releaseTypes;
52 | $this->releaseFilterMaxReleases = $maxReleases;
53 | return $this;
54 | }
55 |
56 | /**
57 | * Filter releases by their version number.
58 | *
59 | * @param string $regex A regular expression. The release version number must match this regex.
60 | * @param int $releaseTypes
61 | * @param int $maxReleasesToExamine
62 | * @return $this
63 | * @noinspection PhpUnused -- Public API
64 | */
65 | public function setReleaseVersionFilter(
66 | $regex,
67 | $releaseTypes = Api::RELEASE_FILTER_SKIP_PRERELEASE,
68 | $maxReleasesToExamine = 20
69 | ) {
70 | return $this->setReleaseFilter(
71 | function ($versionNumber) use ($regex) {
72 | return (preg_match($regex, $versionNumber) === 1);
73 | },
74 | $releaseTypes,
75 | $maxReleasesToExamine
76 | );
77 | }
78 |
79 | /**
80 | * @param string $versionNumber The detected release version number.
81 | * @param object $releaseObject Varies depending on the host/API.
82 | * @return bool
83 | */
84 | protected function matchesCustomReleaseFilter($versionNumber, $releaseObject) {
85 | if ( !is_callable($this->releaseFilterCallback) ) {
86 | return true; //No custom filter.
87 | }
88 | return call_user_func($this->releaseFilterCallback, $versionNumber, $releaseObject);
89 | }
90 |
91 | /**
92 | * @return bool
93 | */
94 | protected function shouldSkipPreReleases() {
95 | //Maybe this could be a bitfield in the future, if we need to support
96 | //more release types.
97 | return ($this->releaseFilterByType !== Api::RELEASE_FILTER_ALL);
98 | }
99 |
100 | /**
101 | * @return bool
102 | */
103 | protected function hasCustomReleaseFilter() {
104 | return isset($this->releaseFilterCallback) && is_callable($this->releaseFilterCallback);
105 | }
106 | }
107 |
108 | endif;
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/Puc/v5p4/Vcs/ThemeUpdateChecker.php:
--------------------------------------------------------------------------------
1 | api = $api;
24 |
25 | parent::__construct($api->getRepositoryUrl(), $stylesheet, $customSlug, $checkPeriod, $optionName);
26 |
27 | $this->api->setHttpFilterName($this->getUniqueName('request_update_options'));
28 | $this->api->setStrategyFilterName($this->getUniqueName('vcs_update_detection_strategies'));
29 | $this->api->setSlug($this->slug);
30 | }
31 |
32 | public function requestUpdate() {
33 | $api = $this->api;
34 | $api->setLocalDirectory($this->package->getAbsoluteDirectoryPath());
35 |
36 | $update = new Theme\Update();
37 | $update->slug = $this->slug;
38 |
39 | //Figure out which reference (tag or branch) we'll use to get the latest version of the theme.
40 | $updateSource = $api->chooseReference($this->branch);
41 | if ( $updateSource ) {
42 | $ref = $updateSource->name;
43 | $update->download_url = $updateSource->downloadUrl;
44 | } else {
45 | do_action(
46 | 'puc_api_error',
47 | new \WP_Error(
48 | 'puc-no-update-source',
49 | 'Could not retrieve version information from the repository. '
50 | . 'This usually means that the update checker either can\'t connect '
51 | . 'to the repository or it\'s configured incorrectly.'
52 | ),
53 | null, null, $this->slug
54 | );
55 | $ref = $this->branch;
56 | }
57 |
58 | //Get headers from the main stylesheet in this branch/tag. Its "Version" header and other metadata
59 | //are what the WordPress install will actually see after upgrading, so they take precedence over releases/tags.
60 | $remoteHeader = $this->package->getFileHeader($api->getRemoteFile('style.css', $ref));
61 | $update->version = Utils::findNotEmpty(array(
62 | $remoteHeader['Version'],
63 | Utils::get($updateSource, 'version'),
64 | ));
65 |
66 | //The details URL defaults to the Theme URI header or the repository URL.
67 | $update->details_url = Utils::findNotEmpty(array(
68 | $remoteHeader['ThemeURI'],
69 | $this->package->getHeaderValue('ThemeURI'),
70 | $this->metadataUrl,
71 | ));
72 |
73 | if ( empty($update->version) ) {
74 | //It looks like we didn't find a valid update after all.
75 | $update = null;
76 | }
77 |
78 | $update = $this->filterUpdateResult($update);
79 | return $update;
80 | }
81 | }
82 |
83 | endif;
84 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/Puc/v5p4/Vcs/VcsCheckerMethods.php:
--------------------------------------------------------------------------------
1 | branch = $branch;
20 | return $this;
21 | }
22 |
23 | /**
24 | * Set authentication credentials.
25 | *
26 | * @param array|string $credentials
27 | * @return $this
28 | */
29 | public function setAuthentication($credentials) {
30 | $this->api->setAuthentication($credentials);
31 | return $this;
32 | }
33 |
34 | /**
35 | * @return Api
36 | */
37 | public function getVcsApi() {
38 | return $this->api;
39 | }
40 |
41 | public function getUpdate() {
42 | $update = parent::getUpdate();
43 |
44 | if ( isset($update) && !empty($update->download_url) ) {
45 | $update->download_url = $this->api->signDownloadUrl($update->download_url);
46 | }
47 |
48 | return $update;
49 | }
50 |
51 | public function onDisplayConfiguration($panel) {
52 | parent::onDisplayConfiguration($panel);
53 | $panel->row('Branch', $this->branch);
54 | $panel->row('Authentication enabled', $this->api->isAuthenticationEnabled() ? 'Yes' : 'No');
55 | $panel->row('API client', get_class($this->api));
56 | }
57 | }
58 |
59 | endif;
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/Puc/v5p4/WpCliCheckTrigger.php:
--------------------------------------------------------------------------------
1 | componentType = $componentType;
42 | $this->scheduler = $scheduler;
43 |
44 | if ( !defined('WP_CLI') || !class_exists(WP_CLI::class, false) ) {
45 | return; //Nothing to do if WP-CLI is not available.
46 | }
47 |
48 | /*
49 | * We can't hook directly into wp_update_plugins(), but we can hook into the WP-CLI
50 | * commands that call it. We'll use the "before_invoke:xyz" hook to trigger update checks.
51 | */
52 | foreach ($this->getRelevantCommands() as $command) {
53 | WP_CLI::add_hook('before_invoke:' . $command, [$this, 'triggerUpdateCheckOnce']);
54 | }
55 | }
56 |
57 | private function getRelevantCommands() {
58 | $result = [];
59 | foreach (['status', 'list', 'update'] as $subcommand) {
60 | $result[] = $this->componentType . ' ' . $subcommand;
61 | }
62 | return $result;
63 | }
64 |
65 | /**
66 | * Trigger a potential update check once.
67 | *
68 | * @param mixed $input
69 | * @return mixed The input value, unchanged.
70 | * @internal This method is public so that it can be used as a WP-CLI hook callback.
71 | * It should not be called directly.
72 | *
73 | */
74 | public function triggerUpdateCheckOnce($input = null) {
75 | if ( $this->wasCheckTriggered ) {
76 | return $input;
77 | }
78 |
79 | $this->wasCheckTriggered = true;
80 | $this->scheduler->maybeCheckForUpdates();
81 |
82 | return $input;
83 | }
84 | }
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "yahnis-elsts/plugin-update-checker",
3 | "type": "library",
4 | "description": "A custom update checker for WordPress plugins and themes. Useful if you can't host your plugin in the official WP repository but still want it to support automatic updates.",
5 | "keywords": ["wordpress", "plugin updates", "automatic updates", "theme updates"],
6 | "homepage": "https://github.com/YahnisElsts/plugin-update-checker/",
7 | "license": "MIT",
8 | "authors": [
9 | {
10 | "name": "Yahnis Elsts",
11 | "email": "whiteshadow@w-shadow.com",
12 | "homepage": "https://w-shadow.com/",
13 | "role": "Developer"
14 | }
15 | ],
16 | "require": {
17 | "php": ">=5.6.20",
18 | "ext-json": "*"
19 | },
20 | "autoload": {
21 | "files": ["load-v5p4.php"]
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/css/puc-debug-bar.css:
--------------------------------------------------------------------------------
1 | .puc-debug-bar-panel-v5 pre {
2 | margin-top: 0;
3 | }
4 |
5 | /* Style the debug data table to match "widefat" table style used by WordPress. */
6 | table.puc-debug-data {
7 | width: 100%;
8 | clear: both;
9 | margin: 0;
10 |
11 | border-spacing: 0;
12 | background-color: #f9f9f9;
13 |
14 | border-radius: 3px;
15 | border: 1px solid #dfdfdf;
16 | border-collapse: separate;
17 | }
18 |
19 | table.puc-debug-data * {
20 | word-wrap: break-word;
21 | }
22 |
23 | table.puc-debug-data th {
24 | width: 11em;
25 | padding: 7px 7px 8px;
26 | text-align: left;
27 |
28 | font-family: "Georgia", "Times New Roman", "Bitstream Charter", "Times", serif;
29 | font-weight: 400;
30 | font-size: 14px;
31 | line-height: 1.3em;
32 | text-shadow: rgba(255, 255, 255, 0.804) 0 1px 0;
33 | }
34 |
35 | table.puc-debug-data td, table.puc-debug-data th {
36 | border-width: 1px 0;
37 | border-style: solid;
38 |
39 | border-top-color: #fff;
40 | border-bottom-color: #dfdfdf;
41 |
42 | text-transform: none;
43 | }
44 |
45 | table.puc-debug-data td {
46 | color: #555;
47 | font-size: 12px;
48 | padding: 4px 7px 2px;
49 | vertical-align: top;
50 | }
51 |
52 | .puc-ajax-response {
53 | border: 1px solid #dfdfdf;
54 | border-radius: 3px;
55 | padding: 0.5em;
56 | margin: 5px 0;
57 | background-color: white;
58 | }
59 |
60 | .puc-ajax-nonce {
61 | display: none;
62 | }
63 |
64 | .puc-ajax-response dt {
65 | margin: 0;
66 | }
67 |
68 | .puc-ajax-response dd {
69 | margin: 0 0 1em;
70 | }
71 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/js/debug-bar.js:
--------------------------------------------------------------------------------
1 | jQuery(function($) {
2 |
3 | function runAjaxAction(button, action) {
4 | button = $(button);
5 | var panel = button.closest('.puc-debug-bar-panel-v5');
6 | var responseBox = button.closest('td').find('.puc-ajax-response');
7 |
8 | responseBox.text('Processing...').show();
9 | $.post(
10 | ajaxurl,
11 | {
12 | action : action,
13 | uid : panel.data('uid'),
14 | _wpnonce: panel.data('nonce')
15 | },
16 | function(data) {
17 | //The response contains HTML that should already be escaped in server-side code.
18 | //phpcs:ignore WordPressVIPMinimum.JS.HTMLExecutingFunctions.html
19 | responseBox.html(data);
20 | },
21 | 'html'
22 | );
23 | }
24 |
25 | $('.puc-debug-bar-panel-v5 input[name="puc-check-now-button"]').on('click', function() {
26 | runAjaxAction(this, 'puc_v5_debug_check_now');
27 | return false;
28 | });
29 |
30 | $('.puc-debug-bar-panel-v5 input[name="puc-request-info-button"]').on('click', function() {
31 | runAjaxAction(this, 'puc_v5_debug_request_info');
32 | return false;
33 | });
34 |
35 |
36 | // Debug Bar uses the panel class name as part of its link and container IDs. This means we can
37 | // end up with multiple identical IDs if more than one plugin uses the update checker library.
38 | // Fix it by replacing the class name with the plugin slug.
39 | var panels = $('#debug-menu-targets').find('.puc-debug-bar-panel-v5');
40 | panels.each(function() {
41 | var panel = $(this);
42 | var uid = panel.data('uid');
43 | var target = panel.closest('.debug-menu-target');
44 |
45 | //Change the panel wrapper ID.
46 | target.attr('id', 'debug-menu-target-puc-' + uid);
47 |
48 | //Change the menu link ID as well and point it at the new target ID.
49 | $('#debug-bar-menu').find('.puc-debug-menu-link-' + uid)
50 | .closest('.debug-menu-link')
51 | .attr('id', 'debug-menu-link-puc-' + uid)
52 | .attr('href', '#' + target.attr('id'));
53 | });
54 | });
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-ca.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-ca.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-ca.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2017-11-24 17:02+0200\n"
5 | "PO-Revision-Date: 2019-09-25 18:15+0200\n"
6 | "Language-Team: \n"
7 | "MIME-Version: 1.0\n"
8 | "Content-Type: text/plain; charset=UTF-8\n"
9 | "Content-Transfer-Encoding: 8bit\n"
10 | "X-Generator: Poedit 2.2.3\n"
11 | "X-Poedit-Basepath: ..\n"
12 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
13 | "X-Poedit-SourceCharset: UTF-8\n"
14 | "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
15 | "Last-Translator: \n"
16 | "Language: ca\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: Puc/v4p3/Plugin/UpdateChecker.php:395
20 | msgid "Check for updates"
21 | msgstr "Comprova si hi ha actualitzacions"
22 |
23 | #: Puc/v4p3/Plugin/UpdateChecker.php:548
24 | #, php-format
25 | msgctxt "the plugin title"
26 | msgid "The %s plugin is up to date."
27 | msgstr "L’extensió %s està actualitzada."
28 |
29 | #: Puc/v4p3/Plugin/UpdateChecker.php:550
30 | #, php-format
31 | msgctxt "the plugin title"
32 | msgid "A new version of the %s plugin is available."
33 | msgstr "Una nova versió de l’extensió %s està disponible."
34 |
35 | #: Puc/v4p3/Plugin/UpdateChecker.php:552
36 | #, php-format
37 | msgctxt "the plugin title"
38 | msgid "Could not determine if updates are available for %s."
39 | msgstr "No s’ha pogut determinar si hi ha actualitzacions per a %s."
40 |
41 | #: Puc/v4p3/Plugin/UpdateChecker.php:558
42 | #, php-format
43 | msgid "Unknown update checker status \"%s\""
44 | msgstr "Estat del comprovador d’actualitzacions desconegut \"%s\""
45 |
46 | #: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
47 | msgid "There is no changelog available."
48 | msgstr "No hi ha cap registre de canvis disponible."
49 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-cs_CZ.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-cs_CZ.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-cs_CZ.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "Report-Msgid-Bugs-To: \n"
5 | "POT-Creation-Date: 2017-05-20 10:53+0300\n"
6 | "PO-Revision-Date: 2017-07-05 15:39+0000\n"
7 | "Last-Translator: Vojtěch Sajdl \n"
8 | "Language-Team: Czech (Czech Republic)\n"
9 | "Language: cs-CZ\n"
10 | "Plural-Forms: nplurals=2; plural=(n != 1)\n"
11 | "MIME-Version: 1.0\n"
12 | "Content-Type: text/plain; charset=UTF-8\n"
13 | "Content-Transfer-Encoding: 8bit\n"
14 | "X-Loco-Source-Locale: cs_CZ\n"
15 | "X-Generator: Loco - https://localise.biz/\n"
16 | "X-Poedit-Basepath: ..\n"
17 | "X-Poedit-SourceCharset: UTF-8\n"
18 | "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
19 | "X-Poedit-SearchPath-0: .\n"
20 | "X-Loco-Parser: loco_parse_po"
21 |
22 | #: Puc/v4p1/Plugin/UpdateChecker.php:358
23 | msgid "Check for updates"
24 | msgstr "Zkontrolovat aktualizace"
25 |
26 | #: Puc/v4p1/Plugin/UpdateChecker.php:405
27 | #, php-format
28 | msgctxt "the plugin title"
29 | msgid "The %s plugin is up to date."
30 | msgstr "Plugin %s je aktuální."
31 |
32 | #: Puc/v4p1/Plugin/UpdateChecker.php:407
33 | #, php-format
34 | msgctxt "the plugin title"
35 | msgid "A new version of the %s plugin is available."
36 | msgstr "Nová verze pluginu %s je dostupná."
37 |
38 | #: Puc/v4p1/Plugin/UpdateChecker.php:409
39 | #, php-format
40 | msgid "Unknown update checker status \"%s\""
41 | msgstr "Neznámý status kontroly aktualizací \"%s\""
42 |
43 | #: Puc/v4p1/Vcs/PluginUpdateChecker.php:83
44 | msgid "There is no changelog available."
45 | msgstr "Changelog není dostupný."
46 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-da_DK.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-da_DK.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-da_DK.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2017-05-20 10:53+0300\n"
5 | "PO-Revision-Date: 2017-10-17 11:07+0200\n"
6 | "Last-Translator: Mikk3lRo\n"
7 | "Language-Team: Mikk3lRo\n"
8 | "MIME-Version: 1.0\n"
9 | "Content-Type: text/plain; charset=UTF-8\n"
10 | "Content-Transfer-Encoding: 8bit\n"
11 | "X-Generator: Poedit 2.0.4\n"
12 | "X-Poedit-Basepath: ..\n"
13 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
14 | "X-Poedit-SourceCharset: UTF-8\n"
15 | "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
16 | "Language: da_DK\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: Puc/v4p1/Plugin/UpdateChecker.php:358
20 | msgid "Check for updates"
21 | msgstr "Undersøg for opdateringer"
22 |
23 | #: Puc/v4p1/Plugin/UpdateChecker.php:405
24 | #, php-format
25 | msgctxt "the plugin title"
26 | msgid "The %s plugin is up to date."
27 | msgstr "Plugin'et %s er allerede opdateret."
28 |
29 | #: Puc/v4p1/Plugin/UpdateChecker.php:407
30 | #, php-format
31 | msgctxt "the plugin title"
32 | msgid "A new version of the %s plugin is available."
33 | msgstr "En ny version af plugin'et %s er tilgængelig."
34 |
35 | #: Puc/v4p1/Plugin/UpdateChecker.php:409
36 | #, php-format
37 | msgid "Unknown update checker status \"%s\""
38 | msgstr "Ukendt opdateringsstatus: \"%s\""
39 |
40 | #: Puc/v4p1/Vcs/PluginUpdateChecker.php:83
41 | msgid "There is no changelog available."
42 | msgstr "Der er ingen ændringslog tilgængelig."
43 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-de_DE.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-de_DE.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-de_DE.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2016-06-29 20:21+0100\n"
5 | "PO-Revision-Date: 2016-06-29 20:23+0100\n"
6 | "Last-Translator: Igor Lückel \n"
7 | "Language-Team: \n"
8 | "MIME-Version: 1.0\n"
9 | "Content-Type: text/plain; charset=UTF-8\n"
10 | "Content-Transfer-Encoding: 8bit\n"
11 | "X-Generator: Poedit 1.8.1\n"
12 | "X-Poedit-Basepath: ..\n"
13 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
14 | "X-Poedit-SourceCharset: UTF-8\n"
15 | "X-Poedit-KeywordsList: __;_e\n"
16 | "Language: de_DE\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: github-checker.php:137
20 | msgid "There is no changelog available."
21 | msgstr "Es ist keine Liste von Programmänderungen verfügbar."
22 |
23 | #: plugin-update-checker.php:852
24 | msgid "Check for updates"
25 | msgstr "Nach Update suchen"
26 |
27 | #: plugin-update-checker.php:896
28 | msgid "This plugin is up to date."
29 | msgstr "Das Plugin ist aktuell."
30 |
31 | #: plugin-update-checker.php:898
32 | msgid "A new version of this plugin is available."
33 | msgstr "Es ist eine neue Version für das Plugin verfügbar."
34 |
35 | #: plugin-update-checker.php:900
36 | #, php-format
37 | msgid "Unknown update checker status \"%s\""
38 | msgstr "Unbekannter Update Status \"%s\""
39 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-es_AR.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-es_AR.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-es_AR.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2017-11-24 17:02+0200\n"
5 | "PO-Revision-Date: 2020-03-21 15:13-0400\n"
6 | "Language-Team: \n"
7 | "MIME-Version: 1.0\n"
8 | "Content-Type: text/plain; charset=UTF-8\n"
9 | "Content-Transfer-Encoding: 8bit\n"
10 | "X-Generator: Poedit 2.3\n"
11 | "X-Poedit-Basepath: ..\n"
12 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
13 | "X-Poedit-SourceCharset: UTF-8\n"
14 | "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
15 | "Last-Translator: \n"
16 | "Language: es_ES\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: Puc/v4p3/Plugin/UpdateChecker.php:395
20 | msgid "Check for updates"
21 | msgstr "Comprobar si hay actualizaciones"
22 |
23 | #: Puc/v4p3/Plugin/UpdateChecker.php:548
24 | #, php-format
25 | msgctxt "the plugin title"
26 | msgid "The %s plugin is up to date."
27 | msgstr "El plugin %s está actualizado."
28 |
29 | #: Puc/v4p3/Plugin/UpdateChecker.php:550
30 | #, php-format
31 | msgctxt "the plugin title"
32 | msgid "A new version of the %s plugin is available."
33 | msgstr "Una nueva versión del %s plugin está disponible."
34 |
35 | #: Puc/v4p3/Plugin/UpdateChecker.php:552
36 | #, php-format
37 | msgctxt "the plugin title"
38 | msgid "Could not determine if updates are available for %s."
39 | msgstr "No se pudo determinar si hay actualizaciones disponibles para %s."
40 |
41 | #: Puc/v4p3/Plugin/UpdateChecker.php:558
42 | #, php-format
43 | msgid "Unknown update checker status \"%s\""
44 | msgstr "Estado del comprobador de actualización desconocido «%s»"
45 |
46 | #: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
47 | msgid "There is no changelog available."
48 | msgstr "No hay un registro de cambios disponible."
49 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-es_CL.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-es_CL.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-es_CL.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2017-11-24 17:02+0200\n"
5 | "PO-Revision-Date: 2020-03-21 15:14-0400\n"
6 | "Language-Team: \n"
7 | "MIME-Version: 1.0\n"
8 | "Content-Type: text/plain; charset=UTF-8\n"
9 | "Content-Transfer-Encoding: 8bit\n"
10 | "X-Generator: Poedit 2.3\n"
11 | "X-Poedit-Basepath: ..\n"
12 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
13 | "X-Poedit-SourceCharset: UTF-8\n"
14 | "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
15 | "Last-Translator: \n"
16 | "Language: es_ES\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: Puc/v4p3/Plugin/UpdateChecker.php:395
20 | msgid "Check for updates"
21 | msgstr "Comprobar si hay actualizaciones"
22 |
23 | #: Puc/v4p3/Plugin/UpdateChecker.php:548
24 | #, php-format
25 | msgctxt "the plugin title"
26 | msgid "The %s plugin is up to date."
27 | msgstr "El plugin %s está actualizado."
28 |
29 | #: Puc/v4p3/Plugin/UpdateChecker.php:550
30 | #, php-format
31 | msgctxt "the plugin title"
32 | msgid "A new version of the %s plugin is available."
33 | msgstr "Una nueva versión del %s plugin está disponible."
34 |
35 | #: Puc/v4p3/Plugin/UpdateChecker.php:552
36 | #, php-format
37 | msgctxt "the plugin title"
38 | msgid "Could not determine if updates are available for %s."
39 | msgstr "No se pudo determinar si hay actualizaciones disponibles para %s."
40 |
41 | #: Puc/v4p3/Plugin/UpdateChecker.php:558
42 | #, php-format
43 | msgid "Unknown update checker status \"%s\""
44 | msgstr "Estado del comprobador de actualización desconocido «%s»"
45 |
46 | #: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
47 | msgid "There is no changelog available."
48 | msgstr "No hay un registro de cambios disponible."
49 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-es_CO.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-es_CO.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-es_CO.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2017-11-24 17:02+0200\n"
5 | "PO-Revision-Date: 2020-03-21 15:14-0400\n"
6 | "Language-Team: \n"
7 | "MIME-Version: 1.0\n"
8 | "Content-Type: text/plain; charset=UTF-8\n"
9 | "Content-Transfer-Encoding: 8bit\n"
10 | "X-Generator: Poedit 2.3\n"
11 | "X-Poedit-Basepath: ..\n"
12 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
13 | "X-Poedit-SourceCharset: UTF-8\n"
14 | "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
15 | "Last-Translator: \n"
16 | "Language: es_ES\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: Puc/v4p3/Plugin/UpdateChecker.php:395
20 | msgid "Check for updates"
21 | msgstr "Comprobar si hay actualizaciones"
22 |
23 | #: Puc/v4p3/Plugin/UpdateChecker.php:548
24 | #, php-format
25 | msgctxt "the plugin title"
26 | msgid "The %s plugin is up to date."
27 | msgstr "El plugin %s está actualizado."
28 |
29 | #: Puc/v4p3/Plugin/UpdateChecker.php:550
30 | #, php-format
31 | msgctxt "the plugin title"
32 | msgid "A new version of the %s plugin is available."
33 | msgstr "Una nueva versión del %s plugin está disponible."
34 |
35 | #: Puc/v4p3/Plugin/UpdateChecker.php:552
36 | #, php-format
37 | msgctxt "the plugin title"
38 | msgid "Could not determine if updates are available for %s."
39 | msgstr "No se pudo determinar si hay actualizaciones disponibles para %s."
40 |
41 | #: Puc/v4p3/Plugin/UpdateChecker.php:558
42 | #, php-format
43 | msgid "Unknown update checker status \"%s\""
44 | msgstr "Estado del comprobador de actualización desconocido «%s»"
45 |
46 | #: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
47 | msgid "There is no changelog available."
48 | msgstr "No hay un registro de cambios disponible."
49 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-es_CR.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-es_CR.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-es_CR.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2017-11-24 17:02+0200\n"
5 | "PO-Revision-Date: 2020-03-21 15:14-0400\n"
6 | "Language-Team: \n"
7 | "MIME-Version: 1.0\n"
8 | "Content-Type: text/plain; charset=UTF-8\n"
9 | "Content-Transfer-Encoding: 8bit\n"
10 | "X-Generator: Poedit 2.3\n"
11 | "X-Poedit-Basepath: ..\n"
12 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
13 | "X-Poedit-SourceCharset: UTF-8\n"
14 | "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
15 | "Last-Translator: \n"
16 | "Language: es_ES\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: Puc/v4p3/Plugin/UpdateChecker.php:395
20 | msgid "Check for updates"
21 | msgstr "Comprobar si hay actualizaciones"
22 |
23 | #: Puc/v4p3/Plugin/UpdateChecker.php:548
24 | #, php-format
25 | msgctxt "the plugin title"
26 | msgid "The %s plugin is up to date."
27 | msgstr "El plugin %s está actualizado."
28 |
29 | #: Puc/v4p3/Plugin/UpdateChecker.php:550
30 | #, php-format
31 | msgctxt "the plugin title"
32 | msgid "A new version of the %s plugin is available."
33 | msgstr "Una nueva versión del %s plugin está disponible."
34 |
35 | #: Puc/v4p3/Plugin/UpdateChecker.php:552
36 | #, php-format
37 | msgctxt "the plugin title"
38 | msgid "Could not determine if updates are available for %s."
39 | msgstr "No se pudo determinar si hay actualizaciones disponibles para %s."
40 |
41 | #: Puc/v4p3/Plugin/UpdateChecker.php:558
42 | #, php-format
43 | msgid "Unknown update checker status \"%s\""
44 | msgstr "Estado del comprobador de actualización desconocido «%s»"
45 |
46 | #: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
47 | msgid "There is no changelog available."
48 | msgstr "No hay un registro de cambios disponible."
49 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-es_DO.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-es_DO.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-es_DO.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2017-11-24 17:02+0200\n"
5 | "PO-Revision-Date: 2020-03-21 15:14-0400\n"
6 | "Language-Team: \n"
7 | "MIME-Version: 1.0\n"
8 | "Content-Type: text/plain; charset=UTF-8\n"
9 | "Content-Transfer-Encoding: 8bit\n"
10 | "X-Generator: Poedit 2.3\n"
11 | "X-Poedit-Basepath: ..\n"
12 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
13 | "X-Poedit-SourceCharset: UTF-8\n"
14 | "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
15 | "Last-Translator: \n"
16 | "Language: es_ES\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: Puc/v4p3/Plugin/UpdateChecker.php:395
20 | msgid "Check for updates"
21 | msgstr "Comprobar si hay actualizaciones"
22 |
23 | #: Puc/v4p3/Plugin/UpdateChecker.php:548
24 | #, php-format
25 | msgctxt "the plugin title"
26 | msgid "The %s plugin is up to date."
27 | msgstr "El plugin %s está actualizado."
28 |
29 | #: Puc/v4p3/Plugin/UpdateChecker.php:550
30 | #, php-format
31 | msgctxt "the plugin title"
32 | msgid "A new version of the %s plugin is available."
33 | msgstr "Una nueva versión del %s plugin está disponible."
34 |
35 | #: Puc/v4p3/Plugin/UpdateChecker.php:552
36 | #, php-format
37 | msgctxt "the plugin title"
38 | msgid "Could not determine if updates are available for %s."
39 | msgstr "No se pudo determinar si hay actualizaciones disponibles para %s."
40 |
41 | #: Puc/v4p3/Plugin/UpdateChecker.php:558
42 | #, php-format
43 | msgid "Unknown update checker status \"%s\""
44 | msgstr "Estado del comprobador de actualización desconocido «%s»"
45 |
46 | #: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
47 | msgid "There is no changelog available."
48 | msgstr "No hay un registro de cambios disponible."
49 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-es_ES.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-es_ES.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-es_ES.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2017-11-24 17:02+0200\n"
5 | "PO-Revision-Date: 2020-03-21 14:56-0400\n"
6 | "Language-Team: \n"
7 | "MIME-Version: 1.0\n"
8 | "Content-Type: text/plain; charset=UTF-8\n"
9 | "Content-Transfer-Encoding: 8bit\n"
10 | "X-Generator: Poedit 2.3\n"
11 | "X-Poedit-Basepath: ..\n"
12 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
13 | "X-Poedit-SourceCharset: UTF-8\n"
14 | "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
15 | "Last-Translator: \n"
16 | "Language: es_ES\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: Puc/v4p3/Plugin/UpdateChecker.php:395
20 | msgid "Check for updates"
21 | msgstr "Comprobar si hay actualizaciones"
22 |
23 | #: Puc/v4p3/Plugin/UpdateChecker.php:548
24 | #, php-format
25 | msgctxt "the plugin title"
26 | msgid "The %s plugin is up to date."
27 | msgstr "El plugin %s está actualizado."
28 |
29 | #: Puc/v4p3/Plugin/UpdateChecker.php:550
30 | #, php-format
31 | msgctxt "the plugin title"
32 | msgid "A new version of the %s plugin is available."
33 | msgstr "Una nueva versión del %s plugin está disponible."
34 |
35 | #: Puc/v4p3/Plugin/UpdateChecker.php:552
36 | #, php-format
37 | msgctxt "the plugin title"
38 | msgid "Could not determine if updates are available for %s."
39 | msgstr "No se pudo determinar si hay actualizaciones disponibles para %s."
40 |
41 | #: Puc/v4p3/Plugin/UpdateChecker.php:558
42 | #, php-format
43 | msgid "Unknown update checker status \"%s\""
44 | msgstr "Estado del comprobador de actualización desconocido «%s»"
45 |
46 | #: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
47 | msgid "There is no changelog available."
48 | msgstr "No hay un registro de cambios disponible."
49 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-es_GT.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-es_GT.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-es_GT.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2017-11-24 17:02+0200\n"
5 | "PO-Revision-Date: 2020-03-21 15:14-0400\n"
6 | "Language-Team: \n"
7 | "MIME-Version: 1.0\n"
8 | "Content-Type: text/plain; charset=UTF-8\n"
9 | "Content-Transfer-Encoding: 8bit\n"
10 | "X-Generator: Poedit 2.3\n"
11 | "X-Poedit-Basepath: ..\n"
12 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
13 | "X-Poedit-SourceCharset: UTF-8\n"
14 | "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
15 | "Last-Translator: \n"
16 | "Language: es_ES\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: Puc/v4p3/Plugin/UpdateChecker.php:395
20 | msgid "Check for updates"
21 | msgstr "Comprobar si hay actualizaciones"
22 |
23 | #: Puc/v4p3/Plugin/UpdateChecker.php:548
24 | #, php-format
25 | msgctxt "the plugin title"
26 | msgid "The %s plugin is up to date."
27 | msgstr "El plugin %s está actualizado."
28 |
29 | #: Puc/v4p3/Plugin/UpdateChecker.php:550
30 | #, php-format
31 | msgctxt "the plugin title"
32 | msgid "A new version of the %s plugin is available."
33 | msgstr "Una nueva versión del %s plugin está disponible."
34 |
35 | #: Puc/v4p3/Plugin/UpdateChecker.php:552
36 | #, php-format
37 | msgctxt "the plugin title"
38 | msgid "Could not determine if updates are available for %s."
39 | msgstr "No se pudo determinar si hay actualizaciones disponibles para %s."
40 |
41 | #: Puc/v4p3/Plugin/UpdateChecker.php:558
42 | #, php-format
43 | msgid "Unknown update checker status \"%s\""
44 | msgstr "Estado del comprobador de actualización desconocido «%s»"
45 |
46 | #: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
47 | msgid "There is no changelog available."
48 | msgstr "No hay un registro de cambios disponible."
49 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-es_HN.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-es_HN.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-es_HN.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2017-11-24 17:02+0200\n"
5 | "PO-Revision-Date: 2020-03-21 15:14-0400\n"
6 | "Language-Team: \n"
7 | "MIME-Version: 1.0\n"
8 | "Content-Type: text/plain; charset=UTF-8\n"
9 | "Content-Transfer-Encoding: 8bit\n"
10 | "X-Generator: Poedit 2.3\n"
11 | "X-Poedit-Basepath: ..\n"
12 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
13 | "X-Poedit-SourceCharset: UTF-8\n"
14 | "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
15 | "Last-Translator: \n"
16 | "Language: es_ES\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: Puc/v4p3/Plugin/UpdateChecker.php:395
20 | msgid "Check for updates"
21 | msgstr "Comprobar si hay actualizaciones"
22 |
23 | #: Puc/v4p3/Plugin/UpdateChecker.php:548
24 | #, php-format
25 | msgctxt "the plugin title"
26 | msgid "The %s plugin is up to date."
27 | msgstr "El plugin %s está actualizado."
28 |
29 | #: Puc/v4p3/Plugin/UpdateChecker.php:550
30 | #, php-format
31 | msgctxt "the plugin title"
32 | msgid "A new version of the %s plugin is available."
33 | msgstr "Una nueva versión del %s plugin está disponible."
34 |
35 | #: Puc/v4p3/Plugin/UpdateChecker.php:552
36 | #, php-format
37 | msgctxt "the plugin title"
38 | msgid "Could not determine if updates are available for %s."
39 | msgstr "No se pudo determinar si hay actualizaciones disponibles para %s."
40 |
41 | #: Puc/v4p3/Plugin/UpdateChecker.php:558
42 | #, php-format
43 | msgid "Unknown update checker status \"%s\""
44 | msgstr "Estado del comprobador de actualización desconocido «%s»"
45 |
46 | #: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
47 | msgid "There is no changelog available."
48 | msgstr "No hay un registro de cambios disponible."
49 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-es_MX.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-es_MX.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-es_MX.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2017-11-24 17:02+0200\n"
5 | "PO-Revision-Date: 2020-03-21 14:57-0400\n"
6 | "Language-Team: \n"
7 | "MIME-Version: 1.0\n"
8 | "Content-Type: text/plain; charset=UTF-8\n"
9 | "Content-Transfer-Encoding: 8bit\n"
10 | "X-Generator: Poedit 2.3\n"
11 | "X-Poedit-Basepath: ..\n"
12 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
13 | "X-Poedit-SourceCharset: UTF-8\n"
14 | "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
15 | "Last-Translator: \n"
16 | "Language: es_ES\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: Puc/v4p3/Plugin/UpdateChecker.php:395
20 | msgid "Check for updates"
21 | msgstr "Comprobar si hay actualizaciones"
22 |
23 | #: Puc/v4p3/Plugin/UpdateChecker.php:548
24 | #, php-format
25 | msgctxt "the plugin title"
26 | msgid "The %s plugin is up to date."
27 | msgstr "El plugin %s está actualizado."
28 |
29 | #: Puc/v4p3/Plugin/UpdateChecker.php:550
30 | #, php-format
31 | msgctxt "the plugin title"
32 | msgid "A new version of the %s plugin is available."
33 | msgstr "Una nueva versión del %s plugin está disponible."
34 |
35 | #: Puc/v4p3/Plugin/UpdateChecker.php:552
36 | #, php-format
37 | msgctxt "the plugin title"
38 | msgid "Could not determine if updates are available for %s."
39 | msgstr "No se pudo determinar si hay actualizaciones disponibles para %s."
40 |
41 | #: Puc/v4p3/Plugin/UpdateChecker.php:558
42 | #, php-format
43 | msgid "Unknown update checker status \"%s\""
44 | msgstr "Estado del comprobador de actualización desconocido «%s»"
45 |
46 | #: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
47 | msgid "There is no changelog available."
48 | msgstr "No hay un registro de cambios disponible."
49 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-es_PE.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-es_PE.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-es_PE.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2017-11-24 17:02+0200\n"
5 | "PO-Revision-Date: 2020-03-21 15:15-0400\n"
6 | "Language-Team: \n"
7 | "MIME-Version: 1.0\n"
8 | "Content-Type: text/plain; charset=UTF-8\n"
9 | "Content-Transfer-Encoding: 8bit\n"
10 | "X-Generator: Poedit 2.3\n"
11 | "X-Poedit-Basepath: ..\n"
12 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
13 | "X-Poedit-SourceCharset: UTF-8\n"
14 | "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
15 | "Last-Translator: \n"
16 | "Language: es_ES\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: Puc/v4p3/Plugin/UpdateChecker.php:395
20 | msgid "Check for updates"
21 | msgstr "Comprobar si hay actualizaciones"
22 |
23 | #: Puc/v4p3/Plugin/UpdateChecker.php:548
24 | #, php-format
25 | msgctxt "the plugin title"
26 | msgid "The %s plugin is up to date."
27 | msgstr "El plugin %s está actualizado."
28 |
29 | #: Puc/v4p3/Plugin/UpdateChecker.php:550
30 | #, php-format
31 | msgctxt "the plugin title"
32 | msgid "A new version of the %s plugin is available."
33 | msgstr "Una nueva versión del %s plugin está disponible."
34 |
35 | #: Puc/v4p3/Plugin/UpdateChecker.php:552
36 | #, php-format
37 | msgctxt "the plugin title"
38 | msgid "Could not determine if updates are available for %s."
39 | msgstr "No se pudo determinar si hay actualizaciones disponibles para %s."
40 |
41 | #: Puc/v4p3/Plugin/UpdateChecker.php:558
42 | #, php-format
43 | msgid "Unknown update checker status \"%s\""
44 | msgstr "Estado del comprobador de actualización desconocido «%s»"
45 |
46 | #: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
47 | msgid "There is no changelog available."
48 | msgstr "No hay un registro de cambios disponible."
49 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-es_PR.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-es_PR.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-es_PR.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2017-11-24 17:02+0200\n"
5 | "PO-Revision-Date: 2020-03-21 15:15-0400\n"
6 | "Language-Team: \n"
7 | "MIME-Version: 1.0\n"
8 | "Content-Type: text/plain; charset=UTF-8\n"
9 | "Content-Transfer-Encoding: 8bit\n"
10 | "X-Generator: Poedit 2.3\n"
11 | "X-Poedit-Basepath: ..\n"
12 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
13 | "X-Poedit-SourceCharset: UTF-8\n"
14 | "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
15 | "Last-Translator: \n"
16 | "Language: es_ES\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: Puc/v4p3/Plugin/UpdateChecker.php:395
20 | msgid "Check for updates"
21 | msgstr "Comprobar si hay actualizaciones"
22 |
23 | #: Puc/v4p3/Plugin/UpdateChecker.php:548
24 | #, php-format
25 | msgctxt "the plugin title"
26 | msgid "The %s plugin is up to date."
27 | msgstr "El plugin %s está actualizado."
28 |
29 | #: Puc/v4p3/Plugin/UpdateChecker.php:550
30 | #, php-format
31 | msgctxt "the plugin title"
32 | msgid "A new version of the %s plugin is available."
33 | msgstr "Una nueva versión del %s plugin está disponible."
34 |
35 | #: Puc/v4p3/Plugin/UpdateChecker.php:552
36 | #, php-format
37 | msgctxt "the plugin title"
38 | msgid "Could not determine if updates are available for %s."
39 | msgstr "No se pudo determinar si hay actualizaciones disponibles para %s."
40 |
41 | #: Puc/v4p3/Plugin/UpdateChecker.php:558
42 | #, php-format
43 | msgid "Unknown update checker status \"%s\""
44 | msgstr "Estado del comprobador de actualización desconocido «%s»"
45 |
46 | #: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
47 | msgid "There is no changelog available."
48 | msgstr "No hay un registro de cambios disponible."
49 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-es_UY.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-es_UY.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-es_UY.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2017-11-24 17:02+0200\n"
5 | "PO-Revision-Date: 2020-03-21 15:15-0400\n"
6 | "Language-Team: \n"
7 | "MIME-Version: 1.0\n"
8 | "Content-Type: text/plain; charset=UTF-8\n"
9 | "Content-Transfer-Encoding: 8bit\n"
10 | "X-Generator: Poedit 2.3\n"
11 | "X-Poedit-Basepath: ..\n"
12 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
13 | "X-Poedit-SourceCharset: UTF-8\n"
14 | "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
15 | "Last-Translator: \n"
16 | "Language: es_ES\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: Puc/v4p3/Plugin/UpdateChecker.php:395
20 | msgid "Check for updates"
21 | msgstr "Comprobar si hay actualizaciones"
22 |
23 | #: Puc/v4p3/Plugin/UpdateChecker.php:548
24 | #, php-format
25 | msgctxt "the plugin title"
26 | msgid "The %s plugin is up to date."
27 | msgstr "El plugin %s está actualizado."
28 |
29 | #: Puc/v4p3/Plugin/UpdateChecker.php:550
30 | #, php-format
31 | msgctxt "the plugin title"
32 | msgid "A new version of the %s plugin is available."
33 | msgstr "Una nueva versión del %s plugin está disponible."
34 |
35 | #: Puc/v4p3/Plugin/UpdateChecker.php:552
36 | #, php-format
37 | msgctxt "the plugin title"
38 | msgid "Could not determine if updates are available for %s."
39 | msgstr "No se pudo determinar si hay actualizaciones disponibles para %s."
40 |
41 | #: Puc/v4p3/Plugin/UpdateChecker.php:558
42 | #, php-format
43 | msgid "Unknown update checker status \"%s\""
44 | msgstr "Estado del comprobador de actualización desconocido «%s»"
45 |
46 | #: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
47 | msgid "There is no changelog available."
48 | msgstr "No hay un registro de cambios disponible."
49 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-es_VE.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-es_VE.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-es_VE.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2017-11-24 17:02+0200\n"
5 | "PO-Revision-Date: 2020-03-21 14:57-0400\n"
6 | "Language-Team: \n"
7 | "MIME-Version: 1.0\n"
8 | "Content-Type: text/plain; charset=UTF-8\n"
9 | "Content-Transfer-Encoding: 8bit\n"
10 | "X-Generator: Poedit 2.3\n"
11 | "X-Poedit-Basepath: ..\n"
12 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
13 | "X-Poedit-SourceCharset: UTF-8\n"
14 | "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
15 | "Last-Translator: \n"
16 | "Language: es_ES\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: Puc/v4p3/Plugin/UpdateChecker.php:395
20 | msgid "Check for updates"
21 | msgstr "Comprobar si hay actualizaciones"
22 |
23 | #: Puc/v4p3/Plugin/UpdateChecker.php:548
24 | #, php-format
25 | msgctxt "the plugin title"
26 | msgid "The %s plugin is up to date."
27 | msgstr "El plugin %s está actualizado."
28 |
29 | #: Puc/v4p3/Plugin/UpdateChecker.php:550
30 | #, php-format
31 | msgctxt "the plugin title"
32 | msgid "A new version of the %s plugin is available."
33 | msgstr "Una nueva versión del %s plugin está disponible."
34 |
35 | #: Puc/v4p3/Plugin/UpdateChecker.php:552
36 | #, php-format
37 | msgctxt "the plugin title"
38 | msgid "Could not determine if updates are available for %s."
39 | msgstr "No se pudo determinar si hay actualizaciones disponibles para %s."
40 |
41 | #: Puc/v4p3/Plugin/UpdateChecker.php:558
42 | #, php-format
43 | msgid "Unknown update checker status \"%s\""
44 | msgstr "Estado del comprobador de actualización desconocido «%s»"
45 |
46 | #: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
47 | msgid "There is no changelog available."
48 | msgstr "No hay un registro de cambios disponible."
49 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-fa_IR.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-fa_IR.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-fa_IR.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2016-02-17 14:21+0100\n"
5 | "PO-Revision-Date: 2016-10-28 14:30+0330\n"
6 | "Last-Translator: studio RVOLA \n"
7 | "Language-Team: Pro Style \n"
8 | "Language: fa_IR\n"
9 | "MIME-Version: 1.0\n"
10 | "Content-Type: text/plain; charset=UTF-8\n"
11 | "Content-Transfer-Encoding: 8bit\n"
12 | "X-Generator: Poedit 1.8.8\n"
13 | "X-Poedit-Basepath: ..\n"
14 | "Plural-Forms: nplurals=2; plural=(n > 1);\n"
15 | "X-Poedit-SourceCharset: UTF-8\n"
16 | "X-Poedit-KeywordsList: __;_e\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: github-checker.php:120
20 | msgid "There is no changelog available."
21 | msgstr "شرحی برای تغییرات یافت نشد"
22 |
23 | #: plugin-update-checker.php:637
24 | msgid "Check for updates"
25 | msgstr "بررسی برای بروزرسانی "
26 |
27 | #: plugin-update-checker.php:681
28 | msgid "This plugin is up to date."
29 | msgstr "شما از آخرین نسخه استفاده میکنید . بهروز باشید"
30 |
31 | #: plugin-update-checker.php:683
32 | msgid "A new version of this plugin is available."
33 | msgstr "نسخه جدیدی برای افزونه ارائه شده است ."
34 |
35 | #: plugin-update-checker.php:685
36 | #, php-format
37 | msgid "Unknown update checker status \"%s\""
38 | msgstr "وضعیت ناشناخته برای بروزرسانی \"%s\""
39 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-fr_CA.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-fr_CA.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-fr_CA.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2017-11-24 17:02+0200\n"
5 | "PO-Revision-Date: 2018-02-12 10:32-0500\n"
6 | "Language-Team: \n"
7 | "MIME-Version: 1.0\n"
8 | "Content-Type: text/plain; charset=UTF-8\n"
9 | "Content-Transfer-Encoding: 8bit\n"
10 | "X-Generator: Poedit 2.0.4\n"
11 | "X-Poedit-Basepath: ..\n"
12 | "Plural-Forms: nplurals=2; plural=(n > 1);\n"
13 | "X-Poedit-SourceCharset: UTF-8\n"
14 | "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
15 | "Last-Translator: Eric Gagnon \n"
16 | "Language: fr_CA\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: Puc/v4p3/Plugin/UpdateChecker.php:395
20 | msgid "Check for updates"
21 | msgstr "Vérifier les mises à jour"
22 |
23 | #: Puc/v4p3/Plugin/UpdateChecker.php:548
24 | #, php-format
25 | msgctxt "the plugin title"
26 | msgid "The %s plugin is up to date."
27 | msgstr "L’extension %s est à jour."
28 |
29 | #: Puc/v4p3/Plugin/UpdateChecker.php:550
30 | #, php-format
31 | msgctxt "the plugin title"
32 | msgid "A new version of the %s plugin is available."
33 | msgstr "Une nouvelle version de l’extension %s est disponible."
34 |
35 | #: Puc/v4p3/Plugin/UpdateChecker.php:552
36 | #, php-format
37 | msgctxt "the plugin title"
38 | msgid "Could not determine if updates are available for %s."
39 | msgstr "Impossible de déterminer si une mise à jour est disponible pour \"%s\""
40 |
41 | #: Puc/v4p3/Plugin/UpdateChecker.php:558
42 | #, php-format
43 | msgid "Unknown update checker status \"%s\""
44 | msgstr "Un problème inconnu est survenu \"%s\""
45 |
46 | #: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
47 | msgid "There is no changelog available."
48 | msgstr "Il n’y a aucun journal de mise à jour disponible."
49 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-fr_FR.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-fr_FR.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-fr_FR.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2017-07-07 14:53+0200\n"
5 | "PO-Revision-Date: 2017-07-07 14:54+0200\n"
6 | "Language-Team: studio RVOLA \n"
7 | "Language: fr_FR\n"
8 | "MIME-Version: 1.0\n"
9 | "Content-Type: text/plain; charset=UTF-8\n"
10 | "Content-Transfer-Encoding: 8bit\n"
11 | "X-Generator: Poedit 2.0.2\n"
12 | "X-Poedit-Basepath: ..\n"
13 | "Plural-Forms: nplurals=2; plural=(n > 1);\n"
14 | "X-Poedit-SourceCharset: UTF-8\n"
15 | "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
16 | "Last-Translator: Nicolas GEHIN\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: Puc/v4p1/Plugin/UpdateChecker.php:358
20 | msgid "Check for updates"
21 | msgstr "Vérifier les mises à jour"
22 |
23 | #: Puc/v4p1/Plugin/UpdateChecker.php:405
24 | #, php-format
25 | msgctxt "the plugin title"
26 | msgid "The %s plugin is up to date."
27 | msgstr "L’extension %s est à jour."
28 |
29 | #: Puc/v4p1/Plugin/UpdateChecker.php:407
30 | #, php-format
31 | msgctxt "the plugin title"
32 | msgid "A new version of the %s plugin is available."
33 | msgstr "Une nouvelle version de l’extension %s est disponible."
34 |
35 | #: Puc/v4p1/Plugin/UpdateChecker.php:409
36 | #, php-format
37 | msgid "Unknown update checker status \"%s\""
38 | msgstr "Un problème inconnu est survenu \"%s\""
39 |
40 | #: Puc/v4p1/Vcs/PluginUpdateChecker.php:85
41 | msgid "There is no changelog available."
42 | msgstr "Il n’y a aucun journal de mise à jour disponible."
43 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-hu_HU.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-hu_HU.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-hu_HU.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2016-01-11 21:23+0100\n"
5 | "PO-Revision-Date: 2016-01-11 21:25+0100\n"
6 | "Last-Translator: Tamás András Horváth \n"
7 | "Language-Team: \n"
8 | "Language: hu_HU\n"
9 | "MIME-Version: 1.0\n"
10 | "Content-Type: text/plain; charset=UTF-8\n"
11 | "Content-Transfer-Encoding: 8bit\n"
12 | "X-Generator: Poedit 1.8.6\n"
13 | "X-Poedit-Basepath: ..\n"
14 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
15 | "X-Poedit-SourceCharset: UTF-8\n"
16 | "X-Poedit-KeywordsList: __;_e\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: github-checker.php:137
20 | msgid "There is no changelog available."
21 | msgstr "Nem érhető el a changelog."
22 |
23 | #: plugin-update-checker.php:852
24 | msgid "Check for updates"
25 | msgstr "Frissítés ellenőrzése"
26 |
27 | #: plugin-update-checker.php:896
28 | msgid "This plugin is up to date."
29 | msgstr "Ez a plugin naprakész."
30 |
31 | #: plugin-update-checker.php:898
32 | msgid "A new version of this plugin is available."
33 | msgstr "Új verzió érhető el a kiegészítőhöz"
34 |
35 | #: plugin-update-checker.php:900
36 | #, php-format
37 | msgid "Unknown update checker status \"%s\""
38 | msgstr "Ismeretlen a frissítés ellenőrző státusza \"%s\""
39 |
40 | #~ msgid "Every %d hours"
41 | #~ msgstr "Minden %d órában"
42 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-it_IT.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-it_IT.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-it_IT.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2020-08-08 14:36+0300\n"
5 | "PO-Revision-Date: 2022-05-20 00:17+0200\n"
6 | "Language-Team: \n"
7 | "MIME-Version: 1.0\n"
8 | "Content-Type: text/plain; charset=UTF-8\n"
9 | "Content-Transfer-Encoding: 8bit\n"
10 | "X-Generator: Poedit 3.0\n"
11 | "X-Poedit-Basepath: ..\n"
12 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
13 | "X-Poedit-SourceCharset: UTF-8\n"
14 | "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
15 | "Last-Translator: d79\n"
16 | "Language: it_IT\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: Puc/v4p11/Plugin/Ui.php:128
20 | msgid "Check for updates"
21 | msgstr "Verifica aggiornamenti"
22 |
23 | #: Puc/v4p11/Plugin/Ui.php:213
24 | #, php-format
25 | msgctxt "the plugin title"
26 | msgid "The %s plugin is up to date."
27 | msgstr "Il plugin %s è aggiornato."
28 |
29 | #: Puc/v4p11/Plugin/Ui.php:215
30 | #, php-format
31 | msgctxt "the plugin title"
32 | msgid "A new version of the %s plugin is available."
33 | msgstr "Una nuova versione del plugin %s è disponibile."
34 |
35 | #: Puc/v4p11/Plugin/Ui.php:217
36 | #, php-format
37 | msgctxt "the plugin title"
38 | msgid "Could not determine if updates are available for %s."
39 | msgstr "Non è possibile verificare se c'è un aggiornamento disponibile per %s."
40 |
41 | #: Puc/v4p11/Plugin/Ui.php:223
42 | #, php-format
43 | msgid "Unknown update checker status \"%s\""
44 | msgstr "Stato di controllo aggiornamenti sconosciuto \"%s\""
45 |
46 | #: Puc/v4p11/Vcs/PluginUpdateChecker.php:98
47 | msgid "There is no changelog available."
48 | msgstr "Non c'è alcun registro delle modifiche disponibile."
49 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-ja.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-ja.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-ja.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: \n"
4 | "POT-Creation-Date: 2019-07-15 17:07+0900\n"
5 | "PO-Revision-Date: 2019-07-15 17:12+0900\n"
6 | "Last-Translator: tak \n"
7 | "Language-Team: \n"
8 | "Language: ja_JP\n"
9 | "MIME-Version: 1.0\n"
10 | "Content-Type: text/plain; charset=UTF-8\n"
11 | "Content-Transfer-Encoding: 8bit\n"
12 | "X-Generator: Poedit 2.2.3\n"
13 | "X-Poedit-Basepath: ../../../../../../Applications/XAMPP/xamppfiles/htdocs/"
14 | "kisagai/wordpress/wp-content/plugins/simple-stripe-gateway/Puc\n"
15 | "Plural-Forms: nplurals=1; plural=0;\n"
16 | "X-Poedit-KeywordsList: __;_x:1,2c\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: v4p7/Plugin/Ui.php:54
20 | msgid "View details"
21 | msgstr "詳細を表示"
22 |
23 | #: v4p7/Plugin/Ui.php:77
24 | #, php-format
25 | msgid "More information about %s"
26 | msgstr "%sについての詳細"
27 |
28 | #: v4p7/Plugin/Ui.php:128
29 | msgid "Check for updates"
30 | msgstr "アップデートを確認"
31 |
32 | #: v4p7/Plugin/Ui.php:213
33 | #, php-format
34 | msgctxt "the plugin title"
35 | msgid "The %s plugin is up to date."
36 | msgstr "%s プラグインは、最新バージョンです。"
37 |
38 | #: v4p7/Plugin/Ui.php:215
39 | #, php-format
40 | msgctxt "the plugin title"
41 | msgid "A new version of the %s plugin is available."
42 | msgstr "%s プラグインの最新バージョンがあります。"
43 |
44 | #: v4p7/Plugin/Ui.php:217
45 | #, php-format
46 | msgctxt "the plugin title"
47 | msgid "Could not determine if updates are available for %s."
48 | msgstr "%s のアップデートがあるかどうかを判断できませんでした。"
49 |
50 | #: v4p7/Plugin/Ui.php:223
51 | #, php-format
52 | msgid "Unknown update checker status \"%s\""
53 | msgstr "バージョンアップの確認で想定外の状態になりました。ステータス:”%s”"
54 |
55 | #: v4p7/Vcs/PluginUpdateChecker.php:98
56 | msgid "There is no changelog available."
57 | msgstr "更新履歴はありません。"
58 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-nl_BE.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-nl_BE.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-nl_BE.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2018-03-25 18:15+0200\n"
5 | "PO-Revision-Date: 2018-03-25 18:32+0200\n"
6 | "Language-Team: \n"
7 | "MIME-Version: 1.0\n"
8 | "Content-Type: text/plain; charset=UTF-8\n"
9 | "Content-Transfer-Encoding: 8bit\n"
10 | "X-Generator: Poedit 1.8.7.1\n"
11 | "X-Poedit-Basepath: ..\n"
12 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
13 | "X-Poedit-SourceCharset: UTF-8\n"
14 | "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
15 | "Last-Translator: Frank Goossens \n"
16 | "Language: nl_BE\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: Puc/v4p3/Plugin/UpdateChecker.php:395
20 | msgid "Check for updates"
21 | msgstr "Controleer op nieuwe versies"
22 |
23 | #: Puc/v4p3/Plugin/UpdateChecker.php:548
24 | #, php-format
25 | msgctxt "the plugin title"
26 | msgid "The %s plugin is up to date."
27 | msgstr "De meest recente %s versie is geïnstalleerd."
28 |
29 | #: Puc/v4p3/Plugin/UpdateChecker.php:550
30 | #, php-format
31 | msgctxt "the plugin title"
32 | msgid "A new version of the %s plugin is available."
33 | msgstr "Er is een nieuwe versie van %s beschikbaar."
34 |
35 | #: Puc/v4p3/Plugin/UpdateChecker.php:552
36 | #, php-format
37 | msgctxt "the plugin title"
38 | msgid "Could not determine if updates are available for %s."
39 | msgstr "Kon niet bepalen of er nieuwe versie van %s beschikbaar is."
40 |
41 | #: Puc/v4p3/Plugin/UpdateChecker.php:558
42 | #, php-format
43 | msgid "Unknown update checker status \"%s\""
44 | msgstr "Ongekende status bij controle op nieuwe versie: \"%s\""
45 |
46 | #: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
47 | msgid "There is no changelog available."
48 | msgstr "Er is geen changelog beschikbaar."
49 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-nl_NL.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-nl_NL.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-nl_NL.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2018-03-25 18:15+0200\n"
5 | "PO-Revision-Date: 2018-03-25 18:32+0200\n"
6 | "Language-Team: \n"
7 | "MIME-Version: 1.0\n"
8 | "Content-Type: text/plain; charset=UTF-8\n"
9 | "Content-Transfer-Encoding: 8bit\n"
10 | "X-Generator: Poedit 1.8.7.1\n"
11 | "X-Poedit-Basepath: ..\n"
12 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
13 | "X-Poedit-SourceCharset: UTF-8\n"
14 | "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
15 | "Last-Translator: Frank Goossens \n"
16 | "Language: nl_NL\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: Puc/v4p3/Plugin/UpdateChecker.php:395
20 | msgid "Check for updates"
21 | msgstr "Controleer op nieuwe versies"
22 |
23 | #: Puc/v4p3/Plugin/UpdateChecker.php:548
24 | #, php-format
25 | msgctxt "the plugin title"
26 | msgid "The %s plugin is up to date."
27 | msgstr "De meest recente %s versie is geïnstalleerd."
28 |
29 | #: Puc/v4p3/Plugin/UpdateChecker.php:550
30 | #, php-format
31 | msgctxt "the plugin title"
32 | msgid "A new version of the %s plugin is available."
33 | msgstr "Er is een nieuwe versie van %s beschikbaar."
34 |
35 | #: Puc/v4p3/Plugin/UpdateChecker.php:552
36 | #, php-format
37 | msgctxt "the plugin title"
38 | msgid "Could not determine if updates are available for %s."
39 | msgstr "Kon niet bepalen of er nieuwe versie van %s beschikbaar is."
40 |
41 | #: Puc/v4p3/Plugin/UpdateChecker.php:558
42 | #, php-format
43 | msgid "Unknown update checker status \"%s\""
44 | msgstr "Ongekende status bij controle op nieuwe versie: \"%s\""
45 |
46 | #: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
47 | msgid "There is no changelog available."
48 | msgstr "Er is geen changelog beschikbaar."
49 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-pt_BR.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-pt_BR.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-pt_BR.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2017-05-19 15:41-0300\n"
5 | "PO-Revision-Date: 2017-05-19 15:42-0300\n"
6 | "Last-Translator: \n"
7 | "Language-Team: \n"
8 | "Language: pt_BR\n"
9 | "MIME-Version: 1.0\n"
10 | "Content-Type: text/plain; charset=UTF-8\n"
11 | "Content-Transfer-Encoding: 8bit\n"
12 | "X-Generator: Poedit 1.8.8\n"
13 | "X-Poedit-Basepath: ..\n"
14 | "Plural-Forms: nplurals=2; plural=(n > 1);\n"
15 | "X-Poedit-SourceCharset: UTF-8\n"
16 | "X-Poedit-KeywordsList: __;_e;_x;_x:1,2c\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: Puc/v4p1/Plugin/UpdateChecker.php:358
20 | msgid "Check for updates"
21 | msgstr "Verificar Atualizações"
22 |
23 | #: Puc/v4p1/Plugin/UpdateChecker.php:401 Puc/v4p1/Plugin/UpdateChecker.php:406
24 | #, php-format
25 | msgctxt "the plugin title"
26 | msgid "The %s plugin is up to date."
27 | msgstr "O plugin %s já está na sua versão mais recente."
28 |
29 | #: Puc/v4p1/Plugin/UpdateChecker.php:408
30 | #, php-format
31 | msgctxt "the plugin title"
32 | msgid "A new version of the %s plugin is available."
33 | msgstr "Há uma nova versão para o plugin %s disponível para download."
34 |
35 | #: Puc/v4p1/Plugin/UpdateChecker.php:410
36 | #, php-format
37 | msgid "Unknown update checker status \"%s\""
38 | msgstr "Status \"%s\" desconhecido."
39 |
40 | #: Puc/v4p1/Vcs/PluginUpdateChecker.php:83
41 | msgid "There is no changelog available."
42 | msgstr "Não há um changelog disponível."
43 |
44 | #~ msgid "The %s plugin is up to date."
45 | #~ msgstr "O plugin %s já está na sua versão mais recente."
46 |
47 | #~ msgid "A new version of the %s plugin is available."
48 | #~ msgstr "Há uma nova versão para o plugin %s disponível para download."
49 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-ru_RU.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-ru_RU.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-ru_RU.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2020-08-08 14:36+0300\n"
5 | "PO-Revision-Date: 2021-12-20 17:59+0200\n"
6 | "Language-Team: \n"
7 | "MIME-Version: 1.0\n"
8 | "Content-Type: text/plain; charset=UTF-8\n"
9 | "Content-Transfer-Encoding: 8bit\n"
10 | "X-Generator: Poedit 2.2\n"
11 | "X-Poedit-Basepath: ..\n"
12 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n"
13 | "X-Poedit-SourceCharset: UTF-8\n"
14 | "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
15 | "Last-Translator: \n"
16 | "Language: ru_RU\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: Puc/v4p11/Plugin/Ui.php:128
20 | msgid "Check for updates"
21 | msgstr "Проверить обновления"
22 |
23 | #: Puc/v4p11/Plugin/Ui.php:213
24 | #, php-format
25 | msgctxt "the plugin title"
26 | msgid "The %s plugin is up to date."
27 | msgstr "Плагин %s обновлён."
28 |
29 | #: Puc/v4p11/Plugin/Ui.php:215
30 | #, php-format
31 | msgctxt "the plugin title"
32 | msgid "A new version of the %s plugin is available."
33 | msgstr "Новая версия %s доступна."
34 |
35 | #: Puc/v4p11/Plugin/Ui.php:217
36 | #, php-format
37 | msgctxt "the plugin title"
38 | msgid "Could not determine if updates are available for %s."
39 | msgstr "Не удалось определить, доступны ли обновления для %s."
40 |
41 | #: Puc/v4p11/Plugin/Ui.php:223
42 | #, php-format
43 | msgid "Unknown update checker status \"%s\""
44 | msgstr "Неизвестный статус средства проверки обновлений \"%s\""
45 |
46 | #: Puc/v4p11/Vcs/PluginUpdateChecker.php:98
47 | msgid "There is no changelog available."
48 | msgstr "Журнал изменений отсутствует."
49 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-sl_SI.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-sl_SI.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-sl_SI.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2017-11-24 17:02+0200\n"
5 | "PO-Revision-Date: 2018-10-27 20:36+0200\n"
6 | "Language-Team: \n"
7 | "MIME-Version: 1.0\n"
8 | "Content-Type: text/plain; charset=UTF-8\n"
9 | "Content-Transfer-Encoding: 8bit\n"
10 | "X-Generator: Poedit 2.2\n"
11 | "X-Poedit-Basepath: ..\n"
12 | "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100>=3 && n%100<=4 ? 2 : 3);\n"
13 | "X-Poedit-SourceCharset: UTF-8\n"
14 | "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
15 | "Last-Translator: Igor Funa\n"
16 | "Language: sl_SI\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: Puc/v4p3/Plugin/UpdateChecker.php:395
20 | msgid "Check for updates"
21 | msgstr "Preveri posodobitve"
22 |
23 | #: Puc/v4p3/Plugin/UpdateChecker.php:548
24 | #, php-format
25 | msgctxt "the plugin title"
26 | msgid "The %s plugin is up to date."
27 | msgstr "Vtičnik %s je že posodobljen."
28 |
29 | #: Puc/v4p3/Plugin/UpdateChecker.php:550
30 | #, php-format
31 | msgctxt "the plugin title"
32 | msgid "A new version of the %s plugin is available."
33 | msgstr "Nova različica vtičnika %s je na razpolago."
34 |
35 | #: Puc/v4p3/Plugin/UpdateChecker.php:552
36 | #, php-format
37 | msgctxt "the plugin title"
38 | msgid "Could not determine if updates are available for %s."
39 | msgstr "Ne morem ugotoviti če se za vtičnik %s na razpolago posodobitve."
40 |
41 | #: Puc/v4p3/Plugin/UpdateChecker.php:558
42 | #, php-format
43 | msgid "Unknown update checker status \"%s\""
44 | msgstr "Neznan status preverjanja posodobitev za \"%s\""
45 |
46 | #: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
47 | msgid "There is no changelog available."
48 | msgstr "Dnevnik sprememb ni na razpolago."
49 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-sv_SE.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-sv_SE.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-sv_SE.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2017-05-20 10:53+0300\n"
5 | "PO-Revision-Date: 2017-10-16 15:02+0200\n"
6 | "Language-Team: \n"
7 | "MIME-Version: 1.0\n"
8 | "Content-Type: text/plain; charset=UTF-8\n"
9 | "Content-Transfer-Encoding: 8bit\n"
10 | "X-Generator: Poedit 2.0.4\n"
11 | "X-Poedit-Basepath: ..\n"
12 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
13 | "X-Poedit-SourceCharset: UTF-8\n"
14 | "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
15 | "Last-Translator: \n"
16 | "Language: sv_SE\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: Puc/v4p1/Plugin/UpdateChecker.php:358
20 | msgid "Check for updates"
21 | msgstr "Sök efter uppdateringar"
22 |
23 | #: Puc/v4p1/Plugin/UpdateChecker.php:405
24 | #, php-format
25 | msgctxt "the plugin title"
26 | msgid "The %s plugin is up to date."
27 | msgstr "Tillägget %s är uppdaterat."
28 |
29 | #: Puc/v4p1/Plugin/UpdateChecker.php:407
30 | #, php-format
31 | msgctxt "the plugin title"
32 | msgid "A new version of the %s plugin is available."
33 | msgstr "Det finns en ny version av tillägget %s."
34 |
35 | #: Puc/v4p1/Plugin/UpdateChecker.php:409
36 | #, php-format
37 | msgid "Unknown update checker status \"%s\""
38 | msgstr "Okänd status för kontroll av uppdatering “%s”"
39 |
40 | #: Puc/v4p1/Vcs/PluginUpdateChecker.php:83
41 | msgid "There is no changelog available."
42 | msgstr "Det finns ingen ändringslogg tillgänglig."
43 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-tr_TR.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-tr_TR.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-tr_TR.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2017-11-24 17:02+0200\n"
5 | "PO-Revision-Date: 2021-11-15 19:07+0300\n"
6 | "Language-Team: \n"
7 | "MIME-Version: 1.0\n"
8 | "Content-Type: text/plain; charset=UTF-8\n"
9 | "Content-Transfer-Encoding: 8bit\n"
10 | "X-Generator: Poedit 3.0\n"
11 | "X-Poedit-Basepath: ..\n"
12 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
13 | "X-Poedit-SourceCharset: UTF-8\n"
14 | "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
15 | "Last-Translator: Emre Erkan \n"
16 | "Language: tr\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: Puc/v4p3/Plugin/UpdateChecker.php:395
20 | msgid "Check for updates"
21 | msgstr "Güncellemeleri kontrol et"
22 |
23 | #: Puc/v4p3/Plugin/UpdateChecker.php:548
24 | #, php-format
25 | msgctxt "the plugin title"
26 | msgid "The %s plugin is up to date."
27 | msgstr "%s eklentisi güncel."
28 |
29 | #: Puc/v4p3/Plugin/UpdateChecker.php:550
30 | #, php-format
31 | msgctxt "the plugin title"
32 | msgid "A new version of the %s plugin is available."
33 | msgstr "%s eklentisinin yeni bir sürümü mevcut."
34 |
35 | #: Puc/v4p3/Plugin/UpdateChecker.php:552
36 | #, php-format
37 | msgctxt "the plugin title"
38 | msgid "Could not determine if updates are available for %s."
39 | msgstr "%s için güncelleme olup olmadığı belirlenemedi."
40 |
41 | #: Puc/v4p3/Plugin/UpdateChecker.php:558
42 | #, php-format
43 | msgid "Unknown update checker status \"%s\""
44 | msgstr "Bilinmeyen güncelleme denetleyicisi durumu \"%s\""
45 |
46 | #: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
47 | msgid "There is no changelog available."
48 | msgstr "Kullanılabilir bir değişiklik yok."
49 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-uk_UA.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-uk_UA.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-uk_UA.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2020-08-08 14:36+0300\n"
5 | "PO-Revision-Date: 2021-12-20 17:55+0200\n"
6 | "Language-Team: \n"
7 | "MIME-Version: 1.0\n"
8 | "Content-Type: text/plain; charset=UTF-8\n"
9 | "Content-Transfer-Encoding: 8bit\n"
10 | "X-Generator: Poedit 2.2\n"
11 | "X-Poedit-Basepath: ..\n"
12 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n"
13 | "X-Poedit-SourceCharset: UTF-8\n"
14 | "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
15 | "Last-Translator: \n"
16 | "Language: uk_UA\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: Puc/v4p11/Plugin/Ui.php:128
20 | msgid "Check for updates"
21 | msgstr "Перевірити оновлення"
22 |
23 | #: Puc/v4p11/Plugin/Ui.php:213
24 | #, php-format
25 | msgctxt "the plugin title"
26 | msgid "The %s plugin is up to date."
27 | msgstr "Плагін %s оновлено."
28 |
29 | #: Puc/v4p11/Plugin/Ui.php:215
30 | #, php-format
31 | msgctxt "the plugin title"
32 | msgid "A new version of the %s plugin is available."
33 | msgstr "Нова версія %s доступна."
34 |
35 | #: Puc/v4p11/Plugin/Ui.php:217
36 | #, php-format
37 | msgctxt "the plugin title"
38 | msgid "Could not determine if updates are available for %s."
39 | msgstr "Не вдалося визначити, чи доступні оновлення для %s."
40 |
41 | #: Puc/v4p11/Plugin/Ui.php:223
42 | #, php-format
43 | msgid "Unknown update checker status \"%s\""
44 | msgstr "Невідомий статус перевірки оновлень \"%s\""
45 |
46 | #: Puc/v4p11/Vcs/PluginUpdateChecker.php:98
47 | msgid "There is no changelog available."
48 | msgstr "Немає доступного журналу змін."
49 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-zh_CN.mo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/robertdevore/seo-for-wordpress/99475ef98515339f579dd8cb13e5f0f548fb4972/vendor/plugin-update-checker/languages/plugin-update-checker-zh_CN.mo
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker-zh_CN.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: plugin-update-checker\n"
4 | "POT-Creation-Date: 2022-01-29 12:09+0800\n"
5 | "PO-Revision-Date: 2022-01-29 12:10+0800\n"
6 | "Last-Translator: Seaton Jiang \n"
7 | "Language-Team: \n"
8 | "Language: zh_CN\n"
9 | "MIME-Version: 1.0\n"
10 | "Content-Type: text/plain; charset=UTF-8\n"
11 | "Content-Transfer-Encoding: 8bit\n"
12 | "X-Generator: Poedit 2.4.3\n"
13 | "X-Poedit-Basepath: ..\n"
14 | "Plural-Forms: nplurals=1; plural=0;\n"
15 | "X-Poedit-SourceCharset: UTF-8\n"
16 | "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
17 | "X-Poedit-SearchPath-0: .\n"
18 |
19 | #: Puc/v4p11/Plugin/Ui.php:54
20 | msgid "View details"
21 | msgstr "查看详情"
22 |
23 | #: Puc/v4p11/Plugin/Ui.php:77
24 | #, php-format
25 | msgid "More information about %s"
26 | msgstr "%s 的更多信息"
27 |
28 | #: Puc/v4p11/Plugin/Ui.php:128
29 | msgid "Check for updates"
30 | msgstr "检查更新"
31 |
32 | #: Puc/v4p11/Plugin/Ui.php:214
33 | #, php-format
34 | msgctxt "the plugin title"
35 | msgid "The %s plugin is up to date."
36 | msgstr "%s 目前是最新版本。"
37 |
38 | #: Puc/v4p11/Plugin/Ui.php:216
39 | #, php-format
40 | msgctxt "the plugin title"
41 | msgid "A new version of the %s plugin is available."
42 | msgstr "%s 当前有可用的更新。"
43 |
44 | #: Puc/v4p11/Plugin/Ui.php:218
45 | #, php-format
46 | msgctxt "the plugin title"
47 | msgid "Could not determine if updates are available for %s."
48 | msgstr "%s 无法确定是否有可用的更新。"
49 |
50 | #: Puc/v4p11/Plugin/Ui.php:224
51 | #, php-format
52 | msgid "Unknown update checker status \"%s\""
53 | msgstr "未知的更新检查状态:%s"
54 |
55 | #: Puc/v4p11/Vcs/PluginUpdateChecker.php:100
56 | msgid "There is no changelog available."
57 | msgstr "没有可用的更新日志。"
58 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/languages/plugin-update-checker.pot:
--------------------------------------------------------------------------------
1 | #, fuzzy
2 | msgid ""
3 | msgstr ""
4 | "Project-Id-Version: plugin-update-checker\n"
5 | "POT-Creation-Date: 2022-07-29 15:34+0300\n"
6 | "PO-Revision-Date: 2016-01-10 20:59+0100\n"
7 | "Last-Translator: \n"
8 | "Language-Team: \n"
9 | "Language: en_US\n"
10 | "MIME-Version: 1.0\n"
11 | "Content-Type: text/plain; charset=UTF-8\n"
12 | "Content-Transfer-Encoding: 8bit\n"
13 | "Plural-Forms: nplurals=2; plural=(n != 1);\n"
14 | "X-Generator: Poedit 3.1.1\n"
15 | "X-Poedit-Basepath: ..\n"
16 | "X-Poedit-SourceCharset: UTF-8\n"
17 | "X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
18 | "X-Poedit-SearchPath-0: .\n"
19 |
20 | #: Puc/v5p4/Plugin/Ui.php:128
21 | msgid "Check for updates"
22 | msgstr ""
23 |
24 | #: Puc/v5p4/Plugin/Ui.php:214
25 | #, php-format
26 | msgctxt "the plugin title"
27 | msgid "The %s plugin is up to date."
28 | msgstr ""
29 |
30 | #: Puc/v5p4/Plugin/Ui.php:216
31 | #, php-format
32 | msgctxt "the plugin title"
33 | msgid "A new version of the %s plugin is available."
34 | msgstr ""
35 |
36 | #: Puc/v5p4/Plugin/Ui.php:218
37 | #, php-format
38 | msgctxt "the plugin title"
39 | msgid "Could not determine if updates are available for %s."
40 | msgstr ""
41 |
42 | #: Puc/v5p4/Plugin/Ui.php:224
43 | #, php-format
44 | msgid "Unknown update checker status \"%s\""
45 | msgstr ""
46 |
47 | #: Puc/v5p4/Vcs/PluginUpdateChecker.php:100
48 | msgid "There is no changelog available."
49 | msgstr ""
50 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/license.txt:
--------------------------------------------------------------------------------
1 | Copyright (c) 2023 Jānis Elsts
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4 |
5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6 |
7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
8 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/load-v5p4.php:
--------------------------------------------------------------------------------
1 | Plugin\UpdateChecker::class,
18 | 'Theme\\UpdateChecker' => Theme\UpdateChecker::class,
19 |
20 | 'Vcs\\PluginUpdateChecker' => Vcs\PluginUpdateChecker::class,
21 | 'Vcs\\ThemeUpdateChecker' => Vcs\ThemeUpdateChecker::class,
22 |
23 | 'GitHubApi' => Vcs\GitHubApi::class,
24 | 'BitBucketApi' => Vcs\BitBucketApi::class,
25 | 'GitLabApi' => Vcs\GitLabApi::class,
26 | )
27 | as $pucGeneralClass => $pucVersionedClass
28 | ) {
29 | MajorFactory::addVersion($pucGeneralClass, $pucVersionedClass, '5.4');
30 | //Also add it to the minor-version factory in case the major-version factory
31 | //was already defined by another, older version of the update checker.
32 | MinorFactory::addVersion($pucGeneralClass, $pucVersionedClass, '5.4');
33 | }
34 |
35 |
--------------------------------------------------------------------------------
/vendor/plugin-update-checker/plugin-update-checker.php:
--------------------------------------------------------------------------------
1 | =7.4"
16 | },
17 | "autoload": {
18 | "psr-4": {
19 | "RobertDevore\\WPComCheck\\": "src/"
20 | }
21 | },
22 | "extra": {
23 | "wordpress-plugin": true
24 | },
25 | "keywords": [
26 | "wordpress",
27 | "plugin",
28 | "wordpress.com",
29 | "deactivation",
30 | "compatibility"
31 | ],
32 | "homepage": "https://github.com/robertdevore/wpcom-check"
33 | }
--------------------------------------------------------------------------------
/vendor/robertdevore/wpcom-check/src/WPComPluginHandler.php:
--------------------------------------------------------------------------------
1 | pluginSlug = $pluginSlug;
16 | $this->learnMoreLink = $learnMoreLink;
17 |
18 | add_action( 'plugins_loaded', [ $this, 'autoDeactivate' ] );
19 | add_action( 'admin_notices', [ $this, 'showAdminNotice' ] );
20 | register_activation_hook( __FILE__, [ $this, 'activationCheck' ] );
21 | register_deactivation_hook( __FILE__, [ $this, 'setDeactivationFlag' ] );
22 | }
23 |
24 | /**
25 | * Checks if the plugin is running in a WordPress.com environment and handles deactivation if needed.
26 | *
27 | * @return bool True if the plugin was deactivated; otherwise, false.
28 | */
29 | public function pluginCheck(): bool {
30 | if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
31 | if ( ! function_exists( 'deactivate_plugins' ) ) {
32 | require_once ABSPATH . 'wp-admin/includes/plugin.php';
33 | }
34 |
35 | if ( is_admin() ) {
36 | deactivate_plugins( $this->pluginSlug );
37 | add_option( 'wpcom_plugin_deactivation_notice', $this->learnMoreLink );
38 | return true;
39 | }
40 | }
41 |
42 | return false;
43 | }
44 |
45 | /**
46 | * Automatically deactivate the plugin if it is in an unsupported environment.
47 | *
48 | * @return void
49 | */
50 | public function autoDeactivate(): void {
51 | if ( $this->pluginCheck() ) {
52 | return;
53 | }
54 | }
55 |
56 | /**
57 | * Display an admin notice if the plugin was deactivated due to hosting restrictions.
58 | *
59 | * @return void
60 | */
61 | public function showAdminNotice(): void {
62 | $noticeLink = get_option( 'wpcom_plugin_deactivation_notice' );
63 | if ( $noticeLink ) {
64 | echo '';
65 | echo '
' . wp_kses_post(
66 | sprintf(
67 | __(
68 | 'The plugin has been deactivated because it cannot be used on WordPress.com-hosted websites. %s',
69 | 'wpcom-plugin-check'
70 | ),
71 | '' . __( 'Learn more', 'wpcom-plugin-check' ) . ''
72 | )
73 | ) . '
';
74 | echo '
';
75 | delete_option( 'wpcom_plugin_deactivation_notice' );
76 | }
77 | }
78 |
79 | /**
80 | * Prevent activation on WordPress.com-hosted sites.
81 | *
82 | * @return void
83 | */
84 | public function activationCheck(): void {
85 | if ( $this->pluginCheck() ) {
86 | wp_die(
87 | wp_kses_post(
88 | sprintf(
89 | '%s
%s
%s
',
90 | __( 'Plugin Activation Blocked', 'wpcom-plugin-check' ),
91 | __( 'This plugin cannot be activated on WordPress.com-hosted websites. It is restricted due to concerns about WordPress.com policies impacting the community.', 'wpcom-plugin-check' ),
92 | esc_url( $this->learnMoreLink ),
93 | __( 'Learn more', 'wpcom-plugin-check' )
94 | )
95 | ),
96 | esc_html__('Plugin Activation Blocked', 'wpcom-plugin-check'),
97 | [ 'back_link' => true ]
98 | );
99 | }
100 | }
101 |
102 | /**
103 | * Set a flag when the plugin is deactivated.
104 | *
105 | * @return void
106 | */
107 | public function setDeactivationFlag(): void {
108 | add_option( 'wpcom_plugin_deactivation_notice', $this->learnMoreLink );
109 | }
110 | }
111 |
112 | // Initialize the class.
113 | new WPComPluginHandler( plugin_basename( __FILE__ ), 'https://example.com/community-statement' );
114 |
--------------------------------------------------------------------------------