Uneori este nevoie de update in masa a tuturor articolelor. Daca sunt multe, a efectua din WordPress aceasta operatie va da serverul “peste cap”: fie nu vom avea suficienta memorie, fie nu vom avea suficient timp de rulare a scriptului pentru a efectua update-ul pentru toate articolele.
Exista solutia PHP simplu. Hai sa vedem.
Actualizare articole WordPress prin incarcarea WordPress
Daca vrem totusi sa efectuam aceasta operatie pri incarcarea WordPress, putem crea o pagina non WP, in care sa incepem prin a incarca WordPress (fara tema).
// # Nu incarcam si tema
define( 'WP_USE_THEMES', false );
// # Incarcam WordPress Core; pagina non WP se afla in acelasi director ca si fisierul wp-load.php
require_once( 'wp-load.php' );
//acum putem sa eliminam pluginurile pentru a reduce si mai mult din incarcarea sistemului
add_filter('option_active_plugins', 'filtru_pluginuri');
function filtru_pluginuri($plugins) {
$pluginuri_eliminate = array('w3-total-cache');
foreach ($plugins as $i => $plugin) {
if (in_array($plugin, $pluginuri_elimnate)) {unset($plugins[$i]);}
}
return $plugins;
}
//obtinem articolele din baza de date
$args = array();
$args['post_type'] = 'post';
$args['post_status']='publish';
// The Query
$the_query = new WP_Query( $args );
// The Loop
if ( $the_query->have_posts() ) {
echo '<ul>';
while ( $the_query->have_posts() ) {
$the_query->the_post();
// actualizam post_modified si post_modified_gmt `datetime` pentru un articol cu ID = 80
$update = array( 'ID' => $post->ID );
wp_update_post( $update );
}
echo '</ul>';
} else {
// no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
Si gata! Dar este stiut ca WordPress consuma multe resurse. si nu este recomandata aceasta solutie. Sa incercam cu un request direct pe baza de date in afara WordPress.
Actualizarea articolelor WordPress prin script PHP custom in afara WordPress
Va trebui sa interogam baza de date prin functii PHP.
Putem folosi o clasa custom specifica de interogare a bazelor de date MySQL pe care o utilizam atunci cand dorim sa efectuam request-uri custom pe baza de date (fisierul db_dbclass.php). Conectarea la baza de date si instantierea obiectului de interogare se face in fisierul connect_db.php
Rularea unui astfel de script in care selectam dintr-un articol doar ID-ul, pentru protejarea memoriei de lucru, dureaza 1 secunda pentru 300 de articole.
Diferenta de performanta fata de prima varianta a solutiei este foarte mare si iti poti face treaba fara probleme, cu pretul unui efort de creare a scriptului de serviciu prezentat.
ini_set('display_errors', 'On');
include 'connect_db.php';
//in urma cu o ora GMT
$time = time() - 3600;
$mysql_time_format = "Y-m-d H:i:s";
$post_modified = gmdate($mysql_time_format, $time);
$post_modified_gmt = gmdate($mysql_time_format, ($time + 2 * 3600));
$sql = "SELECT ID FROM wp_posts WHERE post_type='post' AND post_status='publish'";
$datap = $mydb->fetch_one_field($sql, 'ID');
foreach ($datap as $i => $post_id) {
$mydb->query("UPDATE wp_posts SET post_modified = '{$post_modified}', post_modified_gmt = '{$post_modified_gmt}' WHERE ID = {$post_id}");
}
SEO, fisierul sitemap.xml si indexarea in Google
O aplicatie practica pentru scriptul utilizat si prezentat mai sus ar fi urmatoarea: daca adaugam din programare tuturor articolelor un link sau un widget la finalul continutului, dupa ce eliberam si reconstruim cache-ul paginilor pentru intreg site-ul (vrem un scor Google Page Speed cat mai bun), vom rula acest script de update data modificare fiecare articol si apoi refacem sitemap_index.xml si il trimitem la Google.
Pastram astfel scorul Google Page Speed, avem data de modificare actualizata, Google Search Console are sitemap-ul actualizat.
Succes!
Află detalii privind realizarea site-urilor pe WordPress
Creare site WordPress
Sau ia legatura cu noi aici