ปิดปลักอินเวิร์ดเพรสไม่ให้อัปเดตแม้จะมีเวอร์ชั่นใหม่ออกมา

require: จะต้องอ่านโค้ดปลักอินเป็น 

อันนี้ถือว่าเป็นการเล่าสู่กันฟังละกัน เหตุเนื่องมาจากว่าผมจำเป็นต้องแก้โค้ดของปลักอิน facebook for woocommerce ทีนี้พอแก้ไปแล้วเนี่ย ถ้าหากเขาออกเวอร์ชั่นใหม่ แล้วคนดูแลเว็บเกิดไปคลิก อัปเดตเดี๋ยวนี้ ที่แสดงอยู่ด้านใต้ปลักอิน โค้ดที่แก้ไว้ก็ถูกทับหมด

ก็เลยจำเป็นจะต้องปิดลิ้งก์นี้ซะ

วิธีการมันจำเป็นจะต้อง hook นะครับ ลำดับขั้นตอนจะเป็นตามนี้

  1. เอาสิ่งที่แสดงของเดิมออก
  2. ใส่ของใหม่เข้าไปแสดงแทน

ตรงที่เห็นเหลืองๆ ข้อความนั้นทั้งหมดเวิร์ดเพรสเขาใช้ 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 . '&section=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 );

จบ.

ปลั๊กอิน Wordpress แจ่ม ๆ อยู่ที่นี่