';
}
# telling WordPress to ping if the post is new, but not if it's just been edited
function SUP_ping_if_new($id)
{
global $wpdb, $post_title;
if(get_option('SUP_ping') == 1
and get_option('ping_sites') != "")
{
# fetches data directly from database; the function "get_post" is cached,
# and using it here will get the post as is was before the last save
$row = mysql_fetch_array(mysql_query(
"SELECT post_date,post_modified
FROM $wpdb->posts
WHERE id=$id"));
# if time when created equals time when modified it is a new post,
# otherwise the author has edited/modified it
if($row["post_date"] == $row["post_modified"])
{
if($post_title)
SUP_log("Pinging services (new post: “".$post_title."”) ...");
else
SUP_log("Pinging services (新規の記事の投稿) ...");
SUP_ping_services();
# Try commenting the line above, and uncommenting this line below
# if pinging seems to be out of order. Please notify the author if it helps!
# generic_ping();
}
else
{
if($post_title)
SUP_log("NOT pinging services (“".$post_title."” の設定が変更されました)");
else
SUP_log("NOT pinging services (記事が編集されました)");
}
}
else
SUP_log("NOT pinging services (管理者が ping 送信を無効にしています)");
}
# More or less a copy of WP's "generic_ping" from functions.php,
# but uses another function to send the actual XML-RPC messages.
function SUP_ping_services()
{
$services = get_settings('ping_sites');
$services = preg_replace("|(\s)+|", '$1', $services); // Kill dupe lines
$services = trim($services);
if ( '' != $services )
{
$services = explode("\n", $services);
foreach ($services as $service)
SUP_send_xmlrpc($service);
}
}
# A slightly modified version of the WordPress built-in ping functionality ("weblog_ping" in functions.php).
# This one uses correct extendedPing format (WP does not), and logs response from service.
function SUP_send_xmlrpc($server = '', $path = '')
{
global $wp_version;
include_once (ABSPATH . WPINC . '/class-IXR.php');
// using a timeout of 3 seconds should be enough to cover slow servers
$client = new IXR_Client($server, ((!strlen(trim($path)) || ('/' == $path)) ? false : $path));
$client->timeout = 3;
$client->useragent .= ' -- WordPress/'.$wp_version;
// when set to true, this outputs debug messages by itself
$client->debug = false;
$home = trailingslashit( get_option('home') );
# the extendedPing format should be "blog name", "blog url", "check url" (whatever that is), and "feed url",
# but it would seem as if the standard has been mixed up. it's therefore best to repeat the feed url.
if($client->query('weblogUpdates.extendedPing', get_settings('blogname'), $home, get_bloginfo('rss2_url'), get_bloginfo('rss2_url')))
{
SUP_log("- ".$server." への ping 送信が成功しました (拡張フォーマット)");
}
else
{
# pinging was unsuccessful, trying regular ping format
if($client->query('weblogUpdates.ping', get_settings('blogname'), $home))
{
SUP_log("- ".$server." への ping 送信が成功しました");
}
else
{
SUP_log("- ".$server." への ping 送信が失敗しました。 以下のエラーメッセージが返されました: “".$client->error->message."”");
}
}
}
$post_title = "";
# Receives the title of the post from a filter below
function SUP_post_title($title)
{
global $post_title;
$post_title = $title;
return $title;
}
# -----
# Log stuff
$logfile = ABSPATH."wp-content/smart-update-pinger.log";
# for debugging
function SUP_log($line)
{
global $logfile;
$fh = @fopen($logfile, "a");
@fwrite($fh, strftime("%D %T")."\t$line\n");
@fclose($fh);
}
function SUP_get_last_log_entries($num)
{
global $logfile;
$lines = @file($logfile);
if($lines === false)
return "Error reading log file (".$logfile."). This could mean that the wp-content directory is write-protected and no log data can be saved, that you have manually removed the log file, or that you have recently upgraded the plugin.";
else
{
$lines = array_slice($lines, count($lines) - $num);
$msg = "";
foreach($lines as $line)
$msg .= trim($line)." ";
return $msg;
}
}
# -----
# adds a filter to receive the title of the post before publishing
add_filter("title_save_pre", "SUP_post_title");
# adds some hooks
# shows the options in the administration panel
add_action("admin_menu", "SUP_add_options_page");
# calls SUP_ping whenever a post is published
add_action("publish_post", "SUP_ping_if_new");
# calls SUP_ping_draft when changing the status from private/draft to published
# add_action("private_to_published', 'SUP_ping_draft');
# removes the "WordPress official" pinging hook
remove_action("publish_post", "generic_ping");
# activates pinging if setting doesn't exist in database yet
# (before the user has changed the settings the first time)
if(get_option("SUP_ping") === false)
{
update_option("SUP_ping", 1);
}
?>
Review | NIWA International Accountant Office Tokyo Japan
Niwa Accoutant Office Japanese Certified Public Accoutant
156-0052 1st.KIRA Bldg3F,1chome 12-5 Kyoudo ,Setagaya-ku Tokyo Japan
E-Mail:niwa@niwakaikei.com