虽然我不理解截断帖子的动机,但我认为这个练习对于您了解如何使用cron+WordPress很有价值。
创建一个函数来截断帖子,这可以用于WP cron或UNIX cron下面的两种方法。
function foobar_truncate_posts(){
global $wpdb;
# Set your threshold of max posts and post_type name
$threshold = 50;
$post_type = \'foobar\';
# Query post type
$query = "
SELECT ID FROM $wpdb->posts
WHERE post_type = \'$post_type\'
AND post_status = \'publish\'
ORDER BY post_modified DESC
";
$results = $wpdb->get_results($query);
# Check if there are any results
if(count($results)){
foreach($result as $post){
$i++;
# Skip any posts within our threshold
if($i <= $threshold)
continue;
# Let the WordPress API do the heavy lifting for cleaning up entire post trails
$purge = wp_delete_post($post->ID);
}
}
}
以下是WordPress中安排事件的两种基本方法。
方法#1:使用WP Cron,因为这是WP实现这一点的方法,我们将首先研究这种方法。请注意,WP Cron不是真正的Cron,它通常被称为psuedo Cron。如果站点上的流量较低,这是不一致的,因为它基于对服务器的请求。如果没有请求传入,则计划的事件将延迟运行。
安排您的活动
if(!wp_next_scheduled( \'foobar_truncate_posts_schedule\')){
wp_schedule_event(time(), \'daily\', \'foobar_truncate_posts_schedule\');
}
加入你的计划行动
add_action(\'foobar_truncate_posts_schedule\', \'foobar_truncate_posts\');
如果您发现WP Cron缺少您的计划、发布计划帖子等。。。,您可以使用UNIX cron进一步自动化它。这里有一个
great article 演示如何ping wp cron。php在指定的时间间隔。下面是他们建议使用UNIX cron保持wp cron准时运行的方法。
wget http://www.server.com/wp-cron.php > /dev/null 2>&1
方法2:使用UNIX cron,您可以将真正的UNIX cron与本机管理ajax一起使用。php功能。
验证服务器上的cURL
此方法使用应安装在服务器上的cURL。如果没有,并且您正在使用Apache,
sudo apt-get install php5-curl
然后
sudo /etc/init.d/apache2 restart
.
创建AJAX挂钩,确保将其设置为nopriv,因为您的服务器不会使用WP进行身份验证。
add_action(\'wp_ajax_nopriv_truncate_posts\', \'foobar_truncate_posts_cron\');
function foobar_truncate_posts_cron(){
# We use the user-agent as a shared key
$shared_user_agent = \'FooBar TruncatePostsCron/1.0\';
# Block unwanted IP addresses
$whitelisted_ips = array( //IPs allowed to run this operation
\'192.168.1.1\',
\'127.0.0.1\'
);
# Retrive Request Information
$request_user_agent = $_SERVER[\'HTTP_USER_AGENT\'];
$request_ip = $_SERVER[\'REMOTE_ADDR\'];
# Authenticate
if($request_user_agent === $shared_user_agent && in_array($request_ip, $whitelisted_ips))
echo foobar_truncate_posts(); // Reusable function
else
echo \'Authentication failed for post trucation cron.\';
exit;
}
添加Crontab此配置将每天持续运行一次。
-A
设置共享用户代理机密
-o
指定输出文件,
action=truncate_posts
与ajax挂钩操作相关。验证
/user/bin/curl
是执行cURL命令的正确路径。你可以使用
curl
相反
0 0 * * * /usr/bin/curl -A \'FooBar TruncatePostsCron/1.0\' -o ~/truncate_posts.log http://yourdomain.com/wp-admin/admin-ajax.php?action=truncate_posts
最后,始终确保
register_globals=off
在php中。ini以防止任何类型的欺骗。
最后
这是WordPress+cron的两种主要方法(无论是否正确)。在中,有许多方法可以使用您的特定用例剥猫皮
foobar_truncate_posts()
. 我相信你可以从这里调整它。希望这对你有帮助!