Cron se nespouští
Dobrý den,
vytvořil jsem php soubor s názvem topovani.php, který je umístěný v www/domains/sexsexsex.cz/
Můj skript je zcela jednoduchý, resetuje meta field na výchozí hodnotu 0. Když kód vložím do wordpressu function.php, tak se automaticky zapne a funguje jak má. Function.php kód:
<?php
function reset_reputace() {
$default_reputace = 0;
$allposts = get_posts(
array(
'post_type' => 'partner-na-erotiku',
'numberposts' => -1,
'meta_key' => 'reputace', // Změněno na váš meta key
)
);
foreach ($allposts as $eachpost) {
// Resetujte hodnotu meta fieldu "reputace" na výchozí hodnotu
update_post_meta($eachpost->ID, 'reputace', $default_reputace);
}
}
add_action('init', 'reset_reputace');
?>
Ve Webhosting – Cron jsem vytvořil Cron, který se spustí v celou hodinu (pro zkoušku, že to bude fungovat. Poté přenastavím na půlnoc). Pokud kliknu na „Ověřit možné spuštění“ tak mi napíše „CRON topovani (http://sexsexsex.cz/topovani.php) je možné spustit“ což je dobré znamení. Ale když zkouším zapnout Cron manuálně, tudíž do prohlížeče zadám URL adresu „http://sexsexsex.cz/topovani.php“ tak mi vypíše následující chybu:
Fatal error: Uncaught Error: Call to undefined function add_action() in /data/web/virtuals/333435/virtual/www/domains/sexsexsex.cz/topovani.php:19 Stack trace: #0 {main} thrown in /data/web/virtuals/333435/virtual/www/domains/sexsexsex.cz/topovani.php on line 19
S Cronem pracuji poprvé. Poradíte mi, co mám změnit aby vše fungovalo jak má?
Předem děkuji za jakoukoli pomoc.
PS. máte nějaký návod, jak Cron zabezpečit, aby nikdo cizí nemohl přes URL zapnout tento skript? Udělalo by to pak velké zmatky.
4 Odpověď
Dobrý den,
funkce add_action() je WP funkce, tedy funguje jen pro WP, viz popis funkce. Pokud dáte kód s touto funkcí do samostatného php souboru, nebude fungovat. tedy problém není v cronu, ale v tom, že v PHP voláte funkci, která je jen pro WP.
Zdravím, jak to chápu já, voláte samostatný soubor topovani.php, ale nikde nevidím v tom souboru žádné načítání include nebo require potřebných souborů s funkcemi – systém prostě nezná funkci add_action(), není nikde deklarována – Call to undefined function add_action()
Chyba není v Cronu.
OPRAVA: v textu jsem omylem napsal function.php místo topování.php, pardon. Takže tento kód:
<?php
function reset_reputace() {
$default_reputace = 0;
$allposts = get_posts(
array(
'post_type' => 'partner-na-erotiku',
'numberposts' => -1,
'meta_key' => 'reputace', // Změněno na váš meta key
)
);
foreach ($allposts as $eachpost) {
// Resetujte hodnotu meta fieldu "reputace" na výchozí hodnotu
update_post_meta($eachpost->ID, 'reputace', $default_reputace);
}
}
add_action('init', 'reset_reputace');
?>
je v topovani.php. Jinak function.php je klasický z wordpressu.
Co mi v mém topovani.php chybí?
S php jsem obeznámen pouze krátce, mým selským rozumem jsem si představil, že vytvořím soubor topovani.php, do souboru vložím potřebnou skript, vložím ji do adresáře www/domains/sexsexsex.cz/, vytvořím cron který tento soubor zapne v určitý čas pro function.php. Ale pokud vložím <? include „topovani.php“; ?> do function.php, tak můj skript bude automaticky fungovat, než-li čekat na Cron. Nebo se mýlím?
Pro mne je toto nová vysoká zeď, kterou když mi pomůžete zdolat, tak díky vám udělám další krůček k pochopení programování. Opět předem děkuji za případné vysvětlení, jak můžu docílit svého záměru)