J'ai une fonction dans functions.php qui génère automatiquement une page. Il ne vérifie pas s'il existe déjà une page portant le même titre pour le moment.
La fonction est lancée avec:
add_action( 'after_setup_theme', 'add_pages' );
edit : Je veux seulement que cela exécute une fois chaque chargement de page. Je pense que c'est la même chose si j'utilisais
add_action( 'init', 'add_pages' );
Voici le code dans la fonction ajouter des pages:
function add_pages() {
$content = "text content";
$page = array(
'post_title' => 'A unique title?',
'post_content' => $content,
'post_status' => 'publish',
'post_author' => 1,
'post_type' => 'page',
'post_parent' => 0
);
// Add page
$insert_id = wp_insert_post( $page );
}
Lorsque je recharge la page "posts" dans wordpress admin, deux nouvelles pages sont créées. Lorsque je recharge à nouveau, quatre nouvelles pages sont créées. Lorsque je recharge à nouveau, de nombreuses pages sont créées. Je me demandais s'il y avait une explication à cela?
edit: Si je change le post_title et que je recharge, une seule page est créée. Mais si je recharge à nouveau, deux pages sont créées. Mais après cela, il se comporte de manière irrationnelle, parfois il y a toujours deux pages créées à chaque chargement de page, mais parfois un grand nombre de pages est créé.
J'ai l'intention de vérifier si le titre de la page existe déjà, mais je voulais quand même comprendre ce comportement.
after_setup_theme
n'est pas le hook que vous recherchez - vous voulez after_switch_theme
- ce hook ne fonctionnera qu'une fois, lorsque votre thème est activé à l'origine.
Ci-dessous le code, il ne créera pas de page si le titre existe déjà:
function add_pages() {
$content = "text content";
$postTitle = 'A unique title?';
global $wpdb;
$query = $wpdb->prepare(
'SELECT ID FROM ' . $wpdb->posts . '
WHERE post_title = %s
AND post_type = \'page\'',
$postTitle
);
$wpdb->query( $query );
if ( $wpdb->num_rows ) {
// Title already exists
} else {
$page = array(
'post_title' => 'A unique title?',
'post_content' => $content,
'post_status' => 'publish',
'post_author' => 1,
'post_type' => 'page',
'post_parent' => 0
);
// Add page
$insert_id = wp_insert_post( $page );
}
}