RSS Aggregator by Feedzy 免費版外掛改造

試用了幾個 WordPress 的知名的 RSS 匯入文章的外掛。這邊就不說明名字了前幾名的。免費版的大多限制很大。可以說幾乎都不大可能實用。有的抓不到精選圖有的根本就是要付費才能抓精選圖。唯獨 Feedzy 的 RSS 較好一點。但也僅能多勉強使用。但實在是限制太多。不小心就微改造了程式一下。都是用子主題的 function ,幾乎不用怕未來更新。

這邊我列一下免費版的限制以免有人白按裝使用後才覺的浪費時間。

  • 只能設定 1 個任務。但可能設定多個 RSS 來源。(問題是不是每個 RSS 來源的架構是一樣的)
  • 無法設定排程。只能預設的每日 1 次。
  • 不容易抓到精選圖。就算使用官方的說明的 magic tag 也可能抓不到。

以上是個人覺得重點但免費版不提供的功能。我花了一些時間去追程式後用了幾個 function 改造一下。讓它勉強可在我個人的環境上使用。所有的程式都加在子主題的 function 裡即可。

改造成多個任務

程式是 Query Post Type 為 feedzy_imports 的數量有多少。底下是改成抓不到。讓程式以為沒設過任務就可以設定多任務

add_action('pre_get_posts', function( $q ){

    // 只改後台 & 只改 feedzy_imports 查詢
    if ( is_admin() && $q->is_main_query() === false ) {

        $post_type = $q->get('post_type');

        if ( $post_type === 'feedzy_imports' ) {
            // 改成空 post type . query 就會回傳 0 。
            $q->set( 'post_type','feedzy_importsz' ); 

        }
    }
});

改造無法設定排程

程式在 view 上是判斷有沒有買 PRO 版。沒買則在選單上的 option 上加上 disabled 讓你不能選。底下判斷檔案字串後修改。記得任務修改後的時間可能因為快取什麼的不會在 dashboard 即時秀,但資料庫會改。在下次執行後即會變更。

add_action('admin_init', 'modify_feedzy_import_metabox_once');

function modify_feedzy_import_metabox_once() {
    // 檢查是否已經執行過修改
    $modified = get_option('feedzy_metabox_modified', false);
    
    if ($modified) {
        return; // 已經修改過,不再執行
    }
    
    $file_path = WP_CONTENT_DIR . '/plugins/feedzy-rss-feeds/includes/views/import-metabox-edit.php';
    
    // 除錯:記錄檔案路徑
    error_log('嘗試修改 Feedzy 檔案: ' . $file_path);
    
    // 檢查檔案是否存在
    if (!file_exists($file_path)) {
        error_log('Feedzy 檔案不存在: ' . $file_path);
        return;
    }
    
    error_log('Feedzy 檔案存在,開始處理...');
    
    // 檢查檔案是否可寫
    if (!is_writable($file_path)) {
        error_log('Feedzy 檔案無法寫入,請檢查檔案權限: ' . substr(sprintf('%o', fileperms($file_path)), -4));
        return;
    }
    
    error_log('Feedzy 檔案可寫,讀取內容...');
    
    // 讀取檔案內容
    $content = file_get_contents($file_path);
    
    // 要搜尋的原始字串
    $search = "<?php disabled( ! feedzy_is_pro() && 'daily' !== \$slug ); ?>";
    
    // 要替換的新字串
    $replace = "<?php disabled( ! feedzy_is_pro() && false ); ?>";
    
    // 執行替換
    if (strpos($content, $search) !== false) {
        error_log('找到目標字串,執行替換...');
        $new_content = str_replace($search, $replace, $content);
        
        // 寫回檔案
        if (file_put_contents($file_path, $new_content) !== false) {
            // 標記為已修改
            //update_option('feedzy_metabox_modified', true);
            
            // 記錄日誌
            error_log('Feedzy import-metabox-edit.php 已成功修改!');
            
            // 在後台顯示通知
            add_action('admin_notices', function() {
                echo '<div class="notice notice-success is-dismissible"><p>Feedzy 插件檔案已成功修改!</p></div>';
            });
        } else {
            error_log('Feedzy 檔案寫入失敗');
        }
    } else {
        error_log('未找到目標字串,可能檔案已被修改或格式不同');
        error_log('檔案內容預覽: ' . substr($content, 0, 500));
    }
}

改造不容易抓到精選圖

原本程式在抓 Custom Simple RSS 的 RSS 內容是會抓不到圖。但官方說可以(付費?)。底下程式是強迫用 shorecode 方式嘗試抓圖。個人試用是可以。

add_filter( 'feedzy_shortcode_settings', function( $sc ) {
    // 如果 shortcode 沒設定 thumb,就幫他自動加上
    if ( empty( $sc['thumb'] ) ) {
        $sc['thumb'] = 'yes';
    }
    return $sc;
});

以上三個改造。有空可試試。

blog.ocam.live
blog.ocam.live

關注科技新聞、SEO、人工智慧、電玩模擬器、程式設言、與 IT 日常等議題,深入簡出文章的說明並持續追蹤相關新聞的發展與報導。