WordPress wp_remote_post curl: (35) Peer reports incompatible or unsupported protocol version

分享如何處理使用 WordPress 的 wp_remote_post() 函數時遇到的錯誤:curl: (35) Peer reports incompatible or unsupported protocol version,探討解決方案。

範例程式碼

以下是我使用的範例程式碼,用於向 API Server 傳送資料:

$crm_api_url = 'https://crm.example.com/api/hello';
$response = wp_remote_post( $crm_api_url, [
'body' => $post_body,
]);
wp_die( print_r( $response, true ) );

此程式碼導致錯誤,因為主機與 API Server 支援的 SSL/TLS 協議不匹配。

系統環境

發生原因

檢查 OpenSSL 版本後發現,OpenSSL 1.0.2k-fips 只支持到 TLS 1.2,但目標 API Server 僅允許 TLS 1.3。這就導致了協議不匹配,從而引發了錯誤。

OpenSSL 1.0.2k-fips 支援的 SSL/TLS 協議:

因為 OpenSSL 1.0.2 不支持 TLS 1.3,而 API Server 僅允許 TLS 1.3,導致 SSL/TLS 協議不兼容。

解決方案

1. 升級主機的 SSL/TLS 支援

若 API Server 僅支援 TLS 1.3,主機必須升級至支援 TLS 1.3 的 OpenSSL 版本(至少為 OpenSSL 1.1.1)。這樣可以確保 WordPress 主機與 API Server 之間的 SSL/TLS 協議匹配。

2. 讓 API Server 向下兼容 TLS 1.2

如果 API Server 能夠向下兼容 TLS 1.2,則可以暫時允許 TLS 1.2 通訊,以解決當前的不兼容問題。儘管 TLS 1.3 更加安全,但在過渡期間允許使用 TLS 1.2,可以確保現有系統正常運行。

實作過程

在我的情況下,由於主機當前無法即時升級至支援 TLS 1.3 的 OpenSSL,我選擇了讓 API Server 向下兼容 TLS 1.2 的方案。這樣系統可以恢復運作,並且在未來 OpenSSL 升級至支援 TLS 1.3 時,再切換至僅支持 TLS 1.3 的模式。

在 Plesk 中,可以使用以下命令來啟用 TLS 1.2 和 TLS 1.3:

# plesk bin server_pref -u -ssl-protocols 'TLSv1.2 TLSv1.3'

執行此命令後,請重啟相關服務(如 Apache、Nginx、PHP-FPM)以應用更改。
這樣可以臨時解決協議不兼容的問題。

檢測工具

SSL Labs

當不確定目標主機支援哪些 TLS 協議版本時,可以使用 SSL Labs 工具來檢查目標主機的 TLS 支援情況。該工具可以幫助你確定目標主機的協議支援,從而避免不兼容問題的發生。

參考資料

https://www.plesk.com/kb/support/how-to-enable-disable-tls-protocol-versions-in-plesk-for-linux/
https://talk.plesk.com/threads/best-practice-for-upgrading-openssl-on-centos-7-9-obsidian-v18-0-54.371042/
https://www.isres.com/jingyan2/79.html
https://blog.csdn.net/weixin_46858088/article/details/135718447

[……]

閱讀更多

hide protected by reCAPTCHA v3

安裝 reCAPTCHA v3 之後,頁面右下角就會多出隱私權圖標這東西,在某些場合可能需要把它隱藏起來,可以透過下面方式隱藏

下方兩段CSS都可以隱藏 reCAPTCHA v3 圖示

注意:請不要使用 display: none 這可能會使reCAPTCHA v3失去作用

https://wordpress.org/support/topic/how-do-i-hide-recaptcha-v3-badge/
https://wordpress.org/support/topic/recaptcha-v3-badge-is-displayed-on-all-pages-not-only-form-pages/

[……]

閱讀更多

PHP 呼叫 Namespace 文件中的 function

呼叫 Namespace 文件裡的 function

/**
* https://vector.cool
*/
Namespace VECTOR\COOL;

function test() {
    echo "Hello world!\n";
}

VECTOR\COOL\test();

呼叫 Namespace 文件裡 class 中的 function

/**
* https://vector.cool
*/
namespace VECTOR\COOL;

class HELLO{
    static public function test() {
        echo "Hello world!\n";
    }
}

VECTOR\COOL\HELLO::test();

在 WordPress Action 中呼叫

<?php
/**
* https://vector.cool
*/
Namespace VECTOR\COOL;

function test() { 
	echo "Hello world!\n"; 
}
add_action('init','VECTOR\COOL\test');

參考資料:

http://php.net/manual/en/language.namespaces.nsconstants.php[……]

閱讀更多

PHP Namespace 錯誤 Warning call_user_func_array() expects parameter 1 to be a valid callback

使用 __NAMESPACE__  取得當前文件的 Namespace

呼叫 Namespace 裡的 function

/**
* https://vector.cool
*/
Namespace VECTOR\COOL;

function test() {
    echo "Hello world!\n";
}

call_user_func(__NAMESPACE__ .'\test');

呼叫 Namespace 裡的 class 中的 function

/**
* https://vector.cool
*/
Namespace VECTOR\COOL;

class Hello {
    static public function test() {
        echo "Hello world!\n";
    }
}

call_user_func(__NAMESPACE__ .'\Hello::test'); // String
call_user_func(array(__NAMESPACE__ .'\Hello', 'test')); // Array

在 WordPress Action 中呼叫

/**
* https://vector.cool
*/
Namespace V123\PLUGIN\CFU;
add_action('init',__NAMESPACE__.'\create_initial_admin_menu');

參考資料:

http://php.net/manual/en/language.namespaces.nsconstants.php
https://stackoverflow.com/questions/14682356/relative-namespaces-and-call-user-func[……]

閱讀更多

WordPress SEO 換網址後一定要做的3件事

轉至:V123 DEV – WordPress 中文開發團隊

可能因為某些原因,會需要更換WP網址,但之前寫的文章SEO好不容易做起來,大部分的頁面搜尋引擎也都收錄了,這樣不是太浪費了,SEO的部分等於一切重來,雖然換網址真的對SEO很傷,但沒辦法的時候我們只能將傷害降到最低。

第一步、設定固定網址

下圖,新網站的”固定網址“設置,
WordPress SEO 換網址後一定要做的3件事 - V123 DEV設定WordPress固定網址,請務必確定與舊網站設置相同 – V123 DEV

第二步、設定轉址

做完第一步,再來就是要將舊網域的網址轉至新網域的網址,但參數不變,讓每一篇文章都可以搬家到新網址

http://old-domain.com/example/
轉到
http://new-domain.com/example/

設定舊站根目錄下的 .htaccess 檔,把所有原有的值都刪了,添加下面兩行

所有網址就順利的重定向到新網址

第三步、設定Google Search Console 變更網址

如果您已經確定完成上述兩步驟,再來

當然是要通知Google大神,拜拜碼頭,說我要換網址了
登入Google帳戶,進入Google Search Console,先新增新網站網址,並通過驗證,至於怎麼新增網址到 Google Search Console 請Google一下,很簡單,這邊不多贅述。
新增完成後在右上角下拉選單選擇舊網站網址,按一下右側的齒輪icon設定,選擇變更網址選項 - V123 DEV新增完成後在右上角下拉選單選擇舊網站網址,按一下右側的齒輪icon設定,選擇變更網址選項 – V123 DEV

將會一步一步地確認,最後提交申請 - V123 DEV將會一步一步地確認,最後提交申請 – V123 DEV參考資料:

https://v123.tw/wordpress-seo-%E6%8F%9B%E7%B6%B2%E5%9D%80%E5%BE%8C%E4%B8%80%E5%AE%9A%E8%A6%81%E5%81%9A%E7%9A%843%E4%BB%B6%E4%BA%8B/[……]

閱讀更多

解決 WordPress 無法使用 jQuery 問題

設計WordPress主題或插件開發時,常會需要使用jQuery,WordPress其實很貼心的已經載入jQuery,但實際使用時發現,原本可以跑的jQuery程式,放進WordPress卻不能跑了,才知道原來WordPress的jQuery要這樣寫。

 

WordPress 頁面中,確實看到 jQuery 已載入

<script type='text/javascript' src='https://yourdomain.com/wp-includes/js/jquery/jquery.js?ver=1.11.1'></script>
<script type='text/javascript' src='https://yourdomain.com/wp-includes/js/jquery/jquery-migrate.min.js?ver=1.2.1'></script>

頁面中加入一段測試碼

<script>
$( document ).ready(function() {
        alert("hello");
});
</script>

理論上應該是會順利看到 hello 對話框,但是沒有

 

解決方法:

主要是jQuery寫法的問題,選擇器不能使用習慣的簡碼 $ 符號,而要用下面這兩種寫法,
順利看到hello 對話框

jQuery( document ).ready( function( $ ) {

    alert("hello");

} );
( function( $ ){

    alert("hello");

} )( jQuery );

本文出自:https://v123.tw

[……]

閱讀更多