require: จะต้องอ่านโค้ดปลักอินเป็น
อันนี้ถือว่าเป็นการเล่าสู่กันฟังละกัน เหตุเนื่องมาจากว่าผมจำเป็นต้องแก้โค้ดของปลักอิน facebook for woocommerce ทีนี้พอแก้ไปแล้วเนี่ย ถ้าหากเขาออกเวอร์ชั่นใหม่ แล้วคนดูแลเว็บเกิดไปคลิก อัปเดตเดี๋ยวนี้ ที่แสดงอยู่ด้านใต้ปลักอิน โค้ดที่แก้ไว้ก็ถูกทับหมด
ก็เลยจำเป็นจะต้องปิดลิ้งก์นี้ซะ
วิธีการมันจำเป็นจะต้อง hook นะครับ ลำดับขั้นตอนจะเป็นตามนี้
- เอาสิ่งที่แสดงของเดิมออก
- ใส่ของใหม่เข้าไปแสดงแทน
ตรงที่เห็นเหลืองๆ ข้อความนั้นทั้งหมดเวิร์ดเพรสเขาใช้ hook เสียบเข้าไปใน ในชื่อ wp_plugin_update_row เราจะต้องถอด hook ตัวนี้ออก จะต้องใช้ action
load-plugins.php priority 21 เพราะตอนเสียบ hook
wp_plugin_update_row เขาเสียบมันเข้าไปด้วย hook load-plugins.php เหมือนกัน แต่ใช้ priority 20 (ให้เขาเอาเข้าไปก่อน แล้วเราถอดออกทีหลัง แล้วเสียบของเราเข้าไปแทน)
/**
* Disable automatic update plugin
* Just display message that show have new version
* Priority 21 because, I want to run my function after wordpress add_action after_plugin_row_{$file}
*/
add_action( 'load-plugins.php', array($this, 'remove_wp_plugin_update_row'), 21 );
/**
* Remove action
*/
public function remove_wp_plugin_update_row()
{
remove_action('after_plugin_row_facebook-for-woocommerce/facebook-for-woocommerce.php', 'wp_plugin_update_row', 10);
}
หลังจากถอดข้อความที่เวิร์ดเพรสแสดงเดิมออกไปแล้ว ก็เอาของเราเสียบเข้าไปแทน จริงๆแล้วฟังก์ชั่นผมก็ก้อปของเดิมที่เวิร์ดเพรสใช้นั่นแหละ แล้วมาลบลิ้งก์ออกไป
/**
* Modify updating string under pluin name
* Remove automatic update link and add my own text
*/
add_action( 'after_plugin_row_facebook-for-woocommerce/facebook-for-woocommerce.php', array($this, 'wp_plugin_update_row'), 10, 2 );
/**
* Displays update information for a plugin.
* I copy this function from wp-admin/includes/update.php and update it's message
* @ref wp-admin/includes/update.php: wp_plugin_update_row
* @param string $file Plugin basename.
* @param array $plugin_data Plugin information.
* @return false|void
*/
public function wp_plugin_update_row($file, $plugin_data)
{
$current = get_site_transient('update_plugins');
if (!isset($current->response[$file])) {
return false;
}
$response = $current->response[$file];
$plugins_allowedtags = array(
'a' => array('href' => array(), 'title' => array()),
'abbr' => array('title' => array()),
'acronym' => array('title' => array()),
'code' => array(),
'em' => array(),
'strong' => array(),
);
$plugin_name = wp_kses($plugin_data['Name'], $plugins_allowedtags);
$details_url = self_admin_url('plugin-install.php?tab=plugin-information&plugin=' . $response->slug . '§ion=changelog&TB_iframe=true&width=600&height=800');
/** @var WP_Plugins_List_Table $wp_list_table */
$wp_list_table = _get_list_table('WP_Plugins_List_Table');
if (is_network_admin() || !is_multisite()) {
if (is_network_admin()) {
$active_class = is_plugin_active_for_network($file) ? ' active' : '';
} else {
$active_class = is_plugin_active($file) ? ' active' : '';
}
echo '<tr class="plugin-update-tr' . $active_class . '" id="' . esc_attr($response->slug . '-update') . '" data-slug="' . esc_attr($response->slug) . '" data-plugin="' . esc_attr($file) . '"><td colspan="' . esc_attr($wp_list_table->get_column_count()) . '" class="plugin-update colspanchange"><div class="update-message notice inline notice-warning notice-alt"><p>';
if (!current_user_can('update_plugins')) {
/* translators: 1: plugin name, 2: details URL, 3: additional link attributes, 4: version number */
printf(__('There is a new version of %1$s available. <a href="%2$s" %3$s>View version %4$s details</a>.'),
$plugin_name,
esc_url($details_url),
sprintf('class="thickbox open-plugin-details-modal" aria-label="%s"',
/* translators: 1: plugin name, 2: version number */
esc_attr(sprintf(__('View %1$s version %2$s details'), $plugin_name, $response->new_version))
),
$response->new_version
);
} elseif (empty($response->package)) {
/* translators: 1: plugin name, 2: details URL, 3: additional link attributes, 4: version number */
printf(__('There is a new version of %1$s available. <a href="%2$s" %3$s>View version %4$s details</a>. <em>Automatic update is unavailable for this plugin.</em>'),
$plugin_name,
esc_url($details_url),
sprintf('class="thickbox open-plugin-details-modal" aria-label="%s"',
/* translators: 1: plugin name, 2: version number */
esc_attr(sprintf(__('View %1$s version %2$s details'), $plugin_name, $response->new_version))
),
$response->new_version
);
} else {
/* translators: 1: plugin name, 2: details URL, 3: additional link attributes, 4: version number, 5: update URL, 6: additional link attributes */
printf(__('There is a new version of %1$s available. <a href="%2$s" %3$s>View version %4$s details</a> or update plugin in m2spop repository and upload to plugin folder.'),
$plugin_name,
esc_url($details_url),
sprintf('class="thickbox open-plugin-details-modal" aria-label="%s"',
/* translators: 1: plugin name, 2: version number */
esc_attr(sprintf(__('View %1$s version %2$s details'), $plugin_name, $response->new_version))
),
$response->new_version,
wp_nonce_url(self_admin_url('update.php?action=upgrade-plugin&plugin=') . $file, 'upgrade-plugin_' . $file),
sprintf('class="update-link" aria-label="%s"',
/* translators: %s: plugin name */
esc_attr(sprintf(__('Update %s now'), $plugin_name))
)
);
}
echo '</p></div></td></tr>';
}
}
ผลลัพธ์ที่ได้จะเป็นอย่างนี้ ลิ้งก์อัปเดตไม่มี จะมีข้อความที่ผมเอาเข้าไปแทน ลองเอาคำไป search ในโค้ดก็จะรู้ว่าผมแก้ตรงไหน
เน้นย้ำว่าจะถอดข้อความเดิมของเวิร์ดเพรสออก จะต้อง hook เข้าไปตรงนี้เท่านั้น ผมไปอ่านมาหลายเว็บเขาแนะนำนู่นนี่นั่น เอามาลองทำก็ไม่ได้สักที เสียเวลา จนต้องไปนั่นไล่โค้ดว่าเวิร์ดเพรสมันเสียบเข้าไปตอนไหน เราจะถอดออกหลังจากนั้น
add_action( 'load-plugins.php', array($this, 'remove_wp_plugin_update_row'), 21 );
จบ.