Version Description
- Bulk copy new option: content title to meta title
- Bulk copy new option: image name to alt text
- Bulk copy new option: image name to image title
- Fix twitter card on SEO on page optimization
- Fix SEO meta empty in some themes
Download this release
Release Info
Developer | JoomUnited |
Plugin | ![]() |
Version | 1.4.0 |
Comparing to | |
See all releases |
Code changes from version 1.3.0 to 1.4.0
- css/metaseo_admin.css +1 -1
- css/style.css +4 -0
- inc/class.metaseo-admin.php +236 -4
- inc/class.metaseo-content-list-table.php +16 -11
- inc/class.metaseo-dashboard.php +1 -1
- inc/class.metaseo-image-list-table.php +27 -8
- inc/class.metaseo-metabox.php +3 -10
- js/dashboard-chart.js +0 -84
- js/metaseo_admin.js +9 -0
- js/wp-metaseo-metabox.js +1 -9
- js/wpms-bulk-action.js +60 -0
- languages/wpms-en_GB.mo +0 -0
- languages/wpms-en_GB.po +55 -1
- languages/wpms-fr_FR.mo +0 -0
- languages/wpms-fr_FR.po +55 -1
- languages/wpms.pot +62 -0
- readme.txt +52 -33
- wp-meta-seo.php +29 -10
css/metaseo_admin.css
CHANGED
@@ -340,7 +340,7 @@ strong {
|
|
340 |
color: #eee;
|
341 |
}
|
342 |
.note-no-data .col-pad {
|
343 |
-
background: url("../img/
|
344 |
display: block;
|
345 |
padding-left: 45px;
|
346 |
}
|
340 |
color: #eee;
|
341 |
}
|
342 |
.note-no-data .col-pad {
|
343 |
+
background: url("../img/loop.png") no-repeat scroll 0 50% transparent;
|
344 |
display: block;
|
345 |
padding-left: 45px;
|
346 |
}
|
css/style.css
CHANGED
@@ -274,4 +274,8 @@ span.hz-loading{
|
|
274 |
|
275 |
.metaseo-img-meta{
|
276 |
max-width: 100%;
|
|
|
|
|
|
|
|
|
277 |
}
|
274 |
|
275 |
.metaseo-img-meta{
|
276 |
max-width: 100%;
|
277 |
+
}
|
278 |
+
|
279 |
+
#wp-seo-meta-form #post-query-submit{
|
280 |
+
float: left;
|
281 |
}
|
inc/class.metaseo-admin.php
CHANGED
@@ -8,12 +8,21 @@ class MetaSeo_Admin {
|
|
8 |
public static $desc_length = 156;
|
9 |
public static $title_length = 69;
|
10 |
|
|
|
|
|
|
|
|
|
|
|
11 |
function __construct() {
|
|
|
|
|
|
|
12 |
$this->settings = array(
|
13 |
"metaseo_title_home"=>"",
|
14 |
"metaseo_desc_home"=>"",
|
15 |
"metaseo_showfacebook"=>"",
|
16 |
"metaseo_showtwitter"=>"",
|
|
|
17 |
"metaseo_showtmetablock"=>0
|
18 |
);
|
19 |
$settings = get_option( '_metaseo_settings' );
|
@@ -193,6 +202,7 @@ class MetaSeo_Admin {
|
|
193 |
add_settings_field('metaseo_desc_home', __('Homepage meta description ', 'wpms'), array( $this, 'metaseo_desc_home' ), 'metaseo_settings', 'metaseo_dashboard');
|
194 |
add_settings_field('metaseo_showfacebook', __('Facebook profile URL ', 'wpms'), array( $this, 'showfacebook' ), 'metaseo_settings', 'metaseo_dashboard');
|
195 |
add_settings_field('metaseo_showtwitter', __('Twitter Username ', 'wpms'), array( $this, 'showtwitter' ), 'metaseo_settings', 'metaseo_dashboard');
|
|
|
196 |
add_settings_field('metaseo_showtmetablock', __('Meta block edition ', 'wpms'), array( $this, 'showtmetablock' ), 'metaseo_settings', 'metaseo_dashboard');
|
197 |
}
|
198 |
|
@@ -237,6 +247,18 @@ class MetaSeo_Admin {
|
|
237 |
echo '<input id="metaseo_showtwitter" name="_metaseo_settings[metaseo_showtwitter]" type="text" value="'.esc_attr( $twitter ).'" size="50"/>';
|
238 |
}
|
239 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
240 |
|
241 |
private function load_meta_boxes() {
|
242 |
if ( in_array( $this->pagenow, array(
|
@@ -310,12 +332,18 @@ class MetaSeo_Admin {
|
|
310 |
wp_enqueue_script('jquery');
|
311 |
|
312 |
wp_enqueue_script(
|
313 |
-
'wpmetaseoAdmin', plugins_url('js/metaseo_admin.js', dirname(__FILE__)), array('jquery'),
|
314 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
315 |
if($current_screen->base == 'toplevel_page_metaseo_dashboard'){
|
316 |
-
wp_enqueue_script('Chart', plugins_url('js/Chart.js', dirname(__FILE__)), array('jquery'),
|
317 |
-
wp_enqueue_script('jquery-knob', plugins_url('js/jquery.knob.js', dirname(__FILE__)), array('jquery'),
|
318 |
-
wp_enqueue_script('metaseo-dashboard', plugins_url('js/dashboard.js', dirname(__FILE__)), array('jquery'),
|
319 |
wp_enqueue_style('chart', plugins_url('/css/chart.css', dirname(__FILE__) ) );
|
320 |
wp_enqueue_style('metaseo-quirk', plugins_url('/css/metaseo-quirk.css', dirname(__FILE__) ) );
|
321 |
}
|
@@ -328,6 +356,12 @@ class MetaSeo_Admin {
|
|
328 |
array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
|
329 |
}
|
330 |
|
|
|
|
|
|
|
|
|
|
|
|
|
331 |
/**
|
332 |
* Load additional admin stylesheets
|
333 |
* of jquery-ui
|
@@ -439,6 +473,201 @@ class MetaSeo_Admin {
|
|
439 |
break;
|
440 |
}
|
441 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
442 |
}
|
443 |
|
444 |
private function ajaxHandle(){
|
@@ -451,6 +680,9 @@ class MetaSeo_Admin {
|
|
451 |
//
|
452 |
add_action( 'wp_ajax_import_meta_data', array('MetaSeo_Content_List_Table', 'importMetaData') );
|
453 |
add_action( 'wp_ajax_dismiss_import_meta', array('MetaSeo_Content_List_Table', 'dismissImport') );
|
|
|
|
|
|
|
454 |
//
|
455 |
add_action( 'added_post_meta' , array( 'MetaSeo_Content_List_Table', 'updateMetaSync' ), 99, 4);
|
456 |
add_action( 'updated_post_meta', array( 'MetaSeo_Content_List_Table', 'updateMetaSync' ), 99, 4);
|
8 |
public static $desc_length = 156;
|
9 |
public static $title_length = 69;
|
10 |
|
11 |
+
public static $metaseo_twitter_card = array(
|
12 |
+
'summary' => '',
|
13 |
+
'summary_large_image' => '',
|
14 |
+
);
|
15 |
+
|
16 |
function __construct() {
|
17 |
+
self::$metaseo_twitter_card['summary'] = __( 'Summary', 'wpms' );
|
18 |
+
self::$metaseo_twitter_card['summary_large_image'] = __( 'Summary with large image', 'wpms' );
|
19 |
+
|
20 |
$this->settings = array(
|
21 |
"metaseo_title_home"=>"",
|
22 |
"metaseo_desc_home"=>"",
|
23 |
"metaseo_showfacebook"=>"",
|
24 |
"metaseo_showtwitter"=>"",
|
25 |
+
"metaseo_twitter_card"=>"summary",
|
26 |
"metaseo_showtmetablock"=>0
|
27 |
);
|
28 |
$settings = get_option( '_metaseo_settings' );
|
202 |
add_settings_field('metaseo_desc_home', __('Homepage meta description ', 'wpms'), array( $this, 'metaseo_desc_home' ), 'metaseo_settings', 'metaseo_dashboard');
|
203 |
add_settings_field('metaseo_showfacebook', __('Facebook profile URL ', 'wpms'), array( $this, 'showfacebook' ), 'metaseo_settings', 'metaseo_dashboard');
|
204 |
add_settings_field('metaseo_showtwitter', __('Twitter Username ', 'wpms'), array( $this, 'showtwitter' ), 'metaseo_settings', 'metaseo_dashboard');
|
205 |
+
add_settings_field('metaseo_twitter_card', __('The default card type to use ', 'wpms'), array( $this, 'showtwittercard' ), 'metaseo_settings', 'metaseo_dashboard');
|
206 |
add_settings_field('metaseo_showtmetablock', __('Meta block edition ', 'wpms'), array( $this, 'showtmetablock' ), 'metaseo_settings', 'metaseo_dashboard');
|
207 |
}
|
208 |
|
247 |
echo '<input id="metaseo_showtwitter" name="_metaseo_settings[metaseo_showtwitter]" type="text" value="'.esc_attr( $twitter ).'" size="50"/>';
|
248 |
}
|
249 |
|
250 |
+
public function showtwittercard(){
|
251 |
+
$twitter_card = isset( $this->settings['metaseo_twitter_card'] ) ? $this->settings['metaseo_twitter_card'] : 'summary';
|
252 |
+
echo '<select class="select" name="_metaseo_settings[metaseo_twitter_card]" id="metaseo_twitter_card">';
|
253 |
+
foreach (self::$metaseo_twitter_card as $k => $v){
|
254 |
+
if($twitter_card == $k){
|
255 |
+
echo '<option selected value="'.$k.'">'.$v.'</option>';
|
256 |
+
}else{
|
257 |
+
echo '<option value="'.$k.'">'.$v.'</option>';
|
258 |
+
}
|
259 |
+
}
|
260 |
+
echo '</select>';
|
261 |
+
}
|
262 |
|
263 |
private function load_meta_boxes() {
|
264 |
if ( in_array( $this->pagenow, array(
|
332 |
wp_enqueue_script('jquery');
|
333 |
|
334 |
wp_enqueue_script(
|
335 |
+
'wpmetaseoAdmin', plugins_url('js/metaseo_admin.js', dirname(__FILE__)), array('jquery'), WPMSEO_VERSION, true
|
336 |
);
|
337 |
+
|
338 |
+
if($current_screen->base == 'wp-meta-seo_page_metaseo_image_meta' || $current_screen->base == 'wp-meta-seo_page_metaseo_content_meta'){
|
339 |
+
wp_enqueue_script('wpms-bulk', plugins_url('js/wpms-bulk-action.js', dirname(__FILE__)), array('jquery'), WPMSEO_VERSION, true);
|
340 |
+
wp_localize_script('wpms-bulk', 'wpmseobulkL10n', $this->meta_seo_localize_script());
|
341 |
+
}
|
342 |
+
|
343 |
if($current_screen->base == 'toplevel_page_metaseo_dashboard'){
|
344 |
+
wp_enqueue_script('Chart', plugins_url('js/Chart.js', dirname(__FILE__)), array('jquery'), WPMSEO_VERSION, true);
|
345 |
+
wp_enqueue_script('jquery-knob', plugins_url('js/jquery.knob.js', dirname(__FILE__)), array('jquery'), WPMSEO_VERSION, true);
|
346 |
+
wp_enqueue_script('metaseo-dashboard', plugins_url('js/dashboard.js', dirname(__FILE__)), array('jquery'), WPMSEO_VERSION, true);
|
347 |
wp_enqueue_style('chart', plugins_url('/css/chart.css', dirname(__FILE__) ) );
|
348 |
wp_enqueue_style('metaseo-quirk', plugins_url('/css/metaseo-quirk.css', dirname(__FILE__) ) );
|
349 |
}
|
356 |
array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
|
357 |
}
|
358 |
|
359 |
+
public function meta_seo_localize_script() {
|
360 |
+
return array(
|
361 |
+
'metaseo_message_false_copy' => __( 'We didn\'t find any element to apply a batch copy, congrats!', 'wpms' ),
|
362 |
+
);
|
363 |
+
}
|
364 |
+
|
365 |
/**
|
366 |
* Load additional admin stylesheets
|
367 |
* of jquery-ui
|
473 |
break;
|
474 |
}
|
475 |
}
|
476 |
+
}
|
477 |
+
|
478 |
+
function wpms_bulk_image_copy(){
|
479 |
+
global $wpdb;
|
480 |
+
if(empty($_POST['mtype'])) wp_send_json (false);
|
481 |
+
if(isset($_POST['sl_bulk']) && $_POST['sl_bulk'] == 'all'){
|
482 |
+
// select all
|
483 |
+
$limit = 500;
|
484 |
+
// check image alt and title empty
|
485 |
+
$margs = array(
|
486 |
+
'posts_per_page' => -1,'post_type' => 'attachment','post_status' => 'any',
|
487 |
+
'meta_query' => array(
|
488 |
+
'relation' => 'OR',
|
489 |
+
array(
|
490 |
+
'key' => '_wp_attachment_image_alt',
|
491 |
+
'compare' => 'NOT EXISTS',
|
492 |
+
),
|
493 |
+
array(
|
494 |
+
'key' => '_wp_attachment_image_alt',
|
495 |
+
'value' => false,
|
496 |
+
'type' => 'BOOLEAN'
|
497 |
+
),
|
498 |
+
));
|
499 |
+
|
500 |
+
$m_newquery = new WP_Query( $margs );
|
501 |
+
$mposts_empty_alt = $m_newquery->get_posts();
|
502 |
+
$check_title = $wpdb->get_var("SELECT COUNT(posts.ID) as total FROM ".$wpdb->prefix."posts as posts WHERE posts.post_type = 'attachment' AND post_title = ''");
|
503 |
+
|
504 |
+
switch ($_POST['mtype']){
|
505 |
+
case 'image_alt':
|
506 |
+
if(count($mposts_empty_alt) == 0 ) wp_send_json (false);
|
507 |
+
break;
|
508 |
+
|
509 |
+
case 'image_title':
|
510 |
+
if($check_title == 0) wp_send_json (false);
|
511 |
+
break;
|
512 |
+
}
|
513 |
+
|
514 |
+
// query attachment and update meta
|
515 |
+
$total = $wpdb->get_var("SELECT COUNT(posts.ID) as total FROM ".$wpdb->prefix."posts as posts WHERE posts.post_type = 'attachment'");
|
516 |
+
|
517 |
+
$j = ceil((int)$total/$limit);
|
518 |
+
for($i = 0;$i<=$j; $i++){
|
519 |
+
$ofset = $i*$limit;
|
520 |
+
$attachments = $wpdb->get_results("SELECT * FROM ".$wpdb->prefix."posts as posts
|
521 |
+
WHERE posts.post_type = 'attachment' LIMIT $limit OFFSET $ofset");
|
522 |
+
|
523 |
+
foreach ($attachments as $attachment){
|
524 |
+
$i_info_url = pathinfo($attachment->guid);
|
525 |
+
$i_alt = get_post_meta($attachment->ID,'_wp_attachment_image_alt',true);
|
526 |
+
|
527 |
+
switch ($_POST['mtype']){
|
528 |
+
case 'image_alt':
|
529 |
+
if($i_alt == ''){
|
530 |
+
update_post_meta($attachment->ID , '_wp_attachment_image_alt',$i_info_url['filename']);
|
531 |
+
}
|
532 |
+
break;
|
533 |
+
|
534 |
+
case 'image_title':
|
535 |
+
if($attachment->post_title == ''){
|
536 |
+
wp_update_post(array('ID' => $attachment->ID,'post_title' => $i_info_url['filename']));
|
537 |
+
}
|
538 |
+
break;
|
539 |
+
}
|
540 |
+
}
|
541 |
+
}
|
542 |
+
|
543 |
+
wp_send_json(true);
|
544 |
+
|
545 |
+
}else{
|
546 |
+
// selected
|
547 |
+
if(isset($_POST['ids'])){
|
548 |
+
$ids = $_POST['ids'];
|
549 |
+
$margs = array(
|
550 |
+
'posts_per_page' => -1,
|
551 |
+
'post_type' => 'attachment',
|
552 |
+
'post_status' => 'any',
|
553 |
+
'post__in' => $ids,
|
554 |
+
'meta_query' => array(
|
555 |
+
'relation' => 'OR',
|
556 |
+
array(
|
557 |
+
'key' => '_wp_attachment_image_alt',
|
558 |
+
'compare' => 'NOT EXISTS',
|
559 |
+
),
|
560 |
+
array(
|
561 |
+
'key' => '_wp_attachment_image_alt',
|
562 |
+
'value' => false,
|
563 |
+
'type' => 'BOOLEAN'
|
564 |
+
),
|
565 |
+
));
|
566 |
+
|
567 |
+
$query = "SELECT *
|
568 |
+
FROM $wpdb->posts
|
569 |
+
WHERE `post_type` = 'attachment'
|
570 |
+
AND `post_mime_type` LIKE '%image%'
|
571 |
+
AND `post_title` = ''
|
572 |
+
AND `ID` IN (". implode(',', $ids).")
|
573 |
+
";
|
574 |
+
|
575 |
+
$m_newquery = new WP_Query( $margs );
|
576 |
+
$mposts_empty_alt = $m_newquery->get_posts();
|
577 |
+
$mposts_empty_title = $wpdb->get_results($query);
|
578 |
+
|
579 |
+
switch ($_POST['mtype']){
|
580 |
+
case 'image_alt':
|
581 |
+
if(!empty($mposts_empty_alt)){
|
582 |
+
foreach ($mposts_empty_alt as $post){
|
583 |
+
$i_info_url = pathinfo($post->guid);
|
584 |
+
update_post_meta($post->ID , '_wp_attachment_image_alt',$i_info_url['filename']);
|
585 |
+
}
|
586 |
+
}else{
|
587 |
+
wp_send_json(false);
|
588 |
+
}
|
589 |
+
break;
|
590 |
+
|
591 |
+
case 'image_title':
|
592 |
+
if(!empty($mposts_empty_title)){
|
593 |
+
foreach ($mposts_empty_title as $post){
|
594 |
+
$i_info_url = pathinfo($post->guid);
|
595 |
+
wp_update_post(array('ID' => $post->ID,'post_title' => $i_info_url['filename']));
|
596 |
+
}
|
597 |
+
}else{
|
598 |
+
wp_send_json(false);
|
599 |
+
}
|
600 |
+
break;
|
601 |
+
}
|
602 |
+
wp_send_json(true);
|
603 |
+
|
604 |
+
}else{
|
605 |
+
wp_send_json(false);
|
606 |
+
}
|
607 |
+
}
|
608 |
+
|
609 |
+
|
610 |
+
}
|
611 |
+
|
612 |
+
function wpms_bulk_post_copy_title(){
|
613 |
+
$post_types = get_post_types( array('public' => true, 'exclude_from_search' => false) ) ;
|
614 |
+
unset($post_types['attachment']);
|
615 |
+
if(isset($_POST['sl_bulk']) && $_POST['sl_bulk'] == 'all'){
|
616 |
+
$margs = array(
|
617 |
+
'posts_per_page' => -1,
|
618 |
+
'post_type' => $post_types,
|
619 |
+
'post_status' => array('publish', 'pending', 'draft', 'auto-draft', 'future', 'private', 'inherit', 'trash') ,
|
620 |
+
'meta_query' => array(
|
621 |
+
'relation' => 'OR',
|
622 |
+
array(
|
623 |
+
'key' => '_metaseo_metatitle',
|
624 |
+
'compare' => 'NOT EXISTS',
|
625 |
+
),
|
626 |
+
array(
|
627 |
+
'key' => '_metaseo_metatitle',
|
628 |
+
'value' => false,
|
629 |
+
'type' => 'BOOLEAN'
|
630 |
+
),
|
631 |
+
));
|
632 |
+
}else{
|
633 |
+
if(isset($_POST['ids'])){
|
634 |
+
$ids = $_POST['ids'];
|
635 |
+
$margs = array(
|
636 |
+
'posts_per_page' => -1,
|
637 |
+
'post_type' => $post_types,
|
638 |
+
'post_status' => array('publish', 'pending', 'draft', 'auto-draft', 'future', 'private', 'inherit', 'trash') ,
|
639 |
+
'post__in' => $ids,
|
640 |
+
'meta_query' => array(
|
641 |
+
'relation' => 'OR',
|
642 |
+
array(
|
643 |
+
'key' => '_metaseo_metatitle',
|
644 |
+
'compare' => 'NOT EXISTS',
|
645 |
+
),
|
646 |
+
array(
|
647 |
+
'key' => '_metaseo_metatitle',
|
648 |
+
'value' => false,
|
649 |
+
'type' => 'BOOLEAN'
|
650 |
+
),
|
651 |
+
));
|
652 |
+
}else{
|
653 |
+
wp_send_json(false);
|
654 |
+
}
|
655 |
+
|
656 |
+
}
|
657 |
+
|
658 |
+
$m_newquery = new WP_Query( $margs );
|
659 |
+
$mposts = $m_newquery->get_posts();
|
660 |
+
if(!empty($mposts)){
|
661 |
+
foreach ($mposts as $post){
|
662 |
+
update_post_meta($post->ID , '_metaseo_metatitle',$post->post_title);
|
663 |
+
}
|
664 |
+
wp_send_json(true);
|
665 |
+
}else{
|
666 |
+
|
667 |
+
wp_send_json(false);
|
668 |
+
}
|
669 |
+
|
670 |
+
|
671 |
}
|
672 |
|
673 |
private function ajaxHandle(){
|
680 |
//
|
681 |
add_action( 'wp_ajax_import_meta_data', array('MetaSeo_Content_List_Table', 'importMetaData') );
|
682 |
add_action( 'wp_ajax_dismiss_import_meta', array('MetaSeo_Content_List_Table', 'dismissImport') );
|
683 |
+
add_action('wp_ajax_wpms_bulk_post_copy',array($this,'wpms_bulk_post_copy_title'));
|
684 |
+
add_action('wp_ajax_wpms_bulk_image_copy',array($this,'wpms_bulk_image_copy'));
|
685 |
+
|
686 |
//
|
687 |
add_action( 'added_post_meta' , array( 'MetaSeo_Content_List_Table', 'updateMetaSync' ), 99, 4);
|
688 |
add_action( 'updated_post_meta', array( 'MetaSeo_Content_List_Table', 'updateMetaSync' ), 99, 4);
|
inc/class.metaseo-content-list-table.php
CHANGED
@@ -90,7 +90,6 @@ class MetaSeo_Content_List_Table extends WP_List_Table {
|
|
90 |
}
|
91 |
|
92 |
function extra_tablenav($which) {
|
93 |
-
|
94 |
#if ('top' == $which) {
|
95 |
echo '<div class="alignleft actions">';
|
96 |
global $wpdb;
|
@@ -113,15 +112,13 @@ class MetaSeo_Content_List_Table extends WP_List_Table {
|
|
113 |
$obj = get_post_type_object($post_type->post_type);
|
114 |
$options .= sprintf('<option value="%2$s" %3$s>%1$s</option>', $obj->labels->name, $post_type->post_type, selected($selected, $post_type->post_type, false));
|
115 |
}
|
116 |
-
|
117 |
-
if($which=='top') {
|
118 |
-
echo sprintf('<select name="post_type_filter" class="metaseo-filter">%1$s</select>', $options);
|
119 |
-
submit_button(__('Filter'), 'button', 'do_filter', false, array('id' => 'post-query-submit'));
|
120 |
-
}else{
|
121 |
-
echo sprintf('<select name="post_type_filter" class="metaseo-filter">%1$s</select>', $options);
|
122 |
-
submit_button(__('Filter'), 'button', 'do_filter', false, array('id' => 'post-query-submit'));
|
123 |
-
}
|
124 |
|
|
|
|
|
|
|
|
|
|
|
|
|
125 |
echo "</div>";
|
126 |
#echo "</form>";
|
127 |
#}
|
@@ -129,6 +126,7 @@ class MetaSeo_Content_List_Table extends WP_List_Table {
|
|
129 |
|
130 |
function get_columns() {
|
131 |
return $columns = array(
|
|
|
132 |
'col_id' => __('', 'wpms'),
|
133 |
'col_title' => __('Title', 'wpms'),
|
134 |
'col_meta_title' => __('Meta Title', 'wpms'),
|
@@ -256,14 +254,13 @@ class MetaSeo_Content_List_Table extends WP_List_Table {
|
|
256 |
}
|
257 |
|
258 |
function display_rows() {
|
259 |
-
|
260 |
$records = $this->items;
|
261 |
$i = 0;
|
262 |
$alternate = "";
|
263 |
$url = preg_replace('/(http|https):\/\/[w]*[.]?/', '', network_site_url('/'));
|
264 |
|
265 |
list( $columns, $hidden ) = $this->get_column_info();
|
266 |
-
|
267 |
if (!empty($records)) {
|
268 |
foreach ($records as $rec) {
|
269 |
$alternate = 'alternate' == $alternate ? '' : 'alternate';
|
@@ -285,6 +282,13 @@ class MetaSeo_Content_List_Table extends WP_List_Table {
|
|
285 |
$attributes = $class . $style;
|
286 |
|
287 |
switch ($column_name) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
288 |
case 'col_id':
|
289 |
echo '<td class="col_id" >';
|
290 |
echo $i;
|
@@ -378,6 +382,7 @@ class MetaSeo_Content_List_Table extends WP_List_Table {
|
|
378 |
}
|
379 |
|
380 |
function process_action() {
|
|
|
381 |
$current_url = set_url_scheme('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
|
382 |
$redirect = false;
|
383 |
|
90 |
}
|
91 |
|
92 |
function extra_tablenav($which) {
|
|
|
93 |
#if ('top' == $which) {
|
94 |
echo '<div class="alignleft actions">';
|
95 |
global $wpdb;
|
112 |
$obj = get_post_type_object($post_type->post_type);
|
113 |
$options .= sprintf('<option value="%2$s" %3$s>%1$s</option>', $obj->labels->name, $post_type->post_type, selected($selected, $post_type->post_type, false));
|
114 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
115 |
|
116 |
+
$sl_bulk = '<select name="mbulk_copy" class="mbulk_copy"><option value="0">'.__('Bulk Copy','wpms').'</option><option value="all">'.__('All Posts','wpms').'</option><option value="bulk-copy-metatitle">'.__('Selected posts','wpms').'</option></select>';
|
117 |
+
$btn_bulk = '<input type="button" name="do_copy" id="post_do_copy" class="button button-primary btn_do_copy post_do_copy" value="'.__('Content title as meta title','wpms').'"><span class="spinner"></span>';
|
118 |
+
|
119 |
+
echo sprintf('<select name="post_type_filter" class="metaseo-filter">%1$s</select>', $options);
|
120 |
+
submit_button(__('Filter'), 'button', 'do_filter', false, array('id' => 'post-query-submit'));
|
121 |
+
echo $sl_bulk . $btn_bulk;
|
122 |
echo "</div>";
|
123 |
#echo "</form>";
|
124 |
#}
|
126 |
|
127 |
function get_columns() {
|
128 |
return $columns = array(
|
129 |
+
'cb' => '<input id="cb-select-all-1" type="checkbox" style="margin:0">',
|
130 |
'col_id' => __('', 'wpms'),
|
131 |
'col_title' => __('Title', 'wpms'),
|
132 |
'col_meta_title' => __('Meta Title', 'wpms'),
|
254 |
}
|
255 |
|
256 |
function display_rows() {
|
|
|
257 |
$records = $this->items;
|
258 |
$i = 0;
|
259 |
$alternate = "";
|
260 |
$url = preg_replace('/(http|https):\/\/[w]*[.]?/', '', network_site_url('/'));
|
261 |
|
262 |
list( $columns, $hidden ) = $this->get_column_info();
|
263 |
+
|
264 |
if (!empty($records)) {
|
265 |
foreach ($records as $rec) {
|
266 |
$alternate = 'alternate' == $alternate ? '' : 'alternate';
|
282 |
$attributes = $class . $style;
|
283 |
|
284 |
switch ($column_name) {
|
285 |
+
case 'cb':
|
286 |
+
echo '<th scope="row" class="check-column">';
|
287 |
+
echo '<input id="cb-select-1" class="metaseo_post" type="checkbox" name="post[]" value="'.$rec->ID.'">';
|
288 |
+
echo '</th>';
|
289 |
+
|
290 |
+
break;
|
291 |
+
|
292 |
case 'col_id':
|
293 |
echo '<td class="col_id" >';
|
294 |
echo $i;
|
382 |
}
|
383 |
|
384 |
function process_action() {
|
385 |
+
|
386 |
$current_url = set_url_scheme('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
|
387 |
$redirect = false;
|
388 |
|
inc/class.metaseo-dashboard.php
CHANGED
@@ -182,7 +182,7 @@ class MetaSeo_Dashboard {
|
|
182 |
}
|
183 |
|
184 |
$html = trim($tmp_dom->saveHTML());
|
185 |
-
$html = str_replace('We don\'t have', 'Alexa doesn\'t
|
186 |
$html = str_replace('Get Certified', '', $html);
|
187 |
$html = str_replace('"/topsites/countries', '"http://www.alexa.com/topsites/countries', $html);
|
188 |
return $html;
|
182 |
}
|
183 |
|
184 |
$html = trim($tmp_dom->saveHTML());
|
185 |
+
$html = str_replace('We don\'t have', __('Alexa doesn\'t have','wpms'), $html);
|
186 |
$html = str_replace('Get Certified', '', $html);
|
187 |
$html = str_replace('"/topsites/countries', '"http://www.alexa.com/topsites/countries', $html);
|
188 |
return $html;
|
inc/class.metaseo-image-list-table.php
CHANGED
@@ -38,7 +38,18 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
|
|
38 |
<?php $this->months_fillter('attachment','sldate1','filter_date_action'); ?>
|
39 |
</div>
|
40 |
<?php endif ?>
|
41 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
<input type="hidden" name="page" value="metaseo_image_meta" />
|
43 |
<?php if (!empty($_REQUEST['post_status'])): ?>
|
44 |
<input type="hidden" name="post_status" value="<?php echo esc_attr($_REQUEST['post_status']); ?>" />
|
@@ -103,7 +114,7 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
|
|
103 |
|
104 |
function extra_tablenav($which) {
|
105 |
|
106 |
-
#if ('top' == $which) {
|
107 |
echo '<div class="alignleft actions">';
|
108 |
global $wpdb;
|
109 |
|
@@ -125,7 +136,7 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
|
|
125 |
$obj = get_post_type_object($post_type->post_type);
|
126 |
$options .= sprintf('<option value="%2$s" %3$s>%1$s</option>', $obj->labels->name, $post_type->post_type, selected($selected, $post_type->post_type, false));
|
127 |
}
|
128 |
-
|
129 |
echo "</div>";
|
130 |
#echo "</form>";
|
131 |
#}
|
@@ -133,6 +144,7 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
|
|
133 |
|
134 |
function get_columns() {
|
135 |
return $columns = array(
|
|
|
136 |
'col_id' => __('ID', 'wpms'),
|
137 |
'col_image' => __('Image', 'wpms'),
|
138 |
'col_image_name' => __('Name', 'wpms'),
|
@@ -179,7 +191,7 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
|
|
179 |
if ( ! empty( $columns['cb'] ) ) {
|
180 |
static $cb_counter = 1;
|
181 |
$columns['cb'] = '<label class="screen-reader-text" for="cb-select-all-' . $cb_counter . '">' . __( 'Select All' ) . '</label>'
|
182 |
-
. '<input id="cb-select-all-' . $cb_counter . '" type="checkbox" />';
|
183 |
$cb_counter++;
|
184 |
}
|
185 |
|
@@ -227,9 +239,11 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
|
|
227 |
elseif($column_key === 'col_image_info'){
|
228 |
echo "<th scope='col' $id $class $style colspan=\"5\">$column_display_name</th>";
|
229 |
}
|
230 |
-
|
231 |
-
|
232 |
-
}
|
|
|
|
|
233 |
}
|
234 |
}
|
235 |
|
@@ -432,7 +446,6 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
|
|
432 |
}
|
433 |
|
434 |
echo '<tr id="record_' . $rec->ID . '" class="' . $classes . '" >';
|
435 |
-
|
436 |
foreach ($columns as $column_name => $column_display_name) {
|
437 |
|
438 |
$class = sprintf('class="%1$s column-%1$s"', $column_name);
|
@@ -445,6 +458,12 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
|
|
445 |
$attributes = $class . $style;
|
446 |
|
447 |
switch ($column_name) {
|
|
|
|
|
|
|
|
|
|
|
|
|
448 |
case 'col_id':
|
449 |
echo '<td class="col_id" colspan="1">';
|
450 |
echo $i;
|
38 |
<?php $this->months_fillter('attachment','sldate1','filter_date_action'); ?>
|
39 |
</div>
|
40 |
<?php endif ?>
|
41 |
+
|
42 |
+
<div class="alignleft">
|
43 |
+
<select name="image_mbulk_copy" class="mbulk_copy">
|
44 |
+
<option value="0"><?php _e('Bulk Copy','wpms') ?></option>
|
45 |
+
<option value="all"><?php _e('All Images','wpms') ?></option>
|
46 |
+
<option value="bulk-copy-title-alt"><?php _e('Selected images','wpms') ?></option>
|
47 |
+
</select>
|
48 |
+
<input type="button" name="image_do_copy_alt" class="button button-primary btn_do_copy image_do_copy_alt" value="<?php _e('Image name as alt text','wpms') ?>">
|
49 |
+
<input type="button" name="image_do_copy_title" class="button button-primary btn_do_copy image_do_copy_title" value="<?php _e('Image name as image title','wpms') ?>">
|
50 |
+
<span class="spinner"></span>
|
51 |
+
</div>
|
52 |
+
|
53 |
<input type="hidden" name="page" value="metaseo_image_meta" />
|
54 |
<?php if (!empty($_REQUEST['post_status'])): ?>
|
55 |
<input type="hidden" name="post_status" value="<?php echo esc_attr($_REQUEST['post_status']); ?>" />
|
114 |
|
115 |
function extra_tablenav($which) {
|
116 |
|
117 |
+
#if ('top' == $which) {
|
118 |
echo '<div class="alignleft actions">';
|
119 |
global $wpdb;
|
120 |
|
136 |
$obj = get_post_type_object($post_type->post_type);
|
137 |
$options .= sprintf('<option value="%2$s" %3$s>%1$s</option>', $obj->labels->name, $post_type->post_type, selected($selected, $post_type->post_type, false));
|
138 |
}
|
139 |
+
|
140 |
echo "</div>";
|
141 |
#echo "</form>";
|
142 |
#}
|
144 |
|
145 |
function get_columns() {
|
146 |
return $columns = array(
|
147 |
+
'cb' => '<input id="cb-select-all-1" type="checkbox">',
|
148 |
'col_id' => __('ID', 'wpms'),
|
149 |
'col_image' => __('Image', 'wpms'),
|
150 |
'col_image_name' => __('Name', 'wpms'),
|
191 |
if ( ! empty( $columns['cb'] ) ) {
|
192 |
static $cb_counter = 1;
|
193 |
$columns['cb'] = '<label class="screen-reader-text" for="cb-select-all-' . $cb_counter . '">' . __( 'Select All' ) . '</label>'
|
194 |
+
. '<input id="cb-select-all-' . $cb_counter . '" type="checkbox" style="margin:0;" />';
|
195 |
$cb_counter++;
|
196 |
}
|
197 |
|
239 |
elseif($column_key === 'col_image_info'){
|
240 |
echo "<th scope='col' $id $class $style colspan=\"5\">$column_display_name</th>";
|
241 |
}
|
242 |
+
elseif($column_key === 'cb'){
|
243 |
+
echo "<th scope='col' $id $class style='padding:8px 10px;'>$column_display_name</th>";
|
244 |
+
}else{
|
245 |
+
echo "<th scope='col' $id $class $style colspan=\"3\">$column_display_name</th>";
|
246 |
+
}
|
247 |
}
|
248 |
}
|
249 |
|
446 |
}
|
447 |
|
448 |
echo '<tr id="record_' . $rec->ID . '" class="' . $classes . '" >';
|
|
|
449 |
foreach ($columns as $column_name => $column_display_name) {
|
450 |
|
451 |
$class = sprintf('class="%1$s column-%1$s"', $column_name);
|
458 |
$attributes = $class . $style;
|
459 |
|
460 |
switch ($column_name) {
|
461 |
+
case 'cb':
|
462 |
+
echo '<td scope="row" class="check-column" style="padding:8px 10px;">';
|
463 |
+
echo '<input id="cb-select-1" class="metaseo_post" type="checkbox" name="post[]" value="'.$rec->ID.'">';
|
464 |
+
echo '</td>';
|
465 |
+
break;
|
466 |
+
|
467 |
case 'col_id':
|
468 |
echo '<td class="col_id" colspan="1">';
|
469 |
echo $i;
|
inc/class.metaseo-metabox.php
CHANGED
@@ -167,23 +167,16 @@ class WPMSEO_Metabox extends WPMSEO_Meta {
|
|
167 |
$cached_replacement_vars = array();
|
168 |
|
169 |
$vars_to_cache = array(
|
170 |
-
'date',
|
171 |
-
'id',
|
172 |
-
'sitename',
|
173 |
'sitedesc',
|
174 |
'sep',
|
175 |
'page',
|
176 |
-
'currenttime',
|
177 |
-
'currentdate',
|
178 |
-
'currentday',
|
179 |
-
'currentmonth',
|
180 |
-
'currentyear',
|
181 |
);
|
182 |
-
|
183 |
foreach ($vars_to_cache as $var) {
|
184 |
$cached_replacement_vars[$var] = $var;
|
185 |
}
|
186 |
-
|
|
|
187 |
return array_merge($cached_replacement_vars, array(
|
188 |
'field_prefix' => self::$form_prefix,
|
189 |
'choose_image' => __('Use Image', 'wpms'),
|
167 |
$cached_replacement_vars = array();
|
168 |
|
169 |
$vars_to_cache = array(
|
|
|
|
|
|
|
170 |
'sitedesc',
|
171 |
'sep',
|
172 |
'page',
|
|
|
|
|
|
|
|
|
|
|
173 |
);
|
174 |
+
|
175 |
foreach ($vars_to_cache as $var) {
|
176 |
$cached_replacement_vars[$var] = $var;
|
177 |
}
|
178 |
+
|
179 |
+
$cached_replacement_vars['sitename'] = get_option('blogname');
|
180 |
return array_merge($cached_replacement_vars, array(
|
181 |
'field_prefix' => self::$form_prefix,
|
182 |
'choose_image' => __('Use Image', 'wpms'),
|
js/dashboard-chart.js
DELETED
@@ -1,84 +0,0 @@
|
|
1 |
-
function optimizationChecking(call_back) {
|
2 |
-
var ret;
|
3 |
-
jQuery.ajax({
|
4 |
-
url: myAjax.ajax_url,
|
5 |
-
async: false,
|
6 |
-
type: 'post',
|
7 |
-
data: {'action': 'opt_checking'},
|
8 |
-
dataType: 'json',
|
9 |
-
beforeSend: function() {
|
10 |
-
},
|
11 |
-
success: function(response) {
|
12 |
-
ret = response;
|
13 |
-
for (sid in response) {
|
14 |
-
jQuery('#' + sid).removeClass('hz-loading').text(response[sid][0] + '/' + response[sid][1]);
|
15 |
-
}
|
16 |
-
if (typeof (call_back) == "function") {
|
17 |
-
call_back(response);
|
18 |
-
}
|
19 |
-
},
|
20 |
-
error: function() {
|
21 |
-
|
22 |
-
}
|
23 |
-
|
24 |
-
});
|
25 |
-
|
26 |
-
return ret;
|
27 |
-
}
|
28 |
-
|
29 |
-
|
30 |
-
function drawChart(metacontent,notmetacontent, imagemeta,notimagemeta, imageoptimi,notimageoptimi) {
|
31 |
-
|
32 |
-
var doughnutData = [
|
33 |
-
{
|
34 |
-
value: metacontent,
|
35 |
-
color: "rgba(92,155,213,1)",
|
36 |
-
highlight: "#5c9bd5",
|
37 |
-
label: "Content Meta- Completed"
|
38 |
-
},
|
39 |
-
{
|
40 |
-
value: notmetacontent,
|
41 |
-
color: "#CECECE",
|
42 |
-
label: "Content Meta- Imcompleted"
|
43 |
-
},
|
44 |
-
{
|
45 |
-
value: imagemeta,
|
46 |
-
color: "rgba(241,145,79,1)",
|
47 |
-
highlight: "#ed7d31",
|
48 |
-
label: "Image Meta - Completed"
|
49 |
-
},
|
50 |
-
{
|
51 |
-
value: notimagemeta,
|
52 |
-
color: "#CECECE",
|
53 |
-
label: "Image Meta - Imcompleted"
|
54 |
-
},
|
55 |
-
|
56 |
-
{
|
57 |
-
value: imageoptimi,
|
58 |
-
color: "rgba(70,191,189,1)",
|
59 |
-
highlight: "#46BFBD",
|
60 |
-
label: "Image Optimized"
|
61 |
-
},
|
62 |
-
{
|
63 |
-
value: notimageoptimi,
|
64 |
-
color: "#CECECE",
|
65 |
-
label: "Image not Optimized"
|
66 |
-
}
|
67 |
-
|
68 |
-
|
69 |
-
];
|
70 |
-
|
71 |
-
var ctx = document.getElementById("chart-area").getContext("2d");
|
72 |
-
window.myDoughnut = new Chart(ctx).Doughnut(doughnutData, {
|
73 |
-
responsive: true,
|
74 |
-
tooltipTitleFontSize: 13,
|
75 |
-
tooltipXOffset: 5,
|
76 |
-
tooltipTemplate: "<%if (label){%><%=label%>: <%}%><%= ((value*3) %1 !=0)?(value*3).toFixed(2):(value*3) %> %",
|
77 |
-
percentageInnerCutout: 70,
|
78 |
-
scaleShowLabels: true,
|
79 |
-
segmentShowStroke : false,
|
80 |
-
|
81 |
-
});
|
82 |
-
|
83 |
-
|
84 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
js/metaseo_admin.js
CHANGED
@@ -655,6 +655,15 @@ jQuery(document).ready(function($) {
|
|
655 |
}
|
656 |
});
|
657 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
658 |
|
659 |
$('.metaseo-img-name').bind('input propertychange', function() {
|
660 |
var savedInfo = $(this).parent().find('span.saved-info');
|
655 |
}
|
656 |
});
|
657 |
});
|
658 |
+
|
659 |
+
$('.mbulk_copy').bind('change', function(){
|
660 |
+
var value = $(this).val();
|
661 |
+
$('.mbulk_copy').each(function(i,e){
|
662 |
+
if($(e).val() != value){
|
663 |
+
$(e).val(value);
|
664 |
+
}
|
665 |
+
});
|
666 |
+
});
|
667 |
|
668 |
$('.metaseo-img-name').bind('input propertychange', function() {
|
669 |
var savedInfo = $(this).parent().find('span.saved-info');
|
js/wp-metaseo-metabox.js
CHANGED
@@ -27,16 +27,8 @@ function msReplaceVariables(str, callback) {
|
|
27 |
str = str.replace(/%%sitedesc%%/g, wpmseoMetaboxL10n.sitedesc);
|
28 |
str = str.replace(/%%sitename%%/g, wpmseoMetaboxL10n.sitename);
|
29 |
str = str.replace(/%%sep%%/g, wpmseoMetaboxL10n.sep);
|
30 |
-
str = str.replace(/%%date%%/g, wpmseoMetaboxL10n.date);
|
31 |
-
str = str.replace(/%%id%%/g, wpmseoMetaboxL10n.id);
|
32 |
str = str.replace(/%%page%%/g, wpmseoMetaboxL10n.page);
|
33 |
-
|
34 |
-
str = str.replace(/%%currentdate%%/g, wpmseoMetaboxL10n.currentdate);
|
35 |
-
str = str.replace(/%%currentday%%/g, wpmseoMetaboxL10n.currentday);
|
36 |
-
str = str.replace(/%%currentmonth%%/g, wpmseoMetaboxL10n.currentmonth);
|
37 |
-
str = str.replace(/%%currentyear%%/g, wpmseoMetaboxL10n.currentyear);
|
38 |
-
|
39 |
-
// str = str.replace(/%%mfocuskw%%/g, jQuery('#metaseo_wpmseo_mfocuskw').val().replace(/(<([^>]+)>)/ig, ''));
|
40 |
// excerpt
|
41 |
var excerpt = '';
|
42 |
if (jQuery('#excerpt').length) {
|
27 |
str = str.replace(/%%sitedesc%%/g, wpmseoMetaboxL10n.sitedesc);
|
28 |
str = str.replace(/%%sitename%%/g, wpmseoMetaboxL10n.sitename);
|
29 |
str = str.replace(/%%sep%%/g, wpmseoMetaboxL10n.sep);
|
|
|
|
|
30 |
str = str.replace(/%%page%%/g, wpmseoMetaboxL10n.page);
|
31 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
32 |
// excerpt
|
33 |
var excerpt = '';
|
34 |
if (jQuery('#excerpt').length) {
|
js/wpms-bulk-action.js
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
jQuery(document).ready(function ($) {
|
2 |
+
|
3 |
+
$('.tablenav.top #post-query-submit , .tablenav.bottom #post-query-submit').click(function (e) {
|
4 |
+
if ($('.metaseo-filter').val() == 'bulk-copy-metatitle') {
|
5 |
+
e.preventDefault();
|
6 |
+
$('#bulk-copy-metatitle').show();
|
7 |
+
}
|
8 |
+
});
|
9 |
+
|
10 |
+
$('.btn_do_copy').click(function (e) {
|
11 |
+
var $this = $(this);
|
12 |
+
var sl_bulk = $('.mbulk_copy').val();
|
13 |
+
if (sl_bulk == 0)
|
14 |
+
return;
|
15 |
+
|
16 |
+
var mpost_selected = [];
|
17 |
+
if (sl_bulk != 'all') {
|
18 |
+
$(".metaseo_post").each(function (index) {
|
19 |
+
if ($(this).is(':checked')) {
|
20 |
+
mpost_selected.push($(this).val());
|
21 |
+
}
|
22 |
+
});
|
23 |
+
}
|
24 |
+
|
25 |
+
if ($this.hasClass('post_do_copy')) {
|
26 |
+
var maction = 'wpms_bulk_post_copy';
|
27 |
+
var mtype = 'post_title';
|
28 |
+
} else {
|
29 |
+
var maction = 'wpms_bulk_image_copy';
|
30 |
+
if($this.hasClass('image_do_copy_alt')){
|
31 |
+
var mtype = 'image_alt';
|
32 |
+
}else{
|
33 |
+
var mtype = 'image_title';
|
34 |
+
}
|
35 |
+
}
|
36 |
+
|
37 |
+
$this.closest('.tablenav').find('.spinner').show().css('visibility', 'visible');
|
38 |
+
$.ajax({
|
39 |
+
url: ajaxurl,
|
40 |
+
method: 'POST',
|
41 |
+
dataType: 'json',
|
42 |
+
data: {
|
43 |
+
action: maction,
|
44 |
+
ids: mpost_selected,
|
45 |
+
sl_bulk: sl_bulk,
|
46 |
+
mtype:mtype
|
47 |
+
},
|
48 |
+
success: function (res) {
|
49 |
+
if (res == true) {
|
50 |
+
window.location.assign(document.URL);
|
51 |
+
} else {
|
52 |
+
alert(wpmseobulkL10n.metaseo_message_false_copy);
|
53 |
+
}
|
54 |
+
$this.closest('.tablenav').find('.spinner').hide();
|
55 |
+
}
|
56 |
+
|
57 |
+
});
|
58 |
+
});
|
59 |
+
|
60 |
+
});
|
languages/wpms-en_GB.mo
CHANGED
Binary file
|
languages/wpms-en_GB.po
CHANGED
@@ -9,7 +9,7 @@ msgstr ""
|
|
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.
|
13 |
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
14 |
|
15 |
msgid "Twitter username (without @)"
|
@@ -378,6 +378,60 @@ msgstr "Homepage meta title "
|
|
378 |
msgid "Homepage meta description "
|
379 |
msgstr "Homepage meta description "
|
380 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
381 |
#~ msgid ""
|
382 |
#~ " This is a rendering of what this content might looks like in Google's "
|
383 |
#~ "search results."
|
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.7.4\n"
|
13 |
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
14 |
|
15 |
msgid "Twitter username (without @)"
|
378 |
msgid "Homepage meta description "
|
379 |
msgstr "Homepage meta description "
|
380 |
|
381 |
+
msgid "Bulk Copy"
|
382 |
+
msgstr "Bulk Copy"
|
383 |
+
|
384 |
+
msgid "All Posts"
|
385 |
+
msgstr "All Posts"
|
386 |
+
|
387 |
+
msgid "Selected posts"
|
388 |
+
msgstr "Selected posts"
|
389 |
+
|
390 |
+
msgid "Content title as meta title"
|
391 |
+
msgstr "Content title as meta title"
|
392 |
+
|
393 |
+
msgid "All Images"
|
394 |
+
msgstr "All Images"
|
395 |
+
|
396 |
+
msgid "Selected images"
|
397 |
+
msgstr "Selected images"
|
398 |
+
|
399 |
+
msgid "Image name as alt text"
|
400 |
+
msgstr "Image name as alt text"
|
401 |
+
|
402 |
+
msgid "Image name as image title"
|
403 |
+
msgstr "Image name as image title"
|
404 |
+
|
405 |
+
msgid "We didn't find any element to apply a batch copy, congrats!"
|
406 |
+
msgstr "We didn't find any element to apply a batch copy, congrats!"
|
407 |
+
|
408 |
+
msgid "The default card type to use "
|
409 |
+
msgstr "The default card type to use "
|
410 |
+
|
411 |
+
msgid "Summary"
|
412 |
+
msgstr "Summary"
|
413 |
+
|
414 |
+
msgid "Summary with large image"
|
415 |
+
msgstr "Summary with large image"
|
416 |
+
|
417 |
+
msgid "Optimized at"
|
418 |
+
msgstr "Optimized at"
|
419 |
+
|
420 |
+
msgid "Wrong resized images"
|
421 |
+
msgstr "Wrong resized images"
|
422 |
+
|
423 |
+
msgid "Latest month new or updated content"
|
424 |
+
msgstr "Latest month new or updated content"
|
425 |
+
|
426 |
+
msgid "Image data filled (in content)"
|
427 |
+
msgstr "Image data filled (in content)"
|
428 |
+
|
429 |
+
msgid "More information about WP Meta SEO"
|
430 |
+
msgstr "More information about WP Meta SEO"
|
431 |
+
|
432 |
+
msgid "Other plugins from JoomUnited"
|
433 |
+
msgstr "Other plugins from JoomUnited"
|
434 |
+
|
435 |
#~ msgid ""
|
436 |
#~ " This is a rendering of what this content might looks like in Google's "
|
437 |
#~ "search results."
|
languages/wpms-fr_FR.mo
CHANGED
Binary file
|
languages/wpms-fr_FR.po
CHANGED
@@ -9,7 +9,7 @@ msgstr ""
|
|
9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
11 |
"Language: fr_FR\n"
|
12 |
-
"X-Generator: Poedit 1.
|
13 |
|
14 |
msgid "Twitter username (without @)"
|
15 |
msgstr "ID Twitter (sans le @)"
|
@@ -316,3 +316,57 @@ msgstr "Meta info page d'accueil"
|
|
316 |
|
317 |
msgid "Homepage meta description "
|
318 |
msgstr "Description page d'accueil"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
10 |
"Content-Transfer-Encoding: 8bit\n"
|
11 |
"Language: fr_FR\n"
|
12 |
+
"X-Generator: Poedit 1.7.4\n"
|
13 |
|
14 |
msgid "Twitter username (without @)"
|
15 |
msgstr "ID Twitter (sans le @)"
|
316 |
|
317 |
msgid "Homepage meta description "
|
318 |
msgstr "Description page d'accueil"
|
319 |
+
|
320 |
+
msgid "Bulk Copy"
|
321 |
+
msgstr "Copy par lot"
|
322 |
+
|
323 |
+
msgid "All Posts"
|
324 |
+
msgstr "Tous les posts"
|
325 |
+
|
326 |
+
msgid "Selected posts"
|
327 |
+
msgstr "Sélection de contenu"
|
328 |
+
|
329 |
+
msgid "Content title as meta title"
|
330 |
+
msgstr "Titre contenu > meta titre"
|
331 |
+
|
332 |
+
msgid "All Images"
|
333 |
+
msgstr "Toutes les images"
|
334 |
+
|
335 |
+
msgid "Selected images"
|
336 |
+
msgstr "Sélection d'images"
|
337 |
+
|
338 |
+
msgid "Image name as alt text"
|
339 |
+
msgstr "Nom image > alt texte"
|
340 |
+
|
341 |
+
msgid "Image name as image title"
|
342 |
+
msgstr "Nom image > titre d'image"
|
343 |
+
|
344 |
+
msgid "We didn't find any element to apply a batch copy, congrats!"
|
345 |
+
msgstr "Aucun élément sur le quel appliquer une action, félicitations !"
|
346 |
+
|
347 |
+
msgid "The default card type to use "
|
348 |
+
msgstr "Type de Twitter card par défaut"
|
349 |
+
|
350 |
+
msgid "Summary"
|
351 |
+
msgstr "Sommaire"
|
352 |
+
|
353 |
+
msgid "Summary with large image"
|
354 |
+
msgstr "Sommaire avec large image"
|
355 |
+
|
356 |
+
msgid "Optimized at"
|
357 |
+
msgstr "Optimisé à"
|
358 |
+
|
359 |
+
msgid "Wrong resized images"
|
360 |
+
msgstr "Image redimentionnées"
|
361 |
+
|
362 |
+
msgid "Latest month new or updated content"
|
363 |
+
msgstr "Contenu ajouté ou mis à jour le mois dernier"
|
364 |
+
|
365 |
+
msgid "Image data filled (in content)"
|
366 |
+
msgstr "Informations images complétées"
|
367 |
+
|
368 |
+
msgid "More information about WP Meta SEO"
|
369 |
+
msgstr "Plus d'info sur le plugin WP Meta SEO"
|
370 |
+
|
371 |
+
msgid "Other plugins from JoomUnited"
|
372 |
+
msgstr "Autres plugin de JoomUnited"
|
languages/wpms.pot
CHANGED
@@ -11,6 +11,7 @@ msgstr ""
|
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
"Language: en_GB\n"
|
13 |
"X-Generator: Poedit 1.8.5\n"
|
|
|
14 |
|
15 |
msgid "Twitter username (without @)"
|
16 |
msgstr ""
|
@@ -317,3 +318,64 @@ msgstr ""
|
|
317 |
|
318 |
msgid "Homepage meta description "
|
319 |
msgstr ""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
"Language: en_GB\n"
|
13 |
"X-Generator: Poedit 1.8.5\n"
|
14 |
+
"X-Poedit-SourceCharset: UTF-8\n"
|
15 |
|
16 |
msgid "Twitter username (without @)"
|
17 |
msgstr ""
|
318 |
|
319 |
msgid "Homepage meta description "
|
320 |
msgstr ""
|
321 |
+
|
322 |
+
msgid "Bulk copy"
|
323 |
+
msgstr ""
|
324 |
+
|
325 |
+
msgid "All content"
|
326 |
+
msgstr ""
|
327 |
+
|
328 |
+
msgid "Selected posts"
|
329 |
+
msgstr ""
|
330 |
+
|
331 |
+
msgid "Content title as meta title"
|
332 |
+
msgstr ""
|
333 |
+
|
334 |
+
msgid "All images"
|
335 |
+
msgstr ""
|
336 |
+
|
337 |
+
msgid "Selected images"
|
338 |
+
msgstr ""
|
339 |
+
|
340 |
+
msgid "Image name as alt text"
|
341 |
+
msgstr ""
|
342 |
+
|
343 |
+
msgid "Image name as image title"
|
344 |
+
msgstr ""
|
345 |
+
|
346 |
+
msgid "We didn't find any element to apply a batch copy, congrats!"
|
347 |
+
msgstr ""
|
348 |
+
|
349 |
+
msgid "The default card type to use "
|
350 |
+
msgstr ""
|
351 |
+
|
352 |
+
msgid "Summary"
|
353 |
+
msgstr ""
|
354 |
+
|
355 |
+
msgid "Summary with large image"
|
356 |
+
msgstr ""
|
357 |
+
|
358 |
+
msgid "Optimized at"
|
359 |
+
msgstr ""
|
360 |
+
|
361 |
+
msgid "Wrong resized images"
|
362 |
+
msgstr ""
|
363 |
+
|
364 |
+
msgid "Latest month new or updated content"
|
365 |
+
msgstr ""
|
366 |
+
|
367 |
+
msgid "Image data filled (in content)"
|
368 |
+
msgstr ""
|
369 |
+
|
370 |
+
msgid "More information about WP Meta SEO"
|
371 |
+
msgstr ""
|
372 |
+
|
373 |
+
msgid "Other plugins from JoomUnited"
|
374 |
+
msgstr ""
|
375 |
+
|
376 |
+
msgid "More information about WP Meta SEO"
|
377 |
+
msgstr ""
|
378 |
+
|
379 |
+
msgid "Other plugins from JoomUnited"
|
380 |
+
msgstr ""
|
381 |
+
|
readme.txt
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
=== WP Meta SEO ===
|
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
|
4 |
Requires at least: 4.0
|
5 |
Tested up to: 4.3.1
|
6 |
Stable tag: 1.3.0
|
@@ -25,15 +25,21 @@ WP Meta SEO gives you the control over all your meta content and images. Bulk SE
|
|
25 |
|
26 |
It was annoying to edit meta on an existing website, open each post, page and almost nobody was doing it. Especially if you need to edit content + image meta.
|
27 |
WP Meta SEO is going to list all posts, pages, custom post types and all images. Type your meta content and fix image size and everything is AJAX saved.
|
28 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
|
30 |
|
31 |
= On page SEO optimization and analysis =
|
32 |
|
33 |
* Content SEO smart analysis bellow content
|
34 |
* Search engine snippet preview
|
35 |
-
* AJAX analysis refresh
|
36 |
-
* 7 criteria of analysis
|
37 |
* Check: Page title word in content heading
|
38 |
* Check: Page title word in content
|
39 |
* Check: Page URL matches with page title
|
@@ -48,28 +54,32 @@ A bunch of people reduce the size of the pictures handling the border and resizi
|
|
48 |
[vimeo https://vimeo.com/113695156]
|
49 |
|
50 |
|
51 |
-
= SEO features list =
|
52 |
|
53 |
-
* Reduce page weight by
|
54 |
* All alt tags edition on single view
|
55 |
* See all your snippet in one view
|
56 |
* Image name, title, description and legend
|
57 |
* Dashboard SEO check
|
58 |
-
* Automatic AJAX saving
|
59 |
* On page analysis: fix SEO criteria
|
60 |
-
* Custom type
|
|
|
61 |
* Yoast SEO import & sync
|
62 |
-
*
|
63 |
-
*
|
64 |
-
*
|
65 |
-
*
|
66 |
-
*
|
67 |
-
*
|
|
|
68 |
* Image date filtering
|
69 |
* Content meta length limit (Google + Yahoo + Bing)
|
70 |
* SEO problem warning
|
71 |
* Bulk image resizing
|
72 |
* One click image title copy
|
|
|
|
|
73 |
|
74 |
= Main plugins from JoomUnited: =
|
75 |
* WP Media Folder: https://www.joomunited.com/wordpress-products/wp-media-folder
|
@@ -80,7 +90,8 @@ A bunch of people reduce the size of the pictures handling the border and resizi
|
|
80 |
|
81 |
= Support =
|
82 |
|
83 |
-
A PDF support document is provided
|
|
|
84 |
**More details here:** http://www.joomunited.com/wordpress-products/wp-meta-seo
|
85 |
|
86 |
== Installation ==
|
@@ -88,23 +99,32 @@ A PDF support document is provided and a dedicated support can be provided addit
|
|
88 |
= To install the automatically: =
|
89 |
* Through WordPress admin, use the menu: Plugin > Add new
|
90 |
* Search for WP Meta SEO
|
91 |
-
* Click on install then activate link
|
92 |
|
93 |
= To install the plugin manually: =
|
94 |
* Download and unzip the plugin wp-meta-seo.zip
|
95 |
-
* Upload the seo
|
96 |
-
* Activate the plugin through the 'Plugins' menu in WordPress
|
|
|
97 |
|
98 |
Once the plugin is installed, open the bulk edition through the admin menu or open a content to load SEO on page analysis
|
99 |
|
100 |
== Frequently Asked Questions ==
|
101 |
|
102 |
-
=
|
103 |
-
|
|
|
|
|
|
|
|
|
104 |
|
105 |
= Is WP Meta SEO slowing down my website? =
|
106 |
Nope :) All your SEO content is properly stored in the database and automatic SEO checks are also cached or run every 72 hours (unless you force the process)
|
107 |
|
|
|
|
|
|
|
|
|
108 |
= Compatibility =
|
109 |
What's the minimum version of WordPress required to run WP Meta SEO? WordPress 4.0 is required. WP Meta SEO may generate PHP errors if you tried to run it on an earlier version, and so it will simply refuse to activate on any version of WordPress that's older than 4.0
|
110 |
|
@@ -116,6 +136,9 @@ In the admin of WordPress, on the left menu named WP Meta SEO and its sub menu f
|
|
116 |
Go to the Plugins > WP Meta SEO > Deactivate > Delete
|
117 |
If you choose to install it later all your SEO data will remain in place (database stored)
|
118 |
|
|
|
|
|
|
|
119 |
== Screenshots ==
|
120 |
|
121 |
1. Main dashboard of the plugin with SEO optimization check
|
@@ -127,10 +150,15 @@ If you choose to install it later all your SEO data will remain in place (databa
|
|
127 |
1. Detail and alert on the element that you can optimize
|
128 |
1. Image replace confirmation
|
129 |
|
130 |
-
|
131 |
-
|
132 |
== Changelog ==
|
133 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
134 |
= 1.3.0 =
|
135 |
* New SEO check dashboard
|
136 |
* Check for SEO permalinks
|
@@ -172,14 +200,5 @@ If you choose to install it later all your SEO data will remain in place (databa
|
|
172 |
|
173 |
== Upgrade Notice ==
|
174 |
|
175 |
-
Update through the automatic WordPress updater, all WP Meta SEO content will remain in place
|
176 |
-
|
177 |
-
|
178 |
-
<PageMap>
|
179 |
-
<DataObject type="thumbnail">
|
180 |
-
<Attribute name="src" value="https://www.joomunited.com/images/WP-Meta-SEO/icon-128x128.png"/>
|
181 |
-
<Attribute name="width" value="100"/>
|
182 |
-
<Attribute name="height" value="130"/>
|
183 |
-
</DataObject>
|
184 |
-
</PageMap>
|
185 |
-
|
1 |
=== WP Meta SEO ===
|
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
|
4 |
Requires at least: 4.0
|
5 |
Tested up to: 4.3.1
|
6 |
Stable tag: 1.3.0
|
25 |
|
26 |
It was annoying to edit meta on an existing website, open each post, page and almost nobody was doing it. Especially if you need to edit content + image meta.
|
27 |
WP Meta SEO is going to list all posts, pages, custom post types and all images. Type your meta content and fix image size and everything is AJAX saved.
|
28 |
+
Plus, a bulk copy feature is available to save tons of time in your SEO optimization process:
|
29 |
+
* Content title to All meta titles
|
30 |
+
* Image name to Image title
|
31 |
+
* Image name to Image alt
|
32 |
+
|
33 |
+
A bunch of people reduce the size of the pictures in content using handles that results to a HTML resizing. And that's something wrong for SEO, for page loading time and for image quality.
|
34 |
+
WP Meta SEO also include this feature in the bulk edition view, you are notified and you can now optimize the size of your images in articles, click fix and it's replaced in your content (no broken links).
|
35 |
|
36 |
|
37 |
= On page SEO optimization and analysis =
|
38 |
|
39 |
* Content SEO smart analysis bellow content
|
40 |
* Search engine snippet preview
|
41 |
+
* AJAX SEO analysis refresh
|
42 |
+
* 7 criteria of SEO analysis
|
43 |
* Check: Page title word in content heading
|
44 |
* Check: Page title word in content
|
45 |
* Check: Page URL matches with page title
|
54 |
[vimeo https://vimeo.com/113695156]
|
55 |
|
56 |
|
57 |
+
= SEO full features list =
|
58 |
|
59 |
+
* Reduce page weight by fixing HTML image resizing
|
60 |
* All alt tags edition on single view
|
61 |
* See all your snippet in one view
|
62 |
* Image name, title, description and legend
|
63 |
* Dashboard SEO check
|
64 |
+
* Automatic AJAX saving SEO content on bulk edition
|
65 |
* On page analysis: fix SEO criteria
|
66 |
+
* Custom post type meta edition
|
67 |
+
* All custom post type and WooCommerce SEO optimization
|
68 |
* Yoast SEO import & sync
|
69 |
+
* All in one SEO importer and sync
|
70 |
+
* Alexa traffic rank
|
71 |
+
* Meta content filtering by type
|
72 |
+
* Optimize images and replace all inside your content
|
73 |
+
* Live Google snippet preview
|
74 |
+
* Edit images file name in single view
|
75 |
+
* Filter content by post type: post, page, custom
|
76 |
* Image date filtering
|
77 |
* Content meta length limit (Google + Yahoo + Bing)
|
78 |
* SEO problem warning
|
79 |
* Bulk image resizing
|
80 |
* One click image title copy
|
81 |
+
* SEO bulk copy: Copy image name to image alt and/or image title
|
82 |
+
* SEO bulk copy: Copy content title to content meta title
|
83 |
|
84 |
= Main plugins from JoomUnited: =
|
85 |
* WP Media Folder: https://www.joomunited.com/wordpress-products/wp-media-folder
|
90 |
|
91 |
= Support =
|
92 |
|
93 |
+
A PDF support document is provided with WP Meta SEO on JoomUnited website
|
94 |
+
Feel free to ask SEO questions on our forum or here in the support section
|
95 |
**More details here:** http://www.joomunited.com/wordpress-products/wp-meta-seo
|
96 |
|
97 |
== Installation ==
|
99 |
= To install the automatically: =
|
100 |
* Through WordPress admin, use the menu: Plugin > Add new
|
101 |
* Search for WP Meta SEO
|
102 |
+
* Click on install then click activate link
|
103 |
|
104 |
= To install the plugin manually: =
|
105 |
* Download and unzip the plugin wp-meta-seo.zip
|
106 |
+
* Upload the /wp-meta-seo directory to /wp-content/plugins/
|
107 |
+
* Activate the plugin through the 'Plugins' menu in WordPress
|
108 |
+
* Use the WP Meta SEO WordPress left menu
|
109 |
|
110 |
Once the plugin is installed, open the bulk edition through the admin menu or open a content to load SEO on page analysis
|
111 |
|
112 |
== Frequently Asked Questions ==
|
113 |
|
114 |
+
= Will the image rename bulk feature generate broken links? =
|
115 |
+
Not at all, it would have been bad for SEO :) the image name is dynamically replaced in all your content.
|
116 |
+
|
117 |
+
= If I edit image title and alt text, will that information be loaded each time my image is in a content? =
|
118 |
+
There's an SEO option for that :) WP Meta SEO will detect that the image has missing information and once edit it, you will have a list of all the image instance and where it's loaded.
|
119 |
+
So you'll be able to define SEO info for each instance.
|
120 |
|
121 |
= Is WP Meta SEO slowing down my website? =
|
122 |
Nope :) All your SEO content is properly stored in the database and automatic SEO checks are also cached or run every 72 hours (unless you force the process)
|
123 |
|
124 |
+
= Can I translate WP Meta SEO? =
|
125 |
+
You're welcome! in the WP Meta SEO package you got English and French included as standard .po/.mo files. Use the .pot file also available in the /language folder to create your own.
|
126 |
+
You can contact us if you want it to be included in the WP Meta SEO package.
|
127 |
+
|
128 |
= Compatibility =
|
129 |
What's the minimum version of WordPress required to run WP Meta SEO? WordPress 4.0 is required. WP Meta SEO may generate PHP errors if you tried to run it on an earlier version, and so it will simply refuse to activate on any version of WordPress that's older than 4.0
|
130 |
|
136 |
Go to the Plugins > WP Meta SEO > Deactivate > Delete
|
137 |
If you choose to install it later all your SEO data will remain in place (database stored)
|
138 |
|
139 |
+
= Which browsers work best with the WP Meta SEO administration interface? =
|
140 |
+
WP Meta SEO is using HTML5 features so to be sure run the latest version of Chrome / Firefox / Safari or IE9+
|
141 |
+
|
142 |
== Screenshots ==
|
143 |
|
144 |
1. Main dashboard of the plugin with SEO optimization check
|
150 |
1. Detail and alert on the element that you can optimize
|
151 |
1. Image replace confirmation
|
152 |
|
|
|
|
|
153 |
== Changelog ==
|
154 |
|
155 |
+
= 1.4.0 =
|
156 |
+
* Bulk copy new option: content title to meta title
|
157 |
+
* Bulk copy new option: image name to alt text
|
158 |
+
* Bulk copy new option: image name to image title
|
159 |
+
* Fix twitter card on SEO on page optimization
|
160 |
+
* Fix SEO meta empty in some themes
|
161 |
+
|
162 |
= 1.3.0 =
|
163 |
* New SEO check dashboard
|
164 |
* Check for SEO permalinks
|
200 |
|
201 |
== Upgrade Notice ==
|
202 |
|
203 |
+
Update through the automatic WordPress updater, all WP Meta SEO content will remain in place.
|
204 |
+
You WON'T loose any SEO content: meta, alt, titles,...
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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: 1.
|
8 |
* Author: JoomUnited
|
9 |
* Author URI: http://www.joomunited.com
|
10 |
* License: GPL2
|
@@ -45,7 +45,7 @@ if (!defined('URL'))
|
|
45 |
define('URL', get_site_url());
|
46 |
|
47 |
if (!defined('WPMSEO_VERSION'))
|
48 |
-
define('WPMSEO_VERSION', '1.
|
49 |
|
50 |
if (!defined('WPMSEO_FILE'))
|
51 |
define('WPMSEO_FILE', __FILE__);
|
@@ -96,7 +96,9 @@ if (is_admin()) {
|
|
96 |
|
97 |
// get meta description
|
98 |
$meta_description = get_post_meta($wp_query->post->ID, '_metaseo_metadesc', true);
|
99 |
-
if($meta_description == '')
|
|
|
|
|
100 |
$meta_description_esc = esc_attr($meta_description);
|
101 |
|
102 |
// get option reading
|
@@ -104,21 +106,19 @@ if (is_admin()) {
|
|
104 |
$mpage_on_front = get_option('page_on_front');
|
105 |
$mshow_on_front = get_option('show_on_front');
|
106 |
|
|
|
107 |
// check homepage is latest post
|
108 |
-
if((empty($mpage_for_posts) && empty($mpage_on_front) && $mshow_on_front == 'posts') || (empty($
|
109 |
-
$settings = get_option( '_metaseo_settings' );
|
110 |
$meta_title_esc = esc_attr($settings['metaseo_title_home']);
|
111 |
$meta_description_esc = esc_attr($settings['metaseo_desc_home']);
|
112 |
}
|
113 |
|
114 |
// check homepage is a page
|
115 |
if(get_post_meta($wp_query->post->ID, '_metaseo_metatitle', true) == '' && is_front_page() ){
|
116 |
-
$settings = get_option( '_metaseo_settings' );
|
117 |
$meta_title_esc = esc_attr($settings['metaseo_title_home']);
|
118 |
}
|
119 |
|
120 |
if(get_post_meta($wp_query->post->ID, '_metaseo_metadesc', true) == '' && is_front_page() ){
|
121 |
-
$settings = get_option( '_metaseo_settings' );
|
122 |
$meta_description_esc = esc_attr($settings['metaseo_desc_home']);
|
123 |
}
|
124 |
|
@@ -148,7 +148,7 @@ if (is_admin()) {
|
|
148 |
}
|
149 |
}
|
150 |
|
151 |
-
$meta_twitter_card = 'summary';
|
152 |
$meta_twitter_image = get_post_meta($wp_query->post->ID,'_metaseo_metatwitter-image',true);
|
153 |
|
154 |
$meta_facebook_title = get_post_meta($wp_query->post->ID,'_metaseo_metaopengraph-title',true);
|
@@ -210,7 +210,10 @@ if (is_admin()) {
|
|
210 |
'<meta name="description" content="' . $meta_description_esc . '" />',
|
211 |
($meta_description_esc != '' ? true : false)),
|
212 |
|
213 |
-
'title' => array(
|
|
|
|
|
|
|
214 |
);
|
215 |
|
216 |
if(get_post_meta($wp_query->post->ID, '_metaseo_metatitle', true) != ''){
|
@@ -219,7 +222,23 @@ if (is_admin()) {
|
|
219 |
'<meta name="title" content="' . $meta_title_esc . '" />',
|
220 |
($meta_title_esc != '' ? true : false));
|
221 |
}
|
222 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
223 |
foreach($patterns as $k => $pattern){
|
224 |
if(preg_match_all($pattern[0], $buffer, $matches)){
|
225 |
$replacement = array();
|
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: 1.4.0
|
8 |
* Author: JoomUnited
|
9 |
* Author URI: http://www.joomunited.com
|
10 |
* License: GPL2
|
45 |
define('URL', get_site_url());
|
46 |
|
47 |
if (!defined('WPMSEO_VERSION'))
|
48 |
+
define('WPMSEO_VERSION', '1.4.0');
|
49 |
|
50 |
if (!defined('WPMSEO_FILE'))
|
51 |
define('WPMSEO_FILE', __FILE__);
|
96 |
|
97 |
// get meta description
|
98 |
$meta_description = get_post_meta($wp_query->post->ID, '_metaseo_metadesc', true);
|
99 |
+
if($meta_description == '') {
|
100 |
+
$meta_description = (strlen($wp_query->post->post_content) > 156)?substr($wp_query->post->post_content,0,152) . ' ...':$wp_query->post->post_content;
|
101 |
+
}
|
102 |
$meta_description_esc = esc_attr($meta_description);
|
103 |
|
104 |
// get option reading
|
106 |
$mpage_on_front = get_option('page_on_front');
|
107 |
$mshow_on_front = get_option('show_on_front');
|
108 |
|
109 |
+
$settings = get_option( '_metaseo_settings' );
|
110 |
// check homepage is latest post
|
111 |
+
if((empty($mpage_for_posts) && empty($mpage_on_front) && $mshow_on_front == 'posts' && is_home()) || (empty($mpage_on_front) && !empty($mpage_for_posts) && $mshow_on_front== 'page' && is_home())){
|
|
|
112 |
$meta_title_esc = esc_attr($settings['metaseo_title_home']);
|
113 |
$meta_description_esc = esc_attr($settings['metaseo_desc_home']);
|
114 |
}
|
115 |
|
116 |
// check homepage is a page
|
117 |
if(get_post_meta($wp_query->post->ID, '_metaseo_metatitle', true) == '' && is_front_page() ){
|
|
|
118 |
$meta_title_esc = esc_attr($settings['metaseo_title_home']);
|
119 |
}
|
120 |
|
121 |
if(get_post_meta($wp_query->post->ID, '_metaseo_metadesc', true) == '' && is_front_page() ){
|
|
|
122 |
$meta_description_esc = esc_attr($settings['metaseo_desc_home']);
|
123 |
}
|
124 |
|
148 |
}
|
149 |
}
|
150 |
|
151 |
+
$meta_twitter_card = (!empty($settings['metaseo_twitter_card']))?$settings['metaseo_twitter_card']:'summary';
|
152 |
$meta_twitter_image = get_post_meta($wp_query->post->ID,'_metaseo_metatwitter-image',true);
|
153 |
|
154 |
$meta_facebook_title = get_post_meta($wp_query->post->ID,'_metaseo_metaopengraph-title',true);
|
210 |
'<meta name="description" content="' . $meta_description_esc . '" />',
|
211 |
($meta_description_esc != '' ? true : false)),
|
212 |
|
213 |
+
'title' => array(
|
214 |
+
'#<meta name="title" [^<>]+ ?>#i',
|
215 |
+
'<meta name="title" content="' . $meta_title_esc . '" />',
|
216 |
+
($meta_title_esc != '' ? true : false)),
|
217 |
);
|
218 |
|
219 |
if(get_post_meta($wp_query->post->ID, '_metaseo_metatitle', true) != ''){
|
222 |
'<meta name="title" content="' . $meta_title_esc . '" />',
|
223 |
($meta_title_esc != '' ? true : false));
|
224 |
}
|
225 |
+
|
226 |
+
if($meta_twitter_site == ''){
|
227 |
+
unset($patterns['twitter_site']);
|
228 |
+
}
|
229 |
+
|
230 |
+
if($meta_twitter_image == ''){
|
231 |
+
unset($patterns['twitter_image']);
|
232 |
+
}
|
233 |
+
|
234 |
+
if($facebook_admin == ''){
|
235 |
+
unset($patterns['facebook_admin']);
|
236 |
+
}
|
237 |
+
|
238 |
+
if($meta_facebook_image == ''){
|
239 |
+
unset($patterns['facebook_image']);
|
240 |
+
}
|
241 |
+
|
242 |
foreach($patterns as $k => $pattern){
|
243 |
if(preg_match_all($pattern[0], $buffer, $matches)){
|
244 |
$replacement = array();
|