Version Description
- Fix : Check content of page builders: Visual composer, DIVI Builder, Beaver Builder, ACF, Site Origine, Themify builder, Live composer, Elementor plugins
- Add : Generate rich snippet breadcrumb shortcode and PHP code
- Fix : Redesign the image edition window
Download this release
Release Info
Developer | JoomUnited |
Plugin | ![]() |
Version | 3.5.0 |
Comparing to | |
See all releases |
Code changes from version 3.4.1 to 3.5.0
- css/metaseo_admin.css +9 -1
- css/style.css +9 -8
- inc/breadcrumb/class.metaseo-breadcrumb.php +514 -0
- inc/class.image-helper.php +7 -5
- inc/class.metaseo-admin.php +83 -3
- inc/class.metaseo-content-list-table.php +1 -1
- inc/class.metaseo-image-list-table.php +22 -16
- inc/class.metaseo-metabox.php +5 -2
- inc/pages/settings.php +163 -8
- js/metaseo_admin.js +44 -5
- languages/wp-meta-seo-en_US.mo +0 -0
- readme.txt +20 -6
- wp-meta-seo.php +40 -9
css/metaseo_admin.css
CHANGED
@@ -586,7 +586,7 @@ strong {
|
|
586 |
.metaseo-img-lb{
|
587 |
float:left;
|
588 |
width: 70px;
|
589 |
-
line-height:
|
590 |
}
|
591 |
|
592 |
#jutranslation{
|
@@ -677,4 +677,12 @@ span.wpms-seoImgRemove{
|
|
677 |
.image_scan_meta{
|
678 |
width: 100% !important;
|
679 |
margin-left: 0 !important;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
680 |
}
|
586 |
.metaseo-img-lb{
|
587 |
float:left;
|
588 |
width: 70px;
|
589 |
+
line-height: 30px;
|
590 |
}
|
591 |
|
592 |
#jutranslation{
|
677 |
.image_scan_meta{
|
678 |
width: 100% !important;
|
679 |
margin-left: 0 !important;
|
680 |
+
}
|
681 |
+
|
682 |
+
.tr_home_text.show{
|
683 |
+
display: table-row;
|
684 |
+
}
|
685 |
+
|
686 |
+
.tr_home_text.hide{
|
687 |
+
display: none;
|
688 |
}
|
css/style.css
CHANGED
@@ -109,6 +109,14 @@ td.metaseo-action{
|
|
109 |
clear:left;
|
110 |
padding:5px;
|
111 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
112 |
.metaseo-img-wrapper div.dimension{
|
113 |
display:inline-block;padding:5px;
|
114 |
font-size:12px;color:#555;
|
@@ -148,15 +156,8 @@ table.metaseo_images td input{
|
|
148 |
max-width:100%;
|
149 |
}
|
150 |
|
151 |
-
|
152 |
float: left;
|
153 |
-
border: #CCC 1px solid;
|
154 |
-
color: #018601;
|
155 |
-
width: 70px;
|
156 |
-
font-weight: bold;
|
157 |
-
text-align: center;
|
158 |
-
padding-top: 4px;
|
159 |
-
line-height: 16px;
|
160 |
}
|
161 |
|
162 |
a.button.meta-default img {
|
109 |
clear:left;
|
110 |
padding:5px;
|
111 |
}
|
112 |
+
|
113 |
+
.metaseo-img-wrapper .metaseo-fix-meta{
|
114 |
+
height: 30px;
|
115 |
+
}
|
116 |
+
|
117 |
+
.metaseo-img-wrapper .spinner{
|
118 |
+
float: left;
|
119 |
+
}
|
120 |
.metaseo-img-wrapper div.dimension{
|
121 |
display:inline-block;padding:5px;
|
122 |
font-size:12px;color:#555;
|
156 |
max-width:100%;
|
157 |
}
|
158 |
|
159 |
+
.meta-default{
|
160 |
float: left;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
161 |
}
|
162 |
|
163 |
a.button.meta-default img {
|
inc/breadcrumb/class.metaseo-breadcrumb.php
ADDED
@@ -0,0 +1,514 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class MetaSeo_Breadcrumb
|
4 |
+
{
|
5 |
+
public $breadcrumbs = array();
|
6 |
+
public $breadcrumb_settings = array();
|
7 |
+
public $template_no_anchor;
|
8 |
+
|
9 |
+
function __construct()
|
10 |
+
{
|
11 |
+
$home_title = get_the_title( get_option('page_on_front') );
|
12 |
+
if(empty($home_title)) $home_title = get_bloginfo('title');
|
13 |
+
$this->breadcrumb_settings = array(
|
14 |
+
'separator' => ' > ',
|
15 |
+
'include_home' => 1,
|
16 |
+
'home_text_default' => 0,
|
17 |
+
'home_text' => $home_title,
|
18 |
+
'clickable' => 1,
|
19 |
+
'apost_post_root' => get_option('page_for_posts'),
|
20 |
+
'apost_page_root' => get_option('page_on_front')
|
21 |
+
);
|
22 |
+
$breadcrumb_settings = get_option('_metaseo_breadcrumbs');
|
23 |
+
if (is_array($breadcrumb_settings)) {
|
24 |
+
$this->breadcrumb_settings = array_merge($this->breadcrumb_settings, $breadcrumb_settings);
|
25 |
+
}
|
26 |
+
}
|
27 |
+
|
28 |
+
public function wpms_check_posts()
|
29 |
+
{
|
30 |
+
global $wp_query;
|
31 |
+
//For the front page, as it may also validate as a page, do it first
|
32 |
+
if (is_front_page()) {
|
33 |
+
global $current_site;
|
34 |
+
$site_name = get_option('blogname');
|
35 |
+
$this->wpms_add_breadcrumb($site_name, WPMSEO_TEMPLATE_BREADCRUMB, array('home', 'current-item'));
|
36 |
+
if (!is_main_site()) {
|
37 |
+
$site_name = get_site_option('site_name');
|
38 |
+
$template = __('<span property="itemListElement" typeof="ListItem"><a property="item" typeof="WebPage" title="Go to %title%." href="%link%" class="%type%"><span property="name">%htitle%</span></a><meta property="position" content="%position%"></span>', 'wp-meta-seo');
|
39 |
+
$this->wpms_add_breadcrumb($site_name, $template, array('main-home'), get_home_url($current_site->blog_id));
|
40 |
+
}
|
41 |
+
} else if (is_singular()) {
|
42 |
+
|
43 |
+
if (is_attachment()) {
|
44 |
+
// attachments
|
45 |
+
$this->wpms_attachment();
|
46 |
+
} else {
|
47 |
+
// other post types
|
48 |
+
$this->wpms_post(get_post());
|
49 |
+
}
|
50 |
+
} else if (is_search()) {
|
51 |
+
$this->wpms_search();
|
52 |
+
} else if (is_author()) {
|
53 |
+
$this->wpms_author();
|
54 |
+
} else if (is_archive()) {
|
55 |
+
$type = $wp_query->get_queried_object();
|
56 |
+
$type_str = get_query_var('post_type');
|
57 |
+
if (is_array($type_str)) {
|
58 |
+
$type_str = reset($type_str);
|
59 |
+
}
|
60 |
+
//For date based archives
|
61 |
+
if (is_date()) {
|
62 |
+
$this->wpms_archive_by_date($this->wpms_get_type());
|
63 |
+
} else if (is_post_type_archive() && !isset($type->taxonomy) && (!is_numeric($this->breadcrumb_settings['apost_' . $type_str . '_root']))) {
|
64 |
+
$this->wpms_archive_by_post_type();
|
65 |
+
} else if (is_category() || is_tag() || is_tax()) {
|
66 |
+
$this->wpms_archive_by_term();
|
67 |
+
}
|
68 |
+
} else if (is_404()) {
|
69 |
+
$this->wpms_add_breadcrumb('404', WPMSEO_TEMPLATE_BREADCRUMB, array('404', 'current-item'));
|
70 |
+
} else {
|
71 |
+
$type = $wp_query->get_queried_object();
|
72 |
+
if (isset($type->taxonomy)) {
|
73 |
+
$this->wpms_archive_by_term();
|
74 |
+
}
|
75 |
+
}
|
76 |
+
// home
|
77 |
+
if (!is_front_page()) {
|
78 |
+
if(!empty($this->breadcrumb_settings['include_home'])){
|
79 |
+
$this->wpms_home();
|
80 |
+
}
|
81 |
+
}
|
82 |
+
}
|
83 |
+
|
84 |
+
public function wpms_breadcrumb_display($return = false, $reverse = false)
|
85 |
+
{
|
86 |
+
// order breadcrumb
|
87 |
+
if ($reverse) {
|
88 |
+
ksort($this->breadcrumbs);
|
89 |
+
} else {
|
90 |
+
krsort($this->breadcrumbs);
|
91 |
+
}
|
92 |
+
|
93 |
+
$html = '';
|
94 |
+
$position = 1;
|
95 |
+
//The main compiling loop
|
96 |
+
foreach ($this->breadcrumbs as $key => $breadcrumb) {
|
97 |
+
// for reverse has true
|
98 |
+
if ($reverse) {
|
99 |
+
if ($key > 0) {
|
100 |
+
$html .= $this->breadcrumb_settings['separator'];
|
101 |
+
}
|
102 |
+
} else {
|
103 |
+
if ($position > 1) {
|
104 |
+
$html .= $this->breadcrumb_settings['separator'];
|
105 |
+
}
|
106 |
+
}
|
107 |
+
|
108 |
+
$html .= $this->wpms_breadcrumb_createhtml($breadcrumb,$position);
|
109 |
+
$position++;
|
110 |
+
}
|
111 |
+
|
112 |
+
if ($return) {
|
113 |
+
return $html; // for return has true
|
114 |
+
} else {
|
115 |
+
echo $html; // for return has false
|
116 |
+
}
|
117 |
+
}
|
118 |
+
|
119 |
+
/**
|
120 |
+
* create html string
|
121 |
+
*/
|
122 |
+
public function wpms_breadcrumb_createhtml($breadcrumb, $position)
|
123 |
+
{
|
124 |
+
$params = array(
|
125 |
+
'%title%' => esc_attr(strip_tags($breadcrumb['name'])),
|
126 |
+
'%link%' => esc_url($breadcrumb['url']),
|
127 |
+
'%htitle%' => $breadcrumb['name'],
|
128 |
+
'%type%' => $breadcrumb['type'],
|
129 |
+
'%ftitle%' => esc_attr(strip_tags($breadcrumb['name'])),
|
130 |
+
'%fhtitle%' => $breadcrumb['name'],
|
131 |
+
'%position%' => $position
|
132 |
+
);
|
133 |
+
//The type may be an array, implode it if that is the case
|
134 |
+
if (is_array($params['%type%'])) {
|
135 |
+
$params['%type%'] = implode(' ', $params['%type%']);
|
136 |
+
}
|
137 |
+
|
138 |
+
if(empty($this->breadcrumb_settings['clickable'])){
|
139 |
+
return str_replace(array_keys($params), $params, $this->template_no_anchor);
|
140 |
+
}else{
|
141 |
+
if ($breadcrumb['click']) {
|
142 |
+
//Return template
|
143 |
+
return str_replace(array_keys($params), $params, $breadcrumb['template']);
|
144 |
+
} else {
|
145 |
+
//Return template
|
146 |
+
return str_replace(array_keys($params), $params, $this->template_no_anchor);
|
147 |
+
}
|
148 |
+
}
|
149 |
+
|
150 |
+
|
151 |
+
}
|
152 |
+
|
153 |
+
/**
|
154 |
+
* breadcrumb for front page
|
155 |
+
*/
|
156 |
+
public function wpms_front_page()
|
157 |
+
{
|
158 |
+
global $current_site;
|
159 |
+
$site_name = get_option('blogname');
|
160 |
+
$this->wpms_add_breadcrumb($site_name, WPMSEO_TEMPLATE_BREADCRUMB, array('home', 'current-item'));
|
161 |
+
if (!is_main_site()) {
|
162 |
+
$site_name = get_site_option('site_name');
|
163 |
+
// Add to breadcrumbs list
|
164 |
+
$template = __('<span property="itemListElement" typeof="ListItem"><a property="item" typeof="WebPage" title="Go to %title%." href="%link%" class="%type%"><span property="name">%htitle%</span></a><meta property="position" content="%position%"></span>', 'wp-meta-seo');
|
165 |
+
$this->wpms_add_breadcrumb($site_name, $template, array('main-home'), get_home_url($current_site->blog_id));
|
166 |
+
}
|
167 |
+
}
|
168 |
+
|
169 |
+
/**
|
170 |
+
* breadcrumb for posts
|
171 |
+
*/
|
172 |
+
public function wpms_post($post)
|
173 |
+
{
|
174 |
+
if (!($post instanceof WP_Post)) {
|
175 |
+
return;
|
176 |
+
}
|
177 |
+
|
178 |
+
$arrays = array(
|
179 |
+
'name' => get_the_title($post),
|
180 |
+
'template' => WPMSEO_TEMPLATE_BREADCRUMB,
|
181 |
+
'type' => array('post', 'post-' . $post->post_type, 'current-item'),
|
182 |
+
'url' => NULL,
|
183 |
+
'id' => $post->ID,
|
184 |
+
'click' => false
|
185 |
+
);
|
186 |
+
|
187 |
+
if (is_attachment()) {
|
188 |
+
$template = __('<span property="itemListElement" typeof="ListItem"><a property="item" typeof="WebPage" title="Go to %title%." href="%link%" class="%type%"><span property="name">%htitle%</span></a><meta property="position" content="%position%"></span>', 'wp-meta-seo');
|
189 |
+
$arrays['template'] = $template;
|
190 |
+
$arrays['url'] = get_permalink($post);
|
191 |
+
$arrays['click'] = true;
|
192 |
+
}
|
193 |
+
$this->breadcrumbs[] = $arrays;
|
194 |
+
if ($post->post_type === 'page') {
|
195 |
+
$frontpage = get_option('page_on_front');
|
196 |
+
if ($post->post_parent && $post->ID != $post->post_parent && $frontpage != $post->post_parent) {
|
197 |
+
|
198 |
+
$this->wpms_post_parents($post->post_parent, $frontpage);
|
199 |
+
}
|
200 |
+
} else {
|
201 |
+
$this->wpms_post_hierarchy($post->ID);
|
202 |
+
}
|
203 |
+
}
|
204 |
+
|
205 |
+
/*
|
206 |
+
* find breadcrumb of parent
|
207 |
+
*/
|
208 |
+
public function wpms_post_parents($id, $frontpage)
|
209 |
+
{
|
210 |
+
$parent = get_post($id);
|
211 |
+
// Add to breadcrumbs list
|
212 |
+
$template = __('<span property="itemListElement" typeof="ListItem"><a property="item" typeof="WebPage" title="Go to %title%." href="%link%" class="%type%"><span property="name">%htitle%</span></a><meta property="position" content="%position%"></span>', 'wp-meta-seo');
|
213 |
+
$this->wpms_add_breadcrumb(get_the_title($id), $template, array('post', 'post-' . $parent->post_type), get_permalink($id), $id);
|
214 |
+
if($parent->post_parent >= 0 && $parent->post_parent != false && $id != $parent->post_parent && $frontpage != $parent->post_parent)
|
215 |
+
{
|
216 |
+
//If valid call this function
|
217 |
+
$parent = $this->wpms_post_parents($parent->post_parent, $frontpage);
|
218 |
+
}
|
219 |
+
return $parent;
|
220 |
+
}
|
221 |
+
|
222 |
+
/**
|
223 |
+
* breadcrumb for an attachment page.
|
224 |
+
*/
|
225 |
+
public function wpms_attachment()
|
226 |
+
{
|
227 |
+
$post = get_post();
|
228 |
+
// Add to breadcrumbs list
|
229 |
+
$this->wpms_add_breadcrumb(get_the_title(), WPMSEO_TEMPLATE_BREADCRUMB, array('post', 'post-attachment', 'current-item'), NULL, $post->ID);
|
230 |
+
//Done with the current item, now on to the parents
|
231 |
+
$frontpage = get_option('page_on_front');
|
232 |
+
if ($post->post_parent >= 0 && $post->post_parent != false && $post->ID != $post->post_parent && $frontpage != $post->post_parent) {
|
233 |
+
$parent = get_post($post->post_parent);
|
234 |
+
//set the parent's breadcrumb
|
235 |
+
$this->wpms_post($parent);
|
236 |
+
}
|
237 |
+
}
|
238 |
+
|
239 |
+
/**
|
240 |
+
* breadcrumb for search
|
241 |
+
*/
|
242 |
+
public function wpms_search()
|
243 |
+
{
|
244 |
+
$template = __('<span property="itemListElement" typeof="ListItem"><span property="name">Search results for '%htitle%'</span><meta property="position" content="%position%"></span>', 'wp-meta-seo');
|
245 |
+
$this->wpms_add_breadcrumb(get_search_query(), $template, array('search', 'current-item'));
|
246 |
+
}
|
247 |
+
|
248 |
+
/**
|
249 |
+
* breadcrumb for author
|
250 |
+
*/
|
251 |
+
public function wpms_author()
|
252 |
+
{
|
253 |
+
if (get_query_var('author_name')) {
|
254 |
+
$author = get_user_by('slug', get_query_var('author_name'));
|
255 |
+
} else {
|
256 |
+
$author = get_userdata(get_query_var('author'));
|
257 |
+
}
|
258 |
+
// array author_name values
|
259 |
+
$author_name = array('display_name', 'nickname', 'first_name', 'last_name');
|
260 |
+
if (in_array('display_name', $author_name)) {
|
261 |
+
// Add to breadcrumbs list
|
262 |
+
$template = __('<span property="itemListElement" typeof="ListItem"><span property="name">Articles by: %htitle%</span><meta property="position" content="%position%"></span>', 'wp-meta-seo');
|
263 |
+
$this->wpms_add_breadcrumb(get_the_author_meta('display_name', $author->ID), $template, array('author', 'current-item'), NULL, $author->ID);
|
264 |
+
}
|
265 |
+
}
|
266 |
+
|
267 |
+
/**
|
268 |
+
* breadcrumb for an archive by post_type.
|
269 |
+
*/
|
270 |
+
public function wpms_archive_by_post_type()
|
271 |
+
{
|
272 |
+
$type = $this->wpms_get_type();
|
273 |
+
// Add to breadcrumbs list
|
274 |
+
$this->wpms_add_breadcrumb(post_type_archive_title('', false), WPMSEO_TEMPLATE_BREADCRUMB, array('archive', 'post-' . $type . '-archive', 'current-item'));
|
275 |
+
}
|
276 |
+
|
277 |
+
/**
|
278 |
+
* breadcrumb for date
|
279 |
+
*/
|
280 |
+
public function wpms_archive_by_date($type)
|
281 |
+
{
|
282 |
+
global $wp_query;
|
283 |
+
$date_template = __('<span property="itemListElement" typeof="ListItem"><a property="item" typeof="WebPage" title="Go to the %title% archives." href="%link%" class="%type%"><span property="name">%htitle%</span></a><meta property="position" content="%position%"></span>', 'wp-meta-seo');
|
284 |
+
if (is_day() || is_single()) {
|
285 |
+
$arrays = array(
|
286 |
+
'name' => get_the_time(_x('d', 'day archive breadcrumb date format', 'wp-meta-seo')),
|
287 |
+
'template' => WPMSEO_TEMPLATE_BREADCRUMB,
|
288 |
+
'type' => array('archive', 'date-day'),
|
289 |
+
);
|
290 |
+
|
291 |
+
if (is_day()) {
|
292 |
+
$arrays['type'] = 'current-item';
|
293 |
+
$arrays['url'] = NULL;
|
294 |
+
$arrays['click'] = false;
|
295 |
+
}
|
296 |
+
// if is single
|
297 |
+
if (is_single()) {
|
298 |
+
$arrays['template'] = $date_template;
|
299 |
+
$url = get_day_link(get_the_time('Y'), get_the_time('m'), get_the_time('d'));
|
300 |
+
$url = $this->wpms_add_post_type_arg($url, $type);
|
301 |
+
$arrays['url'] = $url;
|
302 |
+
$arrays['click'] = true;
|
303 |
+
}
|
304 |
+
|
305 |
+
$this->breadcrumbs[] = $arrays;
|
306 |
+
}
|
307 |
+
|
308 |
+
//Now deal with the month breadcrumb
|
309 |
+
if (is_month() || is_day() || is_single()) {
|
310 |
+
$arrays = array(
|
311 |
+
'name' => get_the_time(_x('F', 'month archive breadcrumb date format', 'wp-meta-seo')),
|
312 |
+
'template' => WPMSEO_TEMPLATE_BREADCRUMB,
|
313 |
+
'type' => array('archive', 'date-month'),
|
314 |
+
);
|
315 |
+
|
316 |
+
if (is_month()) {
|
317 |
+
$arrays['type'] = 'current-item';
|
318 |
+
$arrays['url'] = NULL;
|
319 |
+
$arrays['click'] = false;
|
320 |
+
}
|
321 |
+
|
322 |
+
if (is_day() || is_single()) {
|
323 |
+
$arrays['template'] = $date_template;
|
324 |
+
$url = get_month_link(get_the_time('Y'), get_the_time('m'));
|
325 |
+
$url = $this->wpms_add_post_type_arg($url, $type);
|
326 |
+
$arrays['url'] = $url;
|
327 |
+
$arrays['click'] = true;
|
328 |
+
}
|
329 |
+
|
330 |
+
$this->breadcrumbs[] = $arrays;
|
331 |
+
}
|
332 |
+
|
333 |
+
|
334 |
+
$arrays = array(
|
335 |
+
'name' => get_the_time(_x('Y', 'year archive breadcrumb date format', 'wp-meta-seo')),
|
336 |
+
'template' => WPMSEO_TEMPLATE_BREADCRUMB,
|
337 |
+
'type' => array('archive', 'date-year'),
|
338 |
+
);
|
339 |
+
|
340 |
+
//If this is a year archive, add current-item type
|
341 |
+
if (is_year()) {
|
342 |
+
$arrays['type'] = 'current-item';
|
343 |
+
$arrays['url'] = NULL;
|
344 |
+
$arrays['click'] = false;
|
345 |
+
}
|
346 |
+
// day or month or single
|
347 |
+
if (is_day() || is_month() || is_single()) {
|
348 |
+
//We're linking, so set the linked template
|
349 |
+
$arrays['template'] = $date_template;
|
350 |
+
$url = get_year_link(get_the_time('Y'));
|
351 |
+
$url = $this->wpms_add_post_type_arg($url, $type);
|
352 |
+
$arrays['url'] = $url;
|
353 |
+
$arrays['click'] = true;
|
354 |
+
}
|
355 |
+
|
356 |
+
$this->breadcrumbs[] = $arrays;
|
357 |
+
}
|
358 |
+
|
359 |
+
public function wpms_archive_by_term()
|
360 |
+
{
|
361 |
+
global $wp_query;
|
362 |
+
$term = $wp_query->get_queried_object();
|
363 |
+
// Add to breadcrumbs list
|
364 |
+
$template = __('<span property="itemListElement" typeof="ListItem"><a property="item" typeof="WebPage" title="Go to the %title% category archives." href="%link%" class="%type%"><span property="name">%htitle%</span></a><meta property="position" content="%position%"></span>', 'wp-meta-seo');
|
365 |
+
$this->wpms_add_breadcrumb($term->name, $template, array('archive', 'taxonomy', $term->taxonomy, 'current-item'), NULL, $term->term_id);
|
366 |
+
//Get parents of current term
|
367 |
+
if ($term->parent) {
|
368 |
+
$this->term_parents($term->parent, $term->taxonomy);
|
369 |
+
}
|
370 |
+
}
|
371 |
+
|
372 |
+
public function term_parents($id, $taxonomy)
|
373 |
+
{
|
374 |
+
//Get the current category
|
375 |
+
$term = get_term($id, $taxonomy);
|
376 |
+
// Add to breadcrumbs list
|
377 |
+
$template = __('<span property="itemListElement" typeof="ListItem"><a property="item" typeof="WebPage" title="Go to the %title% category archives." href="%link%" class="%type%"><span property="name">%htitle%</span></a><meta property="position" content="%position%"></span>', 'wp-meta-seo');
|
378 |
+
$this->wpms_add_breadcrumb($term->name, $template, array('taxonomy', $taxonomy), $this->wpms_add_post_type_arg(get_term_link($term), NULL, $taxonomy), $id);
|
379 |
+
if ($term->parent && $term->parent != $id) {
|
380 |
+
$term = $this->term_parents($term->parent, $taxonomy);
|
381 |
+
}
|
382 |
+
return $term;
|
383 |
+
}
|
384 |
+
|
385 |
+
/*
|
386 |
+
* add a enlement to lists
|
387 |
+
*/
|
388 |
+
public function wpms_add_breadcrumb($name = '', $template = '', array $type = array(), $url = '', $id = NULL , $click = true)
|
389 |
+
{
|
390 |
+
$allowed_html = wp_kses_allowed_html('post');
|
391 |
+
$tmp = __('<span property="itemListElement" typeof="ListItem"><a property="item" typeof="WebPage" title="Go to %title%." href="%link%" class="%type%"><span property="name">%htitle%</span></a><meta property="position" content="%position%"></span>', 'wp-meta-seo');
|
392 |
+
$this->template_no_anchor = WPMSEO_TEMPLATE_BREADCRUMB;
|
393 |
+
if ($template == NULL) {
|
394 |
+
$template = wp_kses($tmp,$allowed_html);
|
395 |
+
} else {
|
396 |
+
//Loose comparison, evaluates to true if URL is '' or NULL
|
397 |
+
if ($url == NULL) {
|
398 |
+
$this->template_no_anchor = wp_kses($template, $allowed_html);
|
399 |
+
$template = wp_kses($tmp,$allowed_html);
|
400 |
+
} else {
|
401 |
+
$template = wp_kses($template,$allowed_html);
|
402 |
+
}
|
403 |
+
}
|
404 |
+
|
405 |
+
// check click or not
|
406 |
+
if(empty($this->breadcrumb_settings['clickable'])){
|
407 |
+
$click = false;
|
408 |
+
}else{
|
409 |
+
if ($url == NULL) {
|
410 |
+
$click = false;
|
411 |
+
} else {
|
412 |
+
$click = true;
|
413 |
+
}
|
414 |
+
}
|
415 |
+
|
416 |
+
// add to array
|
417 |
+
$this->breadcrumbs[] = array(
|
418 |
+
'name' => $name,
|
419 |
+
'template' => $template,
|
420 |
+
'type' => $type,
|
421 |
+
'url' => $url,
|
422 |
+
'id' => $id,
|
423 |
+
'click' => $click
|
424 |
+
);
|
425 |
+
}
|
426 |
+
|
427 |
+
public function wpms_post_hierarchy($id)
|
428 |
+
{
|
429 |
+
$taxonomy = 'category';
|
430 |
+
if (is_taxonomy_hierarchical($taxonomy)) {
|
431 |
+
// Get all term of object
|
432 |
+
$wpms_object = get_the_terms($id, $taxonomy);
|
433 |
+
$potential_parent = 0;
|
434 |
+
$term = false;
|
435 |
+
// check array
|
436 |
+
if (is_array($wpms_object)) {
|
437 |
+
$wpms_use_term = key($wpms_object);
|
438 |
+
foreach ($wpms_object as $key => $object) {
|
439 |
+
if ($object->parent > 0 && ($potential_parent === 0 || $object->parent === $potential_parent)) {
|
440 |
+
$wpms_use_term = $key;
|
441 |
+
$potential_parent = $object->term_id;
|
442 |
+
}
|
443 |
+
}
|
444 |
+
$term = $wpms_object[$wpms_use_term];
|
445 |
+
}
|
446 |
+
|
447 |
+
if ($term instanceof WP_Term) {
|
448 |
+
//Fill out the term hiearchy
|
449 |
+
$parent = $this->term_parents($term->term_id, $taxonomy);
|
450 |
+
}
|
451 |
+
} else {
|
452 |
+
$this->post_terms($id, $taxonomy);
|
453 |
+
}
|
454 |
+
}
|
455 |
+
|
456 |
+
/**
|
457 |
+
* Add post type argument to the URL
|
458 |
+
*/
|
459 |
+
public function wpms_add_post_type_arg($url, $type = NULL, $taxonomy = NULL)
|
460 |
+
{
|
461 |
+
global $wp_taxonomies;
|
462 |
+
if ($type == NULL) {
|
463 |
+
$type = $this->wpms_get_type();
|
464 |
+
}
|
465 |
+
|
466 |
+
// add post_type to url
|
467 |
+
$query_arg = (!($taxonomy && $type === $wp_taxonomies[$taxonomy]->object_type[0]) && $type !== 'post');
|
468 |
+
if ($query_arg) {
|
469 |
+
$url = add_query_arg(array('post_type' => $type), $url);
|
470 |
+
}
|
471 |
+
return $url;
|
472 |
+
}
|
473 |
+
|
474 |
+
/**
|
475 |
+
* get post type
|
476 |
+
*/
|
477 |
+
public function wpms_get_type($default = 'post')
|
478 |
+
{
|
479 |
+
$type = get_query_var('post_type', $default);
|
480 |
+
if ($type === '' || is_array($type)) {
|
481 |
+
$post = get_post();
|
482 |
+
if ($post instanceof WP_Post) {
|
483 |
+
$type = $post->post_type;
|
484 |
+
} else {
|
485 |
+
$type = $default;
|
486 |
+
}
|
487 |
+
}
|
488 |
+
return esc_attr($type);
|
489 |
+
}
|
490 |
+
|
491 |
+
/**
|
492 |
+
* breadcrumb for the home page.
|
493 |
+
*/
|
494 |
+
public function wpms_home()
|
495 |
+
{
|
496 |
+
global $current_site;
|
497 |
+
//Get the site name
|
498 |
+
$site_name = get_option('blogname');
|
499 |
+
$template = __('<span property="itemListElement" typeof="ListItem"><a property="item" typeof="WebPage" title="Go to %title%." href="%link%" class="%type%"><span property="name">%htitle%</span></a><meta property="position" content="%position%"></span>', 'wp-meta-seo');
|
500 |
+
|
501 |
+
if(!empty($this->breadcrumb_settings['home_text_default'])){
|
502 |
+
$title = $this->breadcrumb_settings['home_text'];
|
503 |
+
}else{
|
504 |
+
$title = $site_name;
|
505 |
+
}
|
506 |
+
$this->wpms_add_breadcrumb($title, $template, array('home'), get_home_url());
|
507 |
+
if (!is_main_site()) {
|
508 |
+
//Get the site name
|
509 |
+
$site_name = get_site_option('site_name');
|
510 |
+
// Add to breadcrumbs list
|
511 |
+
$this->wpms_add_breadcrumb($site_name, $template, array('main-home'), get_home_url($current_site->blog_id));
|
512 |
+
}
|
513 |
+
}
|
514 |
+
}
|
inc/class.image-helper.php
CHANGED
@@ -356,9 +356,11 @@ class ImageHelper {
|
|
356 |
$list_thum_url = array();
|
357 |
$imageUrl = wp_get_attachment_url($idPost);
|
358 |
$list_thum_url[] = $imageUrl;
|
359 |
-
|
360 |
-
$
|
361 |
-
|
|
|
|
|
362 |
}
|
363 |
|
364 |
$msg = array();
|
@@ -441,7 +443,7 @@ class ImageHelper {
|
|
441 |
}
|
442 |
|
443 |
$msg[$iID]['imNotGood']['warning'] = true;
|
444 |
-
$msg[$iID]['imNotGood']['button'] = '<a href="javascript:void(0);" class=" fix-metas wpmsbtn wpmsbtn_small" data-img-name="' . $_imgs[$iID] . '" data-post-id="' . $iID . '" data-opt-key="fix_metas" onclick="showPostsList(this)">' . __('
|
445 |
|
446 |
|
447 |
update_post_meta($iID, '_metaseo_fix_metas_counter', count($post_group));
|
@@ -450,7 +452,7 @@ class ImageHelper {
|
|
450 |
|
451 |
if ($results['imNotGoodTotal'][$iID]['alt'] == 0 && $results['imNotGoodTotal'][$iID]['title'] == 0) {
|
452 |
if ($results['iNotGoodTotal'][$iID] != -1) {
|
453 |
-
$msg[$iID]['imNotGood']['button'] = '<a href="javascript:void(0);" class=" fix-metas wpmsbtn wpmsbtn_small wpmsbtn_secondary" data-img-name="' . $_imgs[$iID] . '" data-post-id="' . $iID . '" data-opt-key="fix_metas" onclick="showPostsList(this)">' . __('Edit
|
454 |
} else {
|
455 |
$msg[$iID]['imNotGood']['button'] = '';
|
456 |
}
|
356 |
$list_thum_url = array();
|
357 |
$imageUrl = wp_get_attachment_url($idPost);
|
358 |
$list_thum_url[] = $imageUrl;
|
359 |
+
if(!empty($sizes)){
|
360 |
+
foreach ($sizes as $key => $size){
|
361 |
+
$thum_url = wp_get_attachment_image_src($idPost,$key);
|
362 |
+
$list_thum_url[] = $thum_url[0];
|
363 |
+
}
|
364 |
}
|
365 |
|
366 |
$msg = array();
|
443 |
}
|
444 |
|
445 |
$msg[$iID]['imNotGood']['warning'] = true;
|
446 |
+
$msg[$iID]['imNotGood']['button'] = '<a href="javascript:void(0);" class=" fix-metas wpmsbtn wpmsbtn_small" data-img-name="' . $_imgs[$iID] . '" data-post-id="' . $iID . '" data-opt-key="fix_metas" onclick="showPostsList(this)" alt="'.__('This image has been detected in your content, edit information here…','wp-meta-seo').'">' . __('Edit meta in content', 'wp-meta-seo') . '<span class="spinner-light"></span></a>';
|
447 |
|
448 |
|
449 |
update_post_meta($iID, '_metaseo_fix_metas_counter', count($post_group));
|
452 |
|
453 |
if ($results['imNotGoodTotal'][$iID]['alt'] == 0 && $results['imNotGoodTotal'][$iID]['title'] == 0) {
|
454 |
if ($results['iNotGoodTotal'][$iID] != -1) {
|
455 |
+
$msg[$iID]['imNotGood']['button'] = '<a href="javascript:void(0);" class=" fix-metas wpmsbtn wpmsbtn_small wpmsbtn_secondary" data-img-name="' . $_imgs[$iID] . '" data-post-id="' . $iID . '" data-opt-key="fix_metas" onclick="showPostsList(this)" alt="'.__('This image has been detected in your content, edit information here…','wp-meta-seo').'">' . __('Edit meta', 'wp-meta-seo') . '<span class="spinner-light"></span></a>';
|
456 |
} else {
|
457 |
$msg[$iID]['imNotGood']['button'] = '';
|
458 |
}
|
inc/class.metaseo-admin.php
CHANGED
@@ -358,6 +358,9 @@ class MetaSeo_Admin {
|
|
358 |
* Update option wpms_set_ignore
|
359 |
*/
|
360 |
function wpms_set_ignore() {
|
|
|
|
|
|
|
361 |
update_option('wpms_set_ignore', 0);
|
362 |
wp_send_json(true);
|
363 |
}
|
@@ -415,6 +418,9 @@ class MetaSeo_Admin {
|
|
415 |
* Ajax load page analysis
|
416 |
*/
|
417 |
function metaseo_reload_analysis() {
|
|
|
|
|
|
|
418 |
$tooltip_page = array();
|
419 |
$tooltip_page['title_in_heading'] = __('Check if a word of this content title is also in a title heading (h1, h2...)', 'wp-meta-seo');
|
420 |
$tooltip_page['title_in_content'] = __('Check if a word of this content title is also in the text', 'wp-meta-seo');
|
@@ -441,7 +447,8 @@ class MetaSeo_Admin {
|
|
441 |
} else {
|
442 |
$dom = new DOMDocument;
|
443 |
libxml_use_internal_errors(true);
|
444 |
-
|
|
|
445 |
// Extracting the specified elements from the web page
|
446 |
$tags_h1 = $dom->getElementsByTagName('h1');
|
447 |
$tags_h2 = $dom->getElementsByTagName('h2');
|
@@ -551,8 +558,9 @@ class MetaSeo_Admin {
|
|
551 |
}
|
552 |
|
553 |
// title content
|
|
|
554 |
$words_title = preg_split('/((^\p{P}+)|(\p{P}*\s+\p{P}*)|(\p{P}+$))/', strtolower($_POST['datas']['title']), -1, PREG_SPLIT_NO_EMPTY);
|
555 |
-
$words_post_content = preg_split('/((^\p{P}+)|(\p{P}*\s+\p{P}*)|(\p{P}+$))/', strtolower(strip_tags($
|
556 |
|
557 |
$test1 = false;
|
558 |
if (is_array($words_title) && is_array($words_post_content)) {
|
@@ -606,7 +614,8 @@ class MetaSeo_Admin {
|
|
606 |
} else {
|
607 |
$dom = new DOMDocument;
|
608 |
libxml_use_internal_errors(true);
|
609 |
-
|
|
|
610 |
// Extracting the specified elements from the web page
|
611 |
$tags = $dom->getElementsByTagName('img');
|
612 |
$img_wrong = false;
|
@@ -657,6 +666,9 @@ class MetaSeo_Admin {
|
|
657 |
* validate propertyin page optimization
|
658 |
*/
|
659 |
function metaseo_validate_analysis() {
|
|
|
|
|
|
|
660 |
$post_id = $_POST['post_id'];
|
661 |
$key = 'wpms_validate_analysis';
|
662 |
$analysis = get_post_meta($post_id, $key, true);
|
@@ -673,6 +685,9 @@ class MetaSeo_Admin {
|
|
673 |
* Ajax update link meta title and content editor
|
674 |
*/
|
675 |
function metaseo_update_link() {
|
|
|
|
|
|
|
676 |
if (isset($_POST['link_id'])) {
|
677 |
global $wpdb;
|
678 |
$sql = $wpdb->prepare("SELECT * FROM " . $wpdb->prefix . "wpms_links WHERE id=%d", array($_POST['link_id']));
|
@@ -706,6 +721,9 @@ class MetaSeo_Admin {
|
|
706 |
* Ajax update meta index for page
|
707 |
*/
|
708 |
function metaseo_update_pageindex() {
|
|
|
|
|
|
|
709 |
if (isset($_POST['page_id']) && isset($_POST['index'])) {
|
710 |
update_post_meta($_POST['page_id'], '_metaseo_metaindex', $_POST['index']);
|
711 |
wp_send_json(array('status' => true));
|
@@ -717,6 +735,9 @@ class MetaSeo_Admin {
|
|
717 |
* Ajax update meta follow for page
|
718 |
*/
|
719 |
function metaseo_update_pagefollow() {
|
|
|
|
|
|
|
720 |
if (isset($_POST['page_id']) && isset($_POST['follow'])) {
|
721 |
update_post_meta($_POST['page_id'], '_metaseo_metafollow', $_POST['follow']);
|
722 |
wp_send_json(array('status' => true));
|
@@ -728,6 +749,9 @@ class MetaSeo_Admin {
|
|
728 |
* Ajax update meta follow for link
|
729 |
*/
|
730 |
function metaseo_update_follow() {
|
|
|
|
|
|
|
731 |
if (isset($_POST['link_id'])) {
|
732 |
$this->update_follow($_POST['link_id'], $_POST['follow']);
|
733 |
wp_send_json(array('status' => true));
|
@@ -739,6 +763,9 @@ class MetaSeo_Admin {
|
|
739 |
* Ajax update multitle meta follow for link
|
740 |
*/
|
741 |
function metaseo_update_multiplefollow() {
|
|
|
|
|
|
|
742 |
global $wpdb;
|
743 |
$follow_value = $_POST['follow_value'];
|
744 |
$limit = 20;
|
@@ -852,6 +879,10 @@ class MetaSeo_Admin {
|
|
852 |
* Update option wpms_settings_404
|
853 |
*/
|
854 |
function wpms_save_settings404() {
|
|
|
|
|
|
|
|
|
855 |
if (isset($_POST['wpms_redirect'])) {
|
856 |
update_option('wpms_settings_404', $_POST['wpms_redirect']);
|
857 |
|
@@ -875,6 +906,26 @@ class MetaSeo_Admin {
|
|
875 |
wp_send_json(true);
|
876 |
}
|
877 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
878 |
/*
|
879 |
* Add a new field to a section of a settings page
|
880 |
*/
|
@@ -1112,6 +1163,9 @@ class MetaSeo_Admin {
|
|
1112 |
* Update meta title , meta description , meta keyword for content
|
1113 |
*/
|
1114 |
function updateContentMeta_callback() {
|
|
|
|
|
|
|
1115 |
global $wpdb;
|
1116 |
$_POST = stripslashes_deep($_POST);
|
1117 |
$response = new stdClass();
|
@@ -1720,6 +1774,31 @@ class MetaSeo_Admin {
|
|
1720 |
require_once( WPMETASEO_PLUGIN_DIR . 'inc/pages/metaseo-broken-link.php' );
|
1721 |
break;
|
1722 |
case 'metaseo_settings':
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1723 |
// email settings
|
1724 |
$email_settings = array(
|
1725 |
"enable" => 0,
|
@@ -2024,6 +2103,7 @@ class MetaSeo_Admin {
|
|
2024 |
add_action('wp_ajax_metaseo_validate_analysis', array($this, 'metaseo_validate_analysis'));
|
2025 |
add_action('wp_ajax_metaseo_update_link', array($this, 'metaseo_update_link'));
|
2026 |
add_action('wp_ajax_wpms_save_settings404', array($this, 'wpms_save_settings404'));
|
|
|
2027 |
add_action('wp_ajax_wpms_update_link', array('MetaSeo_Broken_Link_Table', 'wpms_update_link'));
|
2028 |
add_action('wp_ajax_wpms_add_custom_redirect', array('MetaSeo_Broken_Link_Table', 'wpms_add_custom_redirect'));
|
2029 |
add_action('wp_ajax_wpms_unlink', array('MetaSeo_Broken_Link_Table', 'wpms_unlink'));
|
358 |
* Update option wpms_set_ignore
|
359 |
*/
|
360 |
function wpms_set_ignore() {
|
361 |
+
if (!current_user_can('manage_options')) {
|
362 |
+
wp_send_json(false);
|
363 |
+
}
|
364 |
update_option('wpms_set_ignore', 0);
|
365 |
wp_send_json(true);
|
366 |
}
|
418 |
* Ajax load page analysis
|
419 |
*/
|
420 |
function metaseo_reload_analysis() {
|
421 |
+
if (!current_user_can('manage_options')) {
|
422 |
+
wp_send_json(array('status' => false));
|
423 |
+
}
|
424 |
$tooltip_page = array();
|
425 |
$tooltip_page['title_in_heading'] = __('Check if a word of this content title is also in a title heading (h1, h2...)', 'wp-meta-seo');
|
426 |
$tooltip_page['title_in_content'] = __('Check if a word of this content title is also in the text', 'wp-meta-seo');
|
447 |
} else {
|
448 |
$dom = new DOMDocument;
|
449 |
libxml_use_internal_errors(true);
|
450 |
+
$content = apply_filters('the_content', '<div>' . html_entity_decode(stripcslashes($_POST['datas']['content'])) . '</div>');
|
451 |
+
if ($dom->loadHTML($content)) {
|
452 |
// Extracting the specified elements from the web page
|
453 |
$tags_h1 = $dom->getElementsByTagName('h1');
|
454 |
$tags_h2 = $dom->getElementsByTagName('h2');
|
558 |
}
|
559 |
|
560 |
// title content
|
561 |
+
$content = apply_filters('the_content', html_entity_decode(stripcslashes($_POST['datas']['content'])));
|
562 |
$words_title = preg_split('/((^\p{P}+)|(\p{P}*\s+\p{P}*)|(\p{P}+$))/', strtolower($_POST['datas']['title']), -1, PREG_SPLIT_NO_EMPTY);
|
563 |
+
$words_post_content = preg_split('/((^\p{P}+)|(\p{P}*\s+\p{P}*)|(\p{P}+$))/', strtolower(strip_tags($content)), -1, PREG_SPLIT_NO_EMPTY);
|
564 |
|
565 |
$test1 = false;
|
566 |
if (is_array($words_title) && is_array($words_post_content)) {
|
614 |
} else {
|
615 |
$dom = new DOMDocument;
|
616 |
libxml_use_internal_errors(true);
|
617 |
+
$content = apply_filters('the_content', html_entity_decode(stripcslashes($_POST['datas']['content'])));
|
618 |
+
if ($dom->loadHTML($content)) {
|
619 |
// Extracting the specified elements from the web page
|
620 |
$tags = $dom->getElementsByTagName('img');
|
621 |
$img_wrong = false;
|
666 |
* validate propertyin page optimization
|
667 |
*/
|
668 |
function metaseo_validate_analysis() {
|
669 |
+
if (!current_user_can('manage_options')) {
|
670 |
+
wp_send_json(false);
|
671 |
+
}
|
672 |
$post_id = $_POST['post_id'];
|
673 |
$key = 'wpms_validate_analysis';
|
674 |
$analysis = get_post_meta($post_id, $key, true);
|
685 |
* Ajax update link meta title and content editor
|
686 |
*/
|
687 |
function metaseo_update_link() {
|
688 |
+
if (!current_user_can('manage_options')) {
|
689 |
+
wp_send_json(false);
|
690 |
+
}
|
691 |
if (isset($_POST['link_id'])) {
|
692 |
global $wpdb;
|
693 |
$sql = $wpdb->prepare("SELECT * FROM " . $wpdb->prefix . "wpms_links WHERE id=%d", array($_POST['link_id']));
|
721 |
* Ajax update meta index for page
|
722 |
*/
|
723 |
function metaseo_update_pageindex() {
|
724 |
+
if (!current_user_can('manage_options')) {
|
725 |
+
wp_send_json(array('status' => false));
|
726 |
+
}
|
727 |
if (isset($_POST['page_id']) && isset($_POST['index'])) {
|
728 |
update_post_meta($_POST['page_id'], '_metaseo_metaindex', $_POST['index']);
|
729 |
wp_send_json(array('status' => true));
|
735 |
* Ajax update meta follow for page
|
736 |
*/
|
737 |
function metaseo_update_pagefollow() {
|
738 |
+
if (!current_user_can('manage_options')) {
|
739 |
+
wp_send_json(array('status' => false));
|
740 |
+
}
|
741 |
if (isset($_POST['page_id']) && isset($_POST['follow'])) {
|
742 |
update_post_meta($_POST['page_id'], '_metaseo_metafollow', $_POST['follow']);
|
743 |
wp_send_json(array('status' => true));
|
749 |
* Ajax update meta follow for link
|
750 |
*/
|
751 |
function metaseo_update_follow() {
|
752 |
+
if (!current_user_can('manage_options')) {
|
753 |
+
wp_send_json(array('status' => false));
|
754 |
+
}
|
755 |
if (isset($_POST['link_id'])) {
|
756 |
$this->update_follow($_POST['link_id'], $_POST['follow']);
|
757 |
wp_send_json(array('status' => true));
|
763 |
* Ajax update multitle meta follow for link
|
764 |
*/
|
765 |
function metaseo_update_multiplefollow() {
|
766 |
+
if (!current_user_can('manage_options')) {
|
767 |
+
wp_send_json(array('status' => false));
|
768 |
+
}
|
769 |
global $wpdb;
|
770 |
$follow_value = $_POST['follow_value'];
|
771 |
$limit = 20;
|
879 |
* Update option wpms_settings_404
|
880 |
*/
|
881 |
function wpms_save_settings404() {
|
882 |
+
if (!current_user_can('manage_options')) {
|
883 |
+
wp_send_json(false);
|
884 |
+
}
|
885 |
+
|
886 |
if (isset($_POST['wpms_redirect'])) {
|
887 |
update_option('wpms_settings_404', $_POST['wpms_redirect']);
|
888 |
|
906 |
wp_send_json(true);
|
907 |
}
|
908 |
|
909 |
+
/*
|
910 |
+
* Update breadcrumb settings
|
911 |
+
*/
|
912 |
+
function wpms_save_settings_breadcrumb() {
|
913 |
+
if (!current_user_can('manage_options')) {
|
914 |
+
wp_send_json(false);
|
915 |
+
}
|
916 |
+
|
917 |
+
$params = array('separator','include_home','home_text','clickable','home_text_default');
|
918 |
+
$settinglink = array();
|
919 |
+
foreach ($params as $param){
|
920 |
+
if(isset($_POST[$param])){
|
921 |
+
$settinglink[$param] = $_POST[$param];
|
922 |
+
}
|
923 |
+
}
|
924 |
+
|
925 |
+
update_option('_metaseo_breadcrumbs',$settinglink);
|
926 |
+
wp_send_json(true);
|
927 |
+
}
|
928 |
+
|
929 |
/*
|
930 |
* Add a new field to a section of a settings page
|
931 |
*/
|
1163 |
* Update meta title , meta description , meta keyword for content
|
1164 |
*/
|
1165 |
function updateContentMeta_callback() {
|
1166 |
+
if (!current_user_can('manage_options')) {
|
1167 |
+
wp_send_json(array('status' => false));
|
1168 |
+
}
|
1169 |
global $wpdb;
|
1170 |
$_POST = stripslashes_deep($_POST);
|
1171 |
$response = new stdClass();
|
1774 |
require_once( WPMETASEO_PLUGIN_DIR . 'inc/pages/metaseo-broken-link.php' );
|
1775 |
break;
|
1776 |
case 'metaseo_settings':
|
1777 |
+
$posts = get_posts(array('post_type' => 'page', 'posts_per_page' => -1, 'numberposts' => -1));
|
1778 |
+
$types_404 = array('none' => 'None', 'wp-meta-seo-page' => __('WP Meta SEO page', 'wp-meta-seo'), 'custom_page' => __('Custom page', 'wp-meta-seo'));
|
1779 |
+
|
1780 |
+
// get settings 404
|
1781 |
+
$defaul_settings_404 = array('wpms_redirect_homepage' => 0, 'wpms_type_404' => 'none', 'wpms_page_redirected' => 'none');
|
1782 |
+
$wpms_settings_404 = get_option('wpms_settings_404');
|
1783 |
+
if (is_array($wpms_settings_404)) {
|
1784 |
+
$defaul_settings_404 = array_merge($defaul_settings_404, $wpms_settings_404);
|
1785 |
+
}
|
1786 |
+
|
1787 |
+
// get settings breadcrumb
|
1788 |
+
$home_title = get_the_title( get_option('page_on_front') );
|
1789 |
+
if(empty($home_title)) $home_title = get_bloginfo('title');
|
1790 |
+
$breadcrumbs = array(
|
1791 |
+
'separator' => ' > ',
|
1792 |
+
'include_home' => 1,
|
1793 |
+
'home_text' => $home_title,
|
1794 |
+
'home_text_default' => 0,
|
1795 |
+
'clickable' => 1
|
1796 |
+
);
|
1797 |
+
$breadcrumb_settings = get_option('_metaseo_breadcrumbs');
|
1798 |
+
if (is_array($breadcrumb_settings)) {
|
1799 |
+
$breadcrumbs = array_merge($breadcrumbs, $breadcrumb_settings);
|
1800 |
+
}
|
1801 |
+
|
1802 |
// email settings
|
1803 |
$email_settings = array(
|
1804 |
"enable" => 0,
|
2103 |
add_action('wp_ajax_metaseo_validate_analysis', array($this, 'metaseo_validate_analysis'));
|
2104 |
add_action('wp_ajax_metaseo_update_link', array($this, 'metaseo_update_link'));
|
2105 |
add_action('wp_ajax_wpms_save_settings404', array($this, 'wpms_save_settings404'));
|
2106 |
+
add_action('wp_ajax_wpms_save_settings_breadcrumb', array($this, 'wpms_save_settings_breadcrumb'));
|
2107 |
add_action('wp_ajax_wpms_update_link', array('MetaSeo_Broken_Link_Table', 'wpms_update_link'));
|
2108 |
add_action('wp_ajax_wpms_add_custom_redirect', array('MetaSeo_Broken_Link_Table', 'wpms_add_custom_redirect'));
|
2109 |
add_action('wp_ajax_wpms_unlink', array('MetaSeo_Broken_Link_Table', 'wpms_unlink'));
|
inc/class.metaseo-content-list-table.php
CHANGED
@@ -425,7 +425,7 @@ class MetaSeo_Content_List_Table extends WP_List_Table {
|
|
425 |
|
426 |
echo '<p id="snippet_desc' . $rec->ID . '" class="snippet_metades">' . $rec->metadesc . '</p></div>';
|
427 |
echo '<img class="wpms_loader' . $rec->ID . ' wpms_content_loader" src=' . WPMETASEO_PLUGIN_URL . 'img/update_loading.gif>';
|
428 |
-
echo '<span id="savedInfo' . $rec->ID . '" style="position: relative; display: block;float:right" class="saved-info metaseo-msg-success"><span style="position:absolute; float:right" class="
|
429 |
echo '</div></td>';
|
430 |
break;
|
431 |
case 'col_page_slug':
|
425 |
|
426 |
echo '<p id="snippet_desc' . $rec->ID . '" class="snippet_metades">' . $rec->metadesc . '</p></div>';
|
427 |
echo '<img class="wpms_loader' . $rec->ID . ' wpms_content_loader" src=' . WPMETASEO_PLUGIN_URL . 'img/update_loading.gif>';
|
428 |
+
echo '<span id="savedInfo' . $rec->ID . '" style="position: relative; display: block;float:right" class="saved-info metaseo-msg-success"><span style="position:absolute; float:right" class="spinner"></span></span>';
|
429 |
echo '</div></td>';
|
430 |
break;
|
431 |
case 'col_page_slug':
|
inc/class.metaseo-image-list-table.php
CHANGED
@@ -553,7 +553,7 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
|
|
553 |
$info .= '<p>' . $img_width . 'x' . $img_height . '</p>';
|
554 |
$info .= '<p>' . $img_date . '</p>';
|
555 |
$info .= '<span class="saved-info" style="position:relative">
|
556 |
-
<span class="
|
557 |
</span>';
|
558 |
$info .= '</div>';
|
559 |
echo sprintf('<td %2$s colspan="4">%1$s</td>', $info, $attributes);
|
@@ -578,7 +578,7 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
|
|
578 |
case 'col_image_alternative':
|
579 |
$input = ("<textarea name='img_alternative[$rec->ID]' class='metaseo-img-meta' data-meta-type='alt_text' id='img-alt-$rec->ID' data-post-id='$rec->ID' rows='2'>" . esc_attr($rec->alt) . "</textarea>");
|
580 |
$input .= ('<span class="saved-info" style="position:relative">
|
581 |
-
<span class="
|
582 |
</span>');
|
583 |
echo sprintf('<td %2$s colspan="3">%1$s</td>', $input, $attributes);
|
584 |
break;
|
@@ -586,7 +586,7 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
|
|
586 |
case 'col_image_title':
|
587 |
$input = ("<textarea name='img_title[$rec->ID]' class='metaseo-img-meta' data-meta-type='image_title' id='img-title-$rec->ID' data-post-id='$rec->ID' rows='2'>" . esc_attr($rec->title) . "</textarea>");
|
588 |
$input .= ('<span class="saved-info" style="position:relative">
|
589 |
-
<span class="
|
590 |
</span>');
|
591 |
echo sprintf('<td %2$s colspan="3">%1$s</td>', $input, $attributes);
|
592 |
break;
|
@@ -594,7 +594,7 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
|
|
594 |
case 'col_image_legend':
|
595 |
$input = ("<textarea name='img_legend[$rec->ID]' class='metaseo-img-meta' data-meta-type='image_caption' id='img-legend-$rec->ID' data-post-id='$rec->ID' rows='2'>" . esc_attr($rec->legend) . "</textarea>");
|
596 |
$input .= ('<span class="saved-info" style="position:relative">
|
597 |
-
<span class="
|
598 |
</span>');
|
599 |
echo sprintf('<td %2$s colspan="3">%1$s</td>', $input, $attributes);
|
600 |
break;
|
@@ -602,7 +602,7 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
|
|
602 |
case 'col_image_desc':
|
603 |
$input = ("<textarea name='img_desc[$rec->ID]' class='metaseo-img-meta' data-meta-type='image_description' id='img-desc-$rec->ID' data-post-id='$rec->ID' rows='2'>" . esc_attr($rec->des) . "</textarea>");
|
604 |
$input .= ('<span class="saved-info" style="position:relative">
|
605 |
-
<span class="
|
606 |
</span>');
|
607 |
echo sprintf('<td %2$s colspan="3">%1$s</td>', $input, $attributes);
|
608 |
break;
|
@@ -736,11 +736,11 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
|
|
736 |
<input type="text" value="<?php echo esc_attr($value) ?>" id="metaseo-img-<?php echo $type . '-' . $post['ID'] ?>" class="metaseo-fix-meta metaseo-img-<?php echo $type ?>" data-meta-key="_metaseo_fix_metas" data-post-id="<?php echo $post['ID'] ?>" data-img-post-id="<?php echo $img_post_id ?>" data-meta-type="<?php echo $type ?>" data-meta-order="<?php echo $k ?>" data-file-name="<?php echo $file_name; ?>" placeholder="<?php echo ($value == '' ? __(ucfirst($type) . ' is empty', 'wp-meta-seo') : '') ?>" onfocus="metaseo_fix_meta(this);" onblur="updateInputBlur(this)" onkeydown="return checkeyCode(event, this)" />
|
737 |
</div>
|
738 |
|
739 |
-
<span class="meta-update"></span>
|
740 |
<?php if (trim($$type) != '' && trim($$type) != $value): ?>
|
741 |
-
<a class="
|
742 |
<span class="img_seo_type"><?php echo $$type; ?></span>
|
743 |
<?php endif ?>
|
|
|
744 |
</div>
|
745 |
<?php endforeach ?>
|
746 |
<span class="saved-info"></span>
|
@@ -762,7 +762,7 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
|
|
762 |
*/
|
763 |
private static function display_resize_image_list($img_post_id, $posts, $img_counter, $p, $im) {
|
764 |
|
765 |
-
$header =
|
766 |
?>
|
767 |
<h3 class="content-header"><?php echo $header ?></h3>
|
768 |
<div class="content-box">
|
@@ -792,7 +792,11 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
|
|
792 |
<div class="metaseo-img">
|
793 |
<img width="<?php echo @$src['width']; ?>" height="<?php #echo @$src['height'] ; ?>" src="<?php echo $src['src'] ?>" />
|
794 |
<div class="img-choosen">
|
795 |
-
|
|
|
|
|
|
|
|
|
796 |
</div>
|
797 |
<p class="metaseo-msg"></p>
|
798 |
</div>
|
@@ -805,7 +809,7 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
|
|
805 |
<?php endforeach ?>
|
806 |
</td>
|
807 |
<td colspan="2" class="metaseo-action">
|
808 |
-
<a href="javascript:void(0);" class="metaseo-optimize
|
809 |
<span class="optimizing spinner"></span>
|
810 |
</td>
|
811 |
<td colspan="4">
|
@@ -828,7 +832,7 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
|
|
828 |
<tr class="metaseo-border-top">
|
829 |
<td colspan="8"></td>
|
830 |
<td colspan="2">
|
831 |
-
<a href="javascript:void(0);" id="metaseo-replace-all" class="
|
832 |
<?php echo __('Replace All', 'wp-meta-seo') ?>
|
833 |
</a>
|
834 |
<span class="optimizing spinner"></span>
|
@@ -1696,11 +1700,13 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
|
|
1696 |
if ( $query->have_posts() ) {
|
1697 |
foreach ( $query->posts as $post_id ) {
|
1698 |
$meta = wp_get_attachment_metadata( $post_id );
|
1699 |
-
$
|
1700 |
-
|
1701 |
-
|
1702 |
-
$
|
1703 |
-
|
|
|
|
|
1704 |
}
|
1705 |
}
|
1706 |
}
|
553 |
$info .= '<p>' . $img_width . 'x' . $img_height . '</p>';
|
554 |
$info .= '<p>' . $img_date . '</p>';
|
555 |
$info .= '<span class="saved-info" style="position:relative">
|
556 |
+
<span class="spinner"></span>
|
557 |
</span>';
|
558 |
$info .= '</div>';
|
559 |
echo sprintf('<td %2$s colspan="4">%1$s</td>', $info, $attributes);
|
578 |
case 'col_image_alternative':
|
579 |
$input = ("<textarea name='img_alternative[$rec->ID]' class='metaseo-img-meta' data-meta-type='alt_text' id='img-alt-$rec->ID' data-post-id='$rec->ID' rows='2'>" . esc_attr($rec->alt) . "</textarea>");
|
580 |
$input .= ('<span class="saved-info" style="position:relative">
|
581 |
+
<span class="spinner"></span>
|
582 |
</span>');
|
583 |
echo sprintf('<td %2$s colspan="3">%1$s</td>', $input, $attributes);
|
584 |
break;
|
586 |
case 'col_image_title':
|
587 |
$input = ("<textarea name='img_title[$rec->ID]' class='metaseo-img-meta' data-meta-type='image_title' id='img-title-$rec->ID' data-post-id='$rec->ID' rows='2'>" . esc_attr($rec->title) . "</textarea>");
|
588 |
$input .= ('<span class="saved-info" style="position:relative">
|
589 |
+
<span class="spinner"></span>
|
590 |
</span>');
|
591 |
echo sprintf('<td %2$s colspan="3">%1$s</td>', $input, $attributes);
|
592 |
break;
|
594 |
case 'col_image_legend':
|
595 |
$input = ("<textarea name='img_legend[$rec->ID]' class='metaseo-img-meta' data-meta-type='image_caption' id='img-legend-$rec->ID' data-post-id='$rec->ID' rows='2'>" . esc_attr($rec->legend) . "</textarea>");
|
596 |
$input .= ('<span class="saved-info" style="position:relative">
|
597 |
+
<span class="spinner"></span>
|
598 |
</span>');
|
599 |
echo sprintf('<td %2$s colspan="3">%1$s</td>', $input, $attributes);
|
600 |
break;
|
602 |
case 'col_image_desc':
|
603 |
$input = ("<textarea name='img_desc[$rec->ID]' class='metaseo-img-meta' data-meta-type='image_description' id='img-desc-$rec->ID' data-post-id='$rec->ID' rows='2'>" . esc_attr($rec->des) . "</textarea>");
|
604 |
$input .= ('<span class="saved-info" style="position:relative">
|
605 |
+
<span class="spinner"></span>
|
606 |
</span>');
|
607 |
echo sprintf('<td %2$s colspan="3">%1$s</td>', $input, $attributes);
|
608 |
break;
|
736 |
<input type="text" value="<?php echo esc_attr($value) ?>" id="metaseo-img-<?php echo $type . '-' . $post['ID'] ?>" class="metaseo-fix-meta metaseo-img-<?php echo $type ?>" data-meta-key="_metaseo_fix_metas" data-post-id="<?php echo $post['ID'] ?>" data-img-post-id="<?php echo $img_post_id ?>" data-meta-type="<?php echo $type ?>" data-meta-order="<?php echo $k ?>" data-file-name="<?php echo $file_name; ?>" placeholder="<?php echo ($value == '' ? __(ucfirst($type) . ' is empty', 'wp-meta-seo') : '') ?>" onfocus="metaseo_fix_meta(this);" onblur="updateInputBlur(this)" onkeydown="return checkeyCode(event, this)" />
|
737 |
</div>
|
738 |
|
|
|
739 |
<?php if (trim($$type) != '' && trim($$type) != $value): ?>
|
740 |
+
<a class="meta-default wpmsbtn wpmsbtn_small" href="#" data-default-value="<?php echo esc_attr($$type) ?>" title="Add to input box" onclick="add_meta_default(this)"><?php _e('Copy ','wp-meta-seo'); echo $lb ?></a>
|
741 |
<span class="img_seo_type"><?php echo $$type; ?></span>
|
742 |
<?php endif ?>
|
743 |
+
<span class="spinner"></span>
|
744 |
</div>
|
745 |
<?php endforeach ?>
|
746 |
<span class="saved-info"></span>
|
762 |
*/
|
763 |
private static function display_resize_image_list($img_post_id, $posts, $img_counter, $p, $im) {
|
764 |
|
765 |
+
$header = __('We found some images you can resize...', 'wp-meta-seo');
|
766 |
?>
|
767 |
<h3 class="content-header"><?php echo $header ?></h3>
|
768 |
<div class="content-box">
|
792 |
<div class="metaseo-img">
|
793 |
<img width="<?php echo @$src['width']; ?>" height="<?php #echo @$src['height'] ; ?>" src="<?php echo $src['src'] ?>" />
|
794 |
<div class="img-choosen">
|
795 |
+
|
796 |
+
<div class="pure-checkbox">
|
797 |
+
<input id="checkin-<?php echo $post['ID'] ?>" checked type="checkbox" class="metaseo-checkin checkin-<?php echo $post['ID'] ?>" value="<?php echo $key ?>" id="checkin-<?php echo $post['ID'] . '-' . $key ?>" onclick="uncheck(this)">
|
798 |
+
<label for="checkin-<?php echo $post['ID'] ?>"></label>
|
799 |
+
</div>
|
800 |
</div>
|
801 |
<p class="metaseo-msg"></p>
|
802 |
</div>
|
809 |
<?php endforeach ?>
|
810 |
</td>
|
811 |
<td colspan="2" class="metaseo-action">
|
812 |
+
<a href="javascript:void(0);" class="metaseo-optimize wpmsbtn wpmsbtn_small wpmsbtn_secondary" data-img-post-id="<?php echo $img_post_id ?>" data-post-id="<?php echo $post['ID'] ?>" onclick="optimize_imgs(this)"><?php echo __('Replace?', 'wp-meta-seo') ?></a>
|
813 |
<span class="optimizing spinner"></span>
|
814 |
</td>
|
815 |
<td colspan="4">
|
832 |
<tr class="metaseo-border-top">
|
833 |
<td colspan="8"></td>
|
834 |
<td colspan="2">
|
835 |
+
<a href="javascript:void(0);" id="metaseo-replace-all" class="wpmsbtn wpmsbtn_small" onclick="optimize_imgs_group(this)">
|
836 |
<?php echo __('Replace All', 'wp-meta-seo') ?>
|
837 |
</a>
|
838 |
<span class="optimizing spinner"></span>
|
1700 |
if ( $query->have_posts() ) {
|
1701 |
foreach ( $query->posts as $post_id ) {
|
1702 |
$meta = wp_get_attachment_metadata( $post_id );
|
1703 |
+
if(!empty($meta['file']) && !empty($meta['sizes'])){
|
1704 |
+
$original_file = basename( $meta['file'] );
|
1705 |
+
$cropped_image_files = wp_list_pluck( $meta['sizes'], 'file' );
|
1706 |
+
if ( $original_file === $file || in_array( $file, $cropped_image_files ) ) {
|
1707 |
+
$attachment_id = $post_id;
|
1708 |
+
break;
|
1709 |
+
}
|
1710 |
}
|
1711 |
}
|
1712 |
}
|
inc/class.metaseo-metabox.php
CHANGED
@@ -422,7 +422,8 @@ class WPMSEO_Metabox extends WPMSEO_Meta {
|
|
422 |
}
|
423 |
$dom = new DOMDocument;
|
424 |
libxml_use_internal_errors(true);
|
425 |
-
|
|
|
426 |
// Extracting the specified elements from the web page
|
427 |
$tags_h1 = $dom->getElementsByTagName('h1');
|
428 |
$tags_h2 = $dom->getElementsByTagName('h2');
|
@@ -547,8 +548,9 @@ class WPMSEO_Metabox extends WPMSEO_Meta {
|
|
547 |
|
548 |
/* load param word content */
|
549 |
function metaseo_check_content($post, $tooltip_page, $meta_analysis) {
|
|
|
550 |
$words_meta_title = preg_split('/((^\p{P}+)|(\p{P}*\s+\p{P}*)|(\p{P}+$))/', strtolower($post->post_title), -1, PREG_SPLIT_NO_EMPTY);
|
551 |
-
$words_post_content = preg_split('/((^\p{P}+)|(\p{P}*\s+\p{P}*)|(\p{P}+$))/', strtolower(strip_tags($
|
552 |
$test1 = false;
|
553 |
if (is_array($words_meta_title) && is_array($words_post_content)) {
|
554 |
foreach ($words_meta_title as $mtitle) {
|
@@ -623,6 +625,7 @@ class WPMSEO_Metabox extends WPMSEO_Meta {
|
|
623 |
}
|
624 |
$dom = new DOMDocument;
|
625 |
libxml_use_internal_errors(true);
|
|
|
626 |
if ($dom->loadHTML($content)) {
|
627 |
// Extracting the specified elements from the web page
|
628 |
$tags = $dom->getElementsByTagName('img');
|
422 |
}
|
423 |
$dom = new DOMDocument;
|
424 |
libxml_use_internal_errors(true);
|
425 |
+
$content = apply_filters('the_content', $post->post_content);
|
426 |
+
if ($dom->loadHTML($content)) {
|
427 |
// Extracting the specified elements from the web page
|
428 |
$tags_h1 = $dom->getElementsByTagName('h1');
|
429 |
$tags_h2 = $dom->getElementsByTagName('h2');
|
548 |
|
549 |
/* load param word content */
|
550 |
function metaseo_check_content($post, $tooltip_page, $meta_analysis) {
|
551 |
+
$content = apply_filters('the_content', $post->post_content);
|
552 |
$words_meta_title = preg_split('/((^\p{P}+)|(\p{P}*\s+\p{P}*)|(\p{P}+$))/', strtolower($post->post_title), -1, PREG_SPLIT_NO_EMPTY);
|
553 |
+
$words_post_content = preg_split('/((^\p{P}+)|(\p{P}*\s+\p{P}*)|(\p{P}+$))/', strtolower(strip_tags($content)), -1, PREG_SPLIT_NO_EMPTY);
|
554 |
$test1 = false;
|
555 |
if (is_array($words_meta_title) && is_array($words_post_content)) {
|
556 |
foreach ($words_meta_title as $mtitle) {
|
625 |
}
|
626 |
$dom = new DOMDocument;
|
627 |
libxml_use_internal_errors(true);
|
628 |
+
$content = apply_filters('the_content', $content);
|
629 |
if ($dom->loadHTML($content)) {
|
630 |
// Extracting the specified elements from the web page
|
631 |
$tags = $dom->getElementsByTagName('img');
|
inc/pages/settings.php
CHANGED
@@ -1,14 +1,6 @@
|
|
1 |
<?php
|
2 |
wp_enqueue_style('m-style-qtip');
|
3 |
wp_enqueue_script('jquery-qtip');
|
4 |
-
$posts = get_posts(array('post_type' => 'page', 'posts_per_page' => -1, 'numberposts' => -1));
|
5 |
-
$types_404 = array('none' => 'None', 'wp-meta-seo-page' => __('WP Meta SEO page', 'wp-meta-seo'), 'custom_page' => __('Custom page', 'wp-meta-seo'));
|
6 |
-
|
7 |
-
$defaul_settings_404 = array('wpms_redirect_homepage' => 0, 'wpms_type_404' => 'none', 'wpms_page_redirected' => 'none');
|
8 |
-
$wpms_settings_404 = get_option('wpms_settings_404');
|
9 |
-
if (is_array($wpms_settings_404)) {
|
10 |
-
$defaul_settings_404 = array_merge($defaul_settings_404, $wpms_settings_404);
|
11 |
-
}
|
12 |
?>
|
13 |
<div class="wrap wrap_wpms_settings">
|
14 |
<h1><?php _e('WP Meta SEO global settings', 'wp-meta-seo') ?></h1>
|
@@ -16,6 +8,7 @@ if (is_array($wpms_settings_404)) {
|
|
16 |
<ul class="tabs wpmstabs">
|
17 |
<li class="tab wpmstab col active"><a href="#wpms-global"><?php _e('Global','wp-meta-seo') ?></a></li>
|
18 |
<li class="tab wpmstab col"><a href="#wpms-redirection"><?php _e('Redirections and 404','wp-meta-seo') ?></a></li>
|
|
|
19 |
<?php
|
20 |
if(is_plugin_active(WPMSEO_ADDON_FILENAME)):
|
21 |
?>
|
@@ -81,6 +74,125 @@ if (is_array($wpms_settings_404)) {
|
|
81 |
<span class="message_saved"><?php _e('Saved', 'wp-meta-seo') ?></span>
|
82 |
</div>
|
83 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
84 |
<div id="wpms-jutranslation" class="content-box">
|
85 |
<?php echo \Joomunited\WPMetaSEO\Jutranslation\Jutranslation::getInput(); ?>
|
86 |
</div>
|
@@ -118,6 +230,49 @@ if (is_array($wpms_settings_404)) {
|
|
118 |
|
119 |
});
|
120 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
121 |
$('.wpms_save_settings404').on('click', function () {
|
122 |
var home_redirected = $('.wpms_redirect_homepage').val();
|
123 |
var type_404 = $('.wpms_type_404').val();
|
1 |
<?php
|
2 |
wp_enqueue_style('m-style-qtip');
|
3 |
wp_enqueue_script('jquery-qtip');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
?>
|
5 |
<div class="wrap wrap_wpms_settings">
|
6 |
<h1><?php _e('WP Meta SEO global settings', 'wp-meta-seo') ?></h1>
|
8 |
<ul class="tabs wpmstabs">
|
9 |
<li class="tab wpmstab col active"><a href="#wpms-global"><?php _e('Global','wp-meta-seo') ?></a></li>
|
10 |
<li class="tab wpmstab col"><a href="#wpms-redirection"><?php _e('Redirections and 404','wp-meta-seo') ?></a></li>
|
11 |
+
<li class="tab wpmstab col"><a href="#wpms-breadcrumb"><?php _e('Breadcrumb','wp-meta-seo') ?></a></li>
|
12 |
<?php
|
13 |
if(is_plugin_active(WPMSEO_ADDON_FILENAME)):
|
14 |
?>
|
74 |
<span class="message_saved"><?php _e('Saved', 'wp-meta-seo') ?></span>
|
75 |
</div>
|
76 |
|
77 |
+
<div id="wpms-breadcrumb" class="content-box">
|
78 |
+
<table class="form-table">
|
79 |
+
<tbody>
|
80 |
+
<tr>
|
81 |
+
<th scope="row">
|
82 |
+
<label for="<?php _e('The separator that materialize the breadcrumb levels','wp-meta-seo') ?>">
|
83 |
+
<?php _e('Breadcrumb separator','wp-meta-seo') ?>
|
84 |
+
</label>
|
85 |
+
</th>
|
86 |
+
<td>
|
87 |
+
<input id="breadcrumbs_separator" name="_metaseo_breadcrumbs[separator]" type="text" value="<?php echo htmlentities($breadcrumbs['separator']) ?>" size="50">
|
88 |
+
</td>
|
89 |
+
</tr>
|
90 |
+
|
91 |
+
<tr>
|
92 |
+
<th scope="row">
|
93 |
+
<label for="<?php _e('Include the Home element in the breadcrumb','wp-meta-seo') ?>"><?php _e('Include Home','wp-meta-seo') ?></label>
|
94 |
+
</th>
|
95 |
+
<td>
|
96 |
+
<input name="_metaseo_breadcrumbs[include_home]" type="hidden" value="0">
|
97 |
+
<div class="switch-optimization">
|
98 |
+
<label class="switch switch-optimization">
|
99 |
+
<input type="checkbox" id="include_home"
|
100 |
+
name="_metaseo_breadcrumbs[include_home]" value="1" <?php checked($breadcrumbs['include_home'],1) ?>>
|
101 |
+
<div class="slider round"></div>
|
102 |
+
</label>
|
103 |
+
</div>
|
104 |
+
</td>
|
105 |
+
</tr>
|
106 |
+
|
107 |
+
<tr>
|
108 |
+
<th scope="row">
|
109 |
+
<label for="<?php _e('If home is included, you may want to force a text. By default it’s the content title','wp-meta-seo') ?>">
|
110 |
+
<?php _e('Home text','wp-meta-seo') ?>
|
111 |
+
</label>
|
112 |
+
</th>
|
113 |
+
<td>
|
114 |
+
<input name="_metaseo_breadcrumbs[home_text_default]" type="hidden" value="0">
|
115 |
+
<div class="switch-optimization">
|
116 |
+
<label class="switch switch-optimization">
|
117 |
+
<input type="checkbox" id="home_text_default"
|
118 |
+
name="_metaseo_breadcrumbs[home_text_default]" value="1" <?php checked($breadcrumbs['home_text_default'],1) ?>>
|
119 |
+
<div class="slider round"></div>
|
120 |
+
</label>
|
121 |
+
</div>
|
122 |
+
</td>
|
123 |
+
</tr>
|
124 |
+
|
125 |
+
<?php
|
126 |
+
if($breadcrumbs['home_text_default'] == 0){
|
127 |
+
$class = 'hide';
|
128 |
+
}else{
|
129 |
+
$class = 'show';
|
130 |
+
}
|
131 |
+
?>
|
132 |
+
<tr class="tr_home_text <?php echo $class ?>">
|
133 |
+
<th scope="row">
|
134 |
+
<label></label>
|
135 |
+
</th>
|
136 |
+
<td>
|
137 |
+
<input id="breadcrumbs_home_text" name="_metaseo_breadcrumbs[home_text]" type="text" value="<?php echo $breadcrumbs['home_text'] ?>" size="50">
|
138 |
+
</td>
|
139 |
+
</tr>
|
140 |
+
<tr>
|
141 |
+
<th scope="row">
|
142 |
+
<label for="<?php _e('The breadcrumb element can be clickable or not','wp-meta-seo') ?>"><?php _e('Clickable breadcrumb','wp-meta-seo') ?></label>
|
143 |
+
</th>
|
144 |
+
<td>
|
145 |
+
<input name="_metaseo_breadcrumbs[clickable]" type="hidden" value="0">
|
146 |
+
<div class="switch-optimization">
|
147 |
+
<label class="switch switch-optimization">
|
148 |
+
<input type="checkbox" id="clickable"
|
149 |
+
name="_metaseo_breadcrumbs[clickable]" value="1" <?php checked($breadcrumbs['clickable'],1) ?>>
|
150 |
+
<div class="slider round"></div>
|
151 |
+
</label>
|
152 |
+
</div>
|
153 |
+
</td>
|
154 |
+
</tr>
|
155 |
+
|
156 |
+
<tr>
|
157 |
+
<th scope="row">
|
158 |
+
<label for="<?php _e('Generate a breadcrumb navigation based on your categories or page levels. The shortcode can be included in theme layouts','wp-meta-seo') ?>">
|
159 |
+
<?php _e('PHP Shortcode','wp-meta-seo') ?>
|
160 |
+
</label>
|
161 |
+
</th>
|
162 |
+
<td>
|
163 |
+
|
164 |
+
<textarea style="width: 700px;height:200px;resize:both" readonly>
|
165 |
+
/**
|
166 |
+
* @param bool $return Whether to return or echo the trail. (optional)
|
167 |
+
* @param bool $reverse Whether to reverse the output or not. (optional)
|
168 |
+
*/
|
169 |
+
if(function_exists('wpms_breadcrumb')){
|
170 |
+
$return = false;
|
171 |
+
$reverse = false;
|
172 |
+
echo '<div class="breadcrumbs" typeof="BreadcrumbList" vocab="https://schema.org/">';
|
173 |
+
wpms_breadcrumb($return,$reverse);
|
174 |
+
echo '</div>';
|
175 |
+
}
|
176 |
+
</textarea>
|
177 |
+
</td>
|
178 |
+
</tr>
|
179 |
+
|
180 |
+
<tr>
|
181 |
+
<th scope="row">
|
182 |
+
<label for="<?php _e('Generate a breadcrumb navigation based on your categories or page levels. The WordPress shortcode can be called anywhere in your content','wp-meta-seo') ?>">
|
183 |
+
<?php _e('WordPress Shortcode','wp-meta-seo') ?>
|
184 |
+
</label>
|
185 |
+
</th>
|
186 |
+
<td>
|
187 |
+
<input type="text" size="50" readonly value="[wpms_breadcrumb reverse=”0″]">
|
188 |
+
</td>
|
189 |
+
</tr>
|
190 |
+
</tbody>
|
191 |
+
</table>
|
192 |
+
<div class="button wpms_save_settings_breadcrumb"><?php _e('Save', 'wp-meta-seo') ?></div>
|
193 |
+
<span class="message_saved"><?php _e('Saved', 'wp-meta-seo') ?></span>
|
194 |
+
</div>
|
195 |
+
|
196 |
<div id="wpms-jutranslation" class="content-box">
|
197 |
<?php echo \Joomunited\WPMetaSEO\Jutranslation\Jutranslation::getInput(); ?>
|
198 |
</div>
|
230 |
|
231 |
});
|
232 |
|
233 |
+
$('.wpms_save_settings_breadcrumb').on('click', function () {
|
234 |
+
var separator = $('#breadcrumbs_separator').val();
|
235 |
+
var home_text = $('#breadcrumbs_home_text').val();
|
236 |
+
if($('#include_home').is(":checked")){
|
237 |
+
var include_home = 1;
|
238 |
+
}else{
|
239 |
+
var include_home = 0;
|
240 |
+
}
|
241 |
+
|
242 |
+
if($('#clickable').is(":checked")){
|
243 |
+
var clickable = 1;
|
244 |
+
}else{
|
245 |
+
var clickable = 0;
|
246 |
+
}
|
247 |
+
|
248 |
+
if($('#home_text_default').is(":checked")){
|
249 |
+
var home_text_default = 1;
|
250 |
+
}else{
|
251 |
+
var home_text_default = 0;
|
252 |
+
}
|
253 |
+
|
254 |
+
$.ajax({
|
255 |
+
url: ajaxurl,
|
256 |
+
method: 'POST',
|
257 |
+
dataType: 'json',
|
258 |
+
data: {
|
259 |
+
'action': 'wpms_save_settings_breadcrumb',
|
260 |
+
'separator': separator,
|
261 |
+
'home_text': home_text,
|
262 |
+
'include_home': include_home,
|
263 |
+
'clickable': clickable,
|
264 |
+
'home_text_default': home_text_default
|
265 |
+
},
|
266 |
+
success: function (res) {
|
267 |
+
if (res == true) {
|
268 |
+
$('.message_saved').fadeIn(10).delay(2000).fadeOut(2000);
|
269 |
+
} else {
|
270 |
+
alert('Save errors !')
|
271 |
+
}
|
272 |
+
}
|
273 |
+
});
|
274 |
+
});
|
275 |
+
|
276 |
$('.wpms_save_settings404').on('click', function () {
|
277 |
var home_redirected = $('.wpms_redirect_homepage').val();
|
278 |
var type_404 = $('.wpms_type_404').val();
|
js/metaseo_admin.js
CHANGED
@@ -389,8 +389,12 @@ function saveChanges(element_id, post_id, meta_type, meta_value) {
|
|
389 |
data: postData,
|
390 |
dataType: 'json',
|
391 |
beforeSend: function () {
|
392 |
-
savedInfo.empty().append('<span
|
393 |
-
element.
|
|
|
|
|
|
|
|
|
394 |
},
|
395 |
success: function (response) {
|
396 |
if (response == 0) {
|
@@ -401,12 +405,18 @@ function saveChanges(element_id, post_id, meta_type, meta_value) {
|
|
401 |
|
402 |
if (updated == true) {
|
403 |
autosaveNotification = setTimeout(function () {
|
404 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
405 |
savedInfo.removeClass('metaseo-msg-warning').addClass('metaseo-msg-success')
|
406 |
.text(response.msg).fadeIn(200);
|
407 |
|
408 |
setTimeout(function () {
|
409 |
-
savedInfo.empty().append('<span class="
|
410 |
}, 3000);
|
411 |
|
412 |
}, 200);
|
@@ -529,6 +539,27 @@ function _metaSeoScanImages(imgs) {
|
|
529 |
uncheck(input);
|
530 |
});
|
531 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
532 |
},
|
533 |
error: function () {
|
534 |
// alert('Errors occured while scanning posts for optimization');
|
@@ -869,6 +900,14 @@ function wpms_image_scan_meta($this) {
|
|
869 |
}
|
870 |
|
871 |
jQuery(document).ready(function ($) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
872 |
$('.image_scan_meta').on('click', function () {
|
873 |
wpms_image_scan_meta($(this));
|
874 |
});
|
@@ -1005,7 +1044,7 @@ jQuery(document).ready(function ($) {
|
|
1005 |
$('.metaseo-img-meta').change(function () {
|
1006 |
if (jQuery(this).val() == '') {
|
1007 |
jQuery(this).val(metaseoValueHolder[this.id + '_prev']);
|
1008 |
-
$(this).parent().find('span.saved-info').empty().append('<span
|
1009 |
}
|
1010 |
if (checkspecial(this) === true) {
|
1011 |
updateInputBlur(this);
|
389 |
data: postData,
|
390 |
dataType: 'json',
|
391 |
beforeSend: function () {
|
392 |
+
savedInfo.empty().append('<span class="spinner"></span>');
|
393 |
+
if(element.hasClass('metaseo-fix-meta')){
|
394 |
+
element.closest('.metaseo-img-wrapper').find('.spinner').css('visibility','visible').show();
|
395 |
+
}else{
|
396 |
+
element.parent().find('.spinner').css('visibility','visible').show();
|
397 |
+
}
|
398 |
},
|
399 |
success: function (response) {
|
400 |
if (response == 0) {
|
405 |
|
406 |
if (updated == true) {
|
407 |
autosaveNotification = setTimeout(function () {
|
408 |
+
|
409 |
+
if(element.hasClass('metaseo-fix-meta')){
|
410 |
+
element.closest('.metaseo-img-wrapper').find('.spinner').hide();
|
411 |
+
}else{
|
412 |
+
element.parent().find('.spinner').hide();
|
413 |
+
}
|
414 |
+
|
415 |
savedInfo.removeClass('metaseo-msg-warning').addClass('metaseo-msg-success')
|
416 |
.text(response.msg).fadeIn(200);
|
417 |
|
418 |
setTimeout(function () {
|
419 |
+
savedInfo.empty().append('<span class="spinner"></span>');
|
420 |
}, 3000);
|
421 |
|
422 |
}, 200);
|
539 |
uncheck(input);
|
540 |
});
|
541 |
}
|
542 |
+
|
543 |
+
jQuery('.fix-metas').qtip({
|
544 |
+
content: {
|
545 |
+
attr: 'alt'
|
546 |
+
},
|
547 |
+
position: {
|
548 |
+
my: 'bottom center',
|
549 |
+
at: 'top center'
|
550 |
+
},
|
551 |
+
style: {
|
552 |
+
tip: {
|
553 |
+
corner: true,
|
554 |
+
},
|
555 |
+
classes: 'wpms-widgets-qtip_show_arow'
|
556 |
+
},
|
557 |
+
show: 'hover',
|
558 |
+
hide: {
|
559 |
+
fixed: true,
|
560 |
+
delay: 10
|
561 |
+
}
|
562 |
+
});
|
563 |
},
|
564 |
error: function () {
|
565 |
// alert('Errors occured while scanning posts for optimization');
|
900 |
}
|
901 |
|
902 |
jQuery(document).ready(function ($) {
|
903 |
+
$('#home_text_default').on('change', function () {
|
904 |
+
if($(this).is(':checked')){
|
905 |
+
$('.tr_home_text').addClass('show').removeClass('hide');
|
906 |
+
}else{
|
907 |
+
$('.tr_home_text').addClass('hide').removeClass('show');
|
908 |
+
}
|
909 |
+
});
|
910 |
+
|
911 |
$('.image_scan_meta').on('click', function () {
|
912 |
wpms_image_scan_meta($(this));
|
913 |
});
|
1044 |
$('.metaseo-img-meta').change(function () {
|
1045 |
if (jQuery(this).val() == '') {
|
1046 |
jQuery(this).val(metaseoValueHolder[this.id + '_prev']);
|
1047 |
+
$(this).parent().find('span.saved-info').empty().append('<span class="spinner"></span>');
|
1048 |
}
|
1049 |
if (checkspecial(this) === true) {
|
1050 |
updateInputBlur(this);
|
languages/wp-meta-seo-en_US.mo
CHANGED
Binary file
|
readme.txt
CHANGED
@@ -2,8 +2,8 @@
|
|
2 |
Contributors: JoomUnited
|
3 |
Tags: google, webmaster tools, keywords, meta, meta description, meta keywords, meta title, robots meta, search engine optimization, seo, wordpress seo, yahoo, image optimization, image resize, custom post seo, redirect, redirection, 301, broken link
|
4 |
Requires at least: 4.0
|
5 |
-
Tested up to: 4.8.
|
6 |
-
Stable tag: 3.
|
7 |
License: GPLv2 or later
|
8 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
9 |
|
@@ -11,17 +11,18 @@ WP Meta SEO gives you the control over all your meta content and images. Bulk SE
|
|
11 |
|
12 |
== Description ==
|
13 |
|
14 |
-
= WP meta SEO got
|
15 |
|
16 |
* Bulk edit all website meta on a single view
|
17 |
* Edit meta in content with live SEO analysis
|
18 |
-
* Fix HTML image resizing
|
19 |
* Bulk edit image file name and meta
|
20 |
* Bulk edit SEO link title
|
21 |
* 404 errors redirect and internal broken link checker
|
22 |
* Add Google Analytics tracking information and display statistics in WordPress
|
23 |
* Generate XML and HTML sitemaps
|
24 |
* Facebook and Twitter social sharing custom elements per content
|
|
|
25 |
|
26 |
> <strong>Features included in WP Meta SEO Addon</strong><br>
|
27 |
> * Google Search Console keyword suggestion in content
|
@@ -72,6 +73,8 @@ WP Meta SEO also include this feature in the bulk edition view, you are notified
|
|
72 |
* Check: Meta description filled
|
73 |
* Check: Wrong image resizing
|
74 |
* Check: Image meta title or alt
|
|
|
|
|
75 |
|
76 |
= 404 and redirect manager =
|
77 |
|
@@ -108,8 +111,14 @@ The redirect manager will help you to fix all types of 404 errors you can encoun
|
|
108 |
* Setup update frequency and priority for each sitemap link
|
109 |
* Crawl all sitemap URL for errors
|
110 |
|
|
|
111 |
|
112 |
-
|
|
|
|
|
|
|
|
|
|
|
113 |
|
114 |
= Video demo: =
|
115 |
[vimeo https://vimeo.com/113695156]
|
@@ -261,6 +270,11 @@ It could be! if you have a lot of pages that need to be indexed with no specific
|
|
261 |
|
262 |
== Changelog ==
|
263 |
|
|
|
|
|
|
|
|
|
|
|
264 |
= 3.4.1 =
|
265 |
* Add : Meta keywords field in category meta edition
|
266 |
* Add : Update dashboard description and image compression layout
|
@@ -474,4 +488,4 @@ Site-wide SEO: it's more about your whole site and structure between multiple ar
|
|
474 |
|
475 |
And... don't forget to check each month your SEO dashboard :)
|
476 |
|
477 |
-
PHP 5.3+, WP 4.3+
|
2 |
Contributors: JoomUnited
|
3 |
Tags: google, webmaster tools, keywords, meta, meta description, meta keywords, meta title, robots meta, search engine optimization, seo, wordpress seo, yahoo, image optimization, image resize, custom post seo, redirect, redirection, 301, broken link
|
4 |
Requires at least: 4.0
|
5 |
+
Tested up to: 4.8.1
|
6 |
+
Stable tag: 3.5.0
|
7 |
License: GPLv2 or later
|
8 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
9 |
|
11 |
|
12 |
== Description ==
|
13 |
|
14 |
+
= WP meta SEO got 9 major functionalities: =
|
15 |
|
16 |
* Bulk edit all website meta on a single view
|
17 |
* Edit meta in content with live SEO analysis
|
18 |
+
* Fix HTML image resizing in content
|
19 |
* Bulk edit image file name and meta
|
20 |
* Bulk edit SEO link title
|
21 |
* 404 errors redirect and internal broken link checker
|
22 |
* Add Google Analytics tracking information and display statistics in WordPress
|
23 |
* Generate XML and HTML sitemaps
|
24 |
* Facebook and Twitter social sharing custom elements per content
|
25 |
+
* Breadcrumb generator
|
26 |
|
27 |
> <strong>Features included in WP Meta SEO Addon</strong><br>
|
28 |
> * Google Search Console keyword suggestion in content
|
73 |
* Check: Meta description filled
|
74 |
* Check: Wrong image resizing
|
75 |
* Check: Image meta title or alt
|
76 |
+
* Check the Page builders content (Text, HTML, Heading content):
|
77 |
+
Visual composer, DIVI Builder, Beaver Builder, ACF, Site Origine, Themify builder, Live composer, Elementor
|
78 |
|
79 |
= 404 and redirect manager =
|
80 |
|
111 |
* Setup update frequency and priority for each sitemap link
|
112 |
* Crawl all sitemap URL for errors
|
113 |
|
114 |
+
= Breadcrumb generator =
|
115 |
|
116 |
+
* Rich snippet breadcrumb
|
117 |
+
* Control breadcrumb separator, links and display
|
118 |
+
* Generate breadcrumb shortcode
|
119 |
+
* Generate breadcrumb PHP shortcode
|
120 |
+
|
121 |
+
**More details here:** <a href="https://www.joomunited.com/wordpress-products/wp-meta-seo" rel="friend">http://www.joomunited.com/wordpress-products/wp-meta-seo</a>
|
122 |
|
123 |
= Video demo: =
|
124 |
[vimeo https://vimeo.com/113695156]
|
270 |
|
271 |
== Changelog ==
|
272 |
|
273 |
+
= 3.5.0 =
|
274 |
+
* Fix : Check content of page builders: Visual composer, DIVI Builder, Beaver Builder, ACF, Site Origine, Themify builder, Live composer, Elementor plugins
|
275 |
+
* Add : Generate rich snippet breadcrumb shortcode and PHP code
|
276 |
+
* Fix : Redesign the image edition window
|
277 |
+
|
278 |
= 3.4.1 =
|
279 |
* Add : Meta keywords field in category meta edition
|
280 |
* Add : Update dashboard description and image compression layout
|
488 |
|
489 |
And... don't forget to check each month your SEO dashboard :)
|
490 |
|
491 |
+
PHP 5.3+, WP 4.3+
|
wp-meta-seo.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
* Plugin Name: WP Meta SEO
|
5 |
* Plugin URI: http://www.joomunited.com/wordpress-products/wp-meta-seo
|
6 |
* Description: WP Meta SEO is a plugin for WordPress to fill meta for content, images and main SEO info in a single view.
|
7 |
-
* Version: 3.
|
8 |
* Text Domain: wp-meta-seo
|
9 |
* Domain Path: /languages
|
10 |
* Author: JoomUnited
|
@@ -75,7 +75,7 @@ if (!defined('URL'))
|
|
75 |
define('URL', get_site_url());
|
76 |
|
77 |
if (!defined('WPMSEO_VERSION')) {
|
78 |
-
define('WPMSEO_VERSION', '3.
|
79 |
}
|
80 |
|
81 |
if (!defined('WPMS_CLIENTID')) {
|
@@ -104,6 +104,10 @@ if (!defined('WPMSEO_FILE'))
|
|
104 |
if (!defined('WPMSEO_ADDON_FILENAME')) {
|
105 |
define('WPMSEO_ADDON_FILENAME', 'wp-meta-seo-addon/wp-meta-seo-addon.php');
|
106 |
}
|
|
|
|
|
|
|
|
|
107 |
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
|
108 |
register_activation_hook(__FILE__, array('WpMetaSeo', 'plugin_activation'));
|
109 |
|
@@ -129,8 +133,40 @@ if (is_admin()) {
|
|
129 |
$contactusers['mfacebook'] = __('Facebook profile URL', 'wp-meta-seo');
|
130 |
return $contactusers;
|
131 |
}
|
132 |
-
|
133 |
} else {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
134 |
/******** Check again and modify title, meta title, meta description before output ********/
|
135 |
if(is_plugin_active('divi_layout_injector/divi_layout_injector.php')){
|
136 |
add_action('get_header', 'buffer_start');
|
@@ -696,9 +732,4 @@ function wpms_template_redirect() {
|
|
696 |
}
|
697 |
}
|
698 |
|
699 |
-
}
|
700 |
-
|
701 |
-
|
702 |
-
if(is_admin()){
|
703 |
-
include_once ( WPMETASEO_PLUGIN_DIR . 'inc/google_analytics/wpmsga.php' );
|
704 |
-
}
|
4 |
* Plugin Name: WP Meta SEO
|
5 |
* Plugin URI: http://www.joomunited.com/wordpress-products/wp-meta-seo
|
6 |
* Description: WP Meta SEO is a plugin for WordPress to fill meta for content, images and main SEO info in a single view.
|
7 |
+
* Version: 3.5.0
|
8 |
* Text Domain: wp-meta-seo
|
9 |
* Domain Path: /languages
|
10 |
* Author: JoomUnited
|
75 |
define('URL', get_site_url());
|
76 |
|
77 |
if (!defined('WPMSEO_VERSION')) {
|
78 |
+
define('WPMSEO_VERSION', '3.5.0');
|
79 |
}
|
80 |
|
81 |
if (!defined('WPMS_CLIENTID')) {
|
104 |
if (!defined('WPMSEO_ADDON_FILENAME')) {
|
105 |
define('WPMSEO_ADDON_FILENAME', 'wp-meta-seo-addon/wp-meta-seo-addon.php');
|
106 |
}
|
107 |
+
|
108 |
+
if (!defined('WPMSEO_TEMPLATE_BREADCRUMB')) {
|
109 |
+
define('WPMSEO_TEMPLATE_BREADCRUMB', '<span property="itemListElement" typeof="ListItem"><span property="name">%htitle%</span><meta property="position" content="%position%"></span>');
|
110 |
+
}
|
111 |
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
|
112 |
register_activation_hook(__FILE__, array('WpMetaSeo', 'plugin_activation'));
|
113 |
|
133 |
$contactusers['mfacebook'] = __('Facebook profile URL', 'wp-meta-seo');
|
134 |
return $contactusers;
|
135 |
}
|
136 |
+
include_once ( WPMETASEO_PLUGIN_DIR . 'inc/google_analytics/wpmsga.php' );
|
137 |
} else {
|
138 |
+
/**
|
139 |
+
* Outputs the breadcrumb
|
140 |
+
* @param bool $return Whether to return or echo the trail. (optional)
|
141 |
+
* @param bool $reverse Whether to reverse the output or not. (optional)
|
142 |
+
*/
|
143 |
+
function wpms_breadcrumb($return = false, $reverse = false)
|
144 |
+
{
|
145 |
+
require_once( WPMETASEO_PLUGIN_DIR . 'inc/breadcrumb/class.metaseo-breadcrumb.php' );
|
146 |
+
$breadcrumb = new MetaSeo_Breadcrumb;
|
147 |
+
if($breadcrumb !== null)
|
148 |
+
{
|
149 |
+
$breadcrumb->wpms_check_posts();
|
150 |
+
return $breadcrumb->wpms_breadcrumb_display($return, $reverse);
|
151 |
+
}
|
152 |
+
}
|
153 |
+
|
154 |
+
/*
|
155 |
+
* shortcode for breadcrumb
|
156 |
+
*/
|
157 |
+
add_shortcode('wpms_breadcrumb', 'wpms_breadcrumb_shortcode');
|
158 |
+
function wpms_breadcrumb_shortcode($params) {
|
159 |
+
if(function_exists('wpms_breadcrumb_shortcode')){
|
160 |
+
echo '<div class="breadcrumbs" typeof="BreadcrumbList" vocab="https://schema.org/">';
|
161 |
+
if(isset($params['reverse']) && $params['reverse'] == 1){
|
162 |
+
return wpms_breadcrumb(true, true);
|
163 |
+
}else{
|
164 |
+
return wpms_breadcrumb(true, false);
|
165 |
+
}
|
166 |
+
echo '</div>';
|
167 |
+
}
|
168 |
+
}
|
169 |
+
|
170 |
/******** Check again and modify title, meta title, meta description before output ********/
|
171 |
if(is_plugin_active('divi_layout_injector/divi_layout_injector.php')){
|
172 |
add_action('get_header', 'buffer_start');
|
732 |
}
|
733 |
}
|
734 |
|
735 |
+
}
|
|
|
|
|
|
|
|
|
|