国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
(未)設(shè)計(jì)的程式設(shè)計(jì)
API 設(shè)計(jì)的偉大時(shí)刻:jQuery
WordPress API
解決方案
1。常見任務(wù)的捷徑
2:不可預(yù)測(cè)的輸入,可預(yù)測(cè)的輸出
3。合理的默認(rèn)值
先設(shè)計(jì),后構(gòu)建
保持直覺
結(jié)論
首頁 CMS教程 &#&按 增強(qiáng) WordPress:打造改進(jìn)的 API 和函式庫

增強(qiáng) WordPress:打造改進(jìn)的 API 和函式庫

Sep 02, 2023 am 11:33 AM

增強(qiáng) WordPress:打造改進(jìn)的 API 和庫

#感覺我們接觸到的一切都是精心設(shè)計(jì)的:網(wǎng)站、電話、地鐵地圖等等。即使是我們過去認(rèn)為理所當(dāng)然的東西:恆溫器、煙霧偵測(cè)器和汽車儀表板現(xiàn)在也得到了仔細(xì)的使用者體驗(yàn)處理。

設(shè)計(jì)不僅僅是外觀和感覺:它還需要考慮使用者與我們的裝置/工具/螢?zāi)?物件互動(dòng)所需的各種方式。

這也適用於程式設(shè)計(jì)。

(未)設(shè)計(jì)的程式設(shè)計(jì)

程式語言是一個(gè)龐大而複雜的世界。即使是許多程式設(shè)計(jì)勢(shì)利小人認(rèn)為太「簡單」的 PHP,實(shí)際上也是函數(shù)和類別的相當(dāng)複雜的組合,其行為方式非常不一致。

多年來,語法、方法和命名在數(shù)百萬不同的用戶和應(yīng)用程式中不斷發(fā)展。大多數(shù)傾向於反映內(nèi)部的底層構(gòu)造 - 不一定是您想要如何使用它。

API 設(shè)計(jì)的偉大時(shí)刻:jQuery

??>

##當(dāng)我在 2006 年左右開始寫 JavaScript 時(shí),情況一團(tuán)糟。以下是我如何找到具有特定類別的標(biāo)籤並將其在 DOM 中移動(dòng)的方法:

var uls = getElementsByTagName("ul");
var classToSearch = "foods";
for (var i = 0; i < uls.length; i++) {
    var classes = uls[i].getClasses();
    for (var j = 0; j < classes.length; j++){
        if (classes[j] == classToSearch){
            myUL = uls[i];
        }
    }
}

var $li = document.createElement('li');
$li.innerHTML = 'Steak';
myUL.innerHTML += $li;

完成!

jQuery 讓 JavaScript 再次變得有趣。在 2000 年代末,這種影響是如此巨大,以至於我記得我父親問我他在《華爾街日?qǐng)?bào)》上讀到的「一些奇怪的事情」。但儘管效果巨大,jQuery 並沒有為 JavaScript 添加任何「新功能」。它只是將開發(fā)人員必須做的事情分解為非常清晰的模式。

他們沒有重新發(fā)明如何在頁面上找到內(nèi)容,而是利用了人們已經(jīng)知道的東西:CSS 選擇器。然後,只需收集大量常見操作並將它們組織成數(shù)十個(gè)函數(shù)即可。讓我們?cè)俅螄L試前面的範(fàn)例,現(xiàn)在使用 jQuery:

var $li = $('<li>Steak</li>');
$("ul.foods").append($li);

2006 年,我買了一本 680 頁的 Ajax 書。有了 jQuery 出色的 API,它幾乎被這個(gè)取代了:

$.post();

WordPress API

雖然 API 已經(jīng)開始代表“第三方服務(wù)”,但它僅僅意味著與系統(tǒng)對(duì)話的程式設(shè)計(jì)介面。就像 Twitter API 或 Facebook API 一樣,WordPress API 也存在。您不會(huì)進(jìn)行原始資料庫查詢來建立帖子,對(duì)吧?您使用 wp_insert_post。

但是許多設(shè)計(jì)漏洞困擾著 WordPress API。您可能使用 get_the_titleget_the_permalink 會(huì)產(chǎn)生錯(cuò)誤,您使用 get_permalink 。嘿,當(dāng)您有一個(gè)長達(dá)數(shù)十年的開源項(xiàng)目,涉及數(shù)千人的程式碼和數(shù)百萬用戶時(shí):您會(huì)遇到一些怪癖。

透過掩蓋這些怪癖並根據(jù)您正在編寫的程式設(shè)計(jì)師(可能是您)的習(xí)慣和行為進(jìn)行編寫,您可以節(jié)省大量時(shí)間。您可以在這裡設(shè)計(jì)正確的介面來對(duì)您日常使用的插件和主題進(jìn)行編程。


解決方案

為了加快工作速度並減少重複性任務(wù),我創(chuàng)建了一個(gè)庫來處理我一直需要的命令和自訂設(shè)定。

1。常見任務(wù)的捷徑

以取得貼文縮圖的來源為例。事實(shí)證明,WordPress 沒有內(nèi)建功能來根據(jù)貼文 ID(僅附件 ID)取得縮圖。

這意味著我經(jīng)常發(fā)現(xiàn)自己這樣做:

$thumb_id = get_post_thumbnail_id( get_the_ID() );
$src = wp_get_attachment_thumb_url( $thumb_id );
echo '<img alt="" src="' . $src . '" />';

但是一定有更好的方法!

function get_thumbnail_src( $post ){

    $thumb_id = get_post_thumbnail_id( $post );
    $src = wp_get_attachment_thumb_url( $thumb_id );
    
    return $src;
}

echo '<img alt="" src="' . get_thumbnail_src( get_the_ID() ) . '" />';

2:不可預(yù)測(cè)的輸入,可預(yù)測(cè)的輸出

好多了!事實(shí)上,您發(fā)現(xiàn)自己一直在使用它,然後與公司的其他開發(fā)人員分享。

你的朋友遇到了麻煩,所以他打電話給你來調(diào)試,你看到:

echo '<img src="' . get_thumbnail_src( get_post() ) . '">';

看來他不小心使用了 get_post?而不是 get_the_ID。你對(duì)他大喊。但是等一下,為什麼不讓它更容易被接受呢?

也許我們可以調(diào)整我們的函數(shù),以便它可以採用 WP_Post 對(duì)象,並且仍然為用戶提供他們所期望的內(nèi)容。讓我們回到該函數(shù):

function get_thumbnail_src( $post ){

    if ( is_object( $post ) && isset( $post->ID ) ){
    
        $post = $post->ID;
        
    } else if ( is_array( $post ) && isset( $post['ID'] ) ) {
        $post = $post['ID'];
    }
    
    $thumb_id = get_post_thumbnail_id( $post );
    $src = wp_get_attachment_thumb_url( $thumb_id );
    
    return $src;
    
}

因此,如果他們發(fā)送 WP_Post 物件一個(gè)數(shù)組,您的函數(shù)仍然可以幫助他們獲得所需的內(nèi)容。這是成功 API 的重要組成部分:隱藏混亂的內(nèi)部結(jié)構(gòu)。您可以為 get_thumbnail_src_by_post_idget_thumbnail_src_by_wp_post_object. 製作單獨(dú)的函式

事實(shí)上,對(duì)於更複雜的轉(zhuǎn)換可能更可取,但是您可以透過將單一函數(shù)路由到正確的子程式來簡化介面。無論使用者發(fā)送什麼內(nèi)容,該函數(shù)都會(huì)始終傳回圖像來源的字串。

讓我們繼續(xù):如果他們什麼都沒發(fā)送怎麼辦?

3。合理的默認(rèn)值

function get_thumbnail_src( $post = false ) {

    if (  false === $post ) {
        $post = get_the_ID();
    } else if ( is_object( $post ) && isset( $post->ID ) ) {
        $post = $post->ID;
    } else if ( is_array( $post ) && isset( $post['ID'] ) ) {
        $post = $post['ID'];
    }
    
    $thumb_id = get_post_thumbnail_id( $post );
    $src = wp_get_attachment_thumb_url( $thumb_id );
    
    return $src;
    
}

我們?cè)俅芜M(jìn)行了簡化,因此用戶無需發(fā)送帖子,甚至無需發(fā)送帖子 ID。在循環(huán)中時(shí),所需要做的就是:

echo '<img src="'.get_thumbnail_src().'" />';

我們的函數(shù)將默認(rèn)為當(dāng)前帖子的 ID。這正在變成一個(gè)非常有價(jià)值的功能。為了確保它能很好地發(fā)揮作用,讓我們將它包裝在一個(gè)類中,這樣它就不會(huì)污染全局命名空間。

/*
Plugin Name: JaredTools
Description: My toolbox for WordPress themes.
Author: Jared Novack
Version: 0.1
Author URI: http://upstatement.com/
*/

class JaredsTools {

    public static function get_thumbnail_src( $post = false ) {
    
        if (false === $post ) {
            $post = get_the_ID();
        } else if ( is_object( $post ) && isset( $post->ID ) ) {
            $post = $post->ID;
        } else if ( is_array( $post ) && isset( $post['ID'] ) ) {
            $post = $post['ID'];
        }
        
        $thumb_id = get_post_thumbnail_id( $post );
        $src = wp_get_attachment_thumb_url( $thumb_id );
        
        return $src;
        
    }
    
}

并且請(qǐng)不要在您的類前面添加 WP。我將其設(shè)為公共靜態(tài)函數(shù),因?yàn)槲蚁M梢栽谌魏蔚胤皆L問,并且它不會(huì)改變:輸入或執(zhí)行不會(huì)更改函數(shù)或?qū)ο蟆?

該函數(shù)的最終調(diào)用是:

echo '<img src="'.JaredsTools::get_thumbnail_src().'">';

先設(shè)計(jì),后構(gòu)建

讓我們繼續(xù)處理更復(fù)雜的需求。當(dāng)我編寫插件時(shí),我發(fā)現(xiàn)我總是需要生成不同類型的錯(cuò)誤和/或更新消息。

但是基于事件的語法一直困擾著我:

add_action( 'admin_notices', 'show_my_notice');
functon show_my_notice(){
    echo '<div class="updated"><p>Your thing has been updated</p></div>';
}

WordPress 遵循這種基于事件的架構(gòu)有很多充分的理由。但這并不直觀,除非您想坐下來記住不同的過濾器和操作。

讓我們將此匹配作為最簡單的用例:我需要顯示管理員通知。我喜歡首先設(shè)計(jì)這個(gè) API:我找出在代碼中引用該函數(shù)的最佳方式。我希望它讀起來像這樣:

function thing_that_happens_in_my_plugin($post_id, $value){
    $updated = update_post_meta($post_id, $value);
    if ($updated){
        JaredsTools::show_admin_notice("Your thing has been updated")
    } else {
        JaredsTools::show_admin_notice("Error updating your thing", "error");
    }
}

一旦我設(shè)計(jì)了端點(diǎn),我就可以滿足設(shè)計(jì)要求:

class JaredsTools {
    public static function show_admin_notice($message, $class = 'updated'){
        add_action('admin_notices', function() use ($message, $class){
            echo '<div class="'.$class.'"><p>'.$message.'</p></div>';
        });
    }
}

好多了!現(xiàn)在我不需要?jiǎng)?chuàng)建所有這些額外的函數(shù)或記住瘋狂的鉤子名稱。在這里,我使用 PHP 匿名函數(shù)(也稱為“閉包”),它讓我們可以將函數(shù)直接綁定到操作或過濾器。

這可以讓您避免在文件中出現(xiàn)大量額外的函數(shù)。 use 命令讓我們將參數(shù)從父函數(shù)傳遞到子閉包中。

保持直覺

現(xiàn)在另一位同事打電話給您。她不知道為什么她的管理通知沒有變成紅色:

JaredsTools::show_admin_notice("Error updating your thing", "red");

這是因?yàn)樗诎l(fā)送“紅色”(她希望將盒子變成紅色),而實(shí)際上她應(yīng)該發(fā)送觸發(fā)紅色的名稱。但為什么不讓它變得更容易呢?

public static function show_notice( $message, $class = 'updated' ) {

    $class = trim( strtolower( $class ) );
    if ( 'yellow' == $class ) {
        $class = 'updated';
    }
    
    if ('red' == $class ) {
        $class = 'error';
    }
    
    add_action( 'admin_notices', function() use ( $text, $class ) {
        echo '<div class="'.$class.'"><p>' . $text . '</p></div>';
    });
}

我們現(xiàn)在已經(jīng)接受了更多的用戶容忍度,這將使我們?cè)趲讉€(gè)月后回來使用它時(shí)更容易分享。


結(jié)論

在構(gòu)建了其中一些之后,以下是我學(xué)到的一些原則,這些原則使這些原則對(duì)我和我的團(tuán)隊(duì)真正有用。

1.首先進(jìn)行設(shè)計(jì),讓函數(shù)的構(gòu)建符合人們想要使用它的方式。

2. 拯救你的鍵盤!為常見任務(wù)創(chuàng)建快捷方式。

3. 提供合理的默認(rèn)值。

4. 保持最小化。讓您的庫來處理處理。

5. 對(duì)輸入要寬容,對(duì)輸出要精確。

6. 也就是說,使用盡可能少的函數(shù)參數(shù),最多四個(gè)是一個(gè)很好的參數(shù)。之后,您應(yīng)該將其設(shè)為選項(xiàng)數(shù)組。

7. 將您的庫組織成單獨(dú)的類,以涵蓋不同的領(lǐng)域(管理、圖像、自定義帖子等)。

8. 包含示例代碼的文檔。

在 Upstatement,我們的 Timber 庫使構(gòu)建主題變得更加容易,而 Jigsaw 提供了節(jié)省時(shí)間的快捷方式來自定義每個(gè)安裝。

這些工具節(jié)省的時(shí)間讓我們可以花更多時(shí)間構(gòu)建每個(gè)網(wǎng)站或應(yīng)用程序的新的和創(chuàng)新的部分。通過執(zhí)行深?yuàn)W的命令(例如向管理帖子表添加一列)并制作簡單的界面:我們公司的任何設(shè)計(jì)師或開發(fā)人員都可以使用與專業(yè) WordPress 開發(fā)人員相同的能力完全自定義每個(gè)網(wǎng)站。

以上是增強(qiáng) WordPress:打造改進(jìn)的 API 和函式庫的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1600
29
PHP教程
1502
276
如何在WordPress中縮小JavaScript文件 如何在WordPress中縮小JavaScript文件 Jul 07, 2025 am 01:11 AM

MinifyingJavaScript文件可通過刪除空白、註釋和無用代碼來提升WordPress網(wǎng)站加載速度。 1.使用支持合併壓縮的緩存插件如W3TotalCache,在“Minify”選項(xiàng)中啟用並選擇壓縮模式;2.使用專用壓縮插件如FastVelocityMinify,提供更精細(xì)控制;3.手動(dòng)壓縮JS文件並通過FTP上傳,適用於熟悉開發(fā)工具的用戶。注意部分主題或插件腳本可能與壓縮功能衝突,啟用後需徹底測(cè)試網(wǎng)站功能。

如何以編程方式防止評(píng)論垃圾郵件 如何以編程方式防止評(píng)論垃圾郵件 Jul 08, 2025 am 12:04 AM

防止評(píng)論垃圾信息最有效的方式是通過程序化手段自動(dòng)識(shí)別並攔截。 1.使用驗(yàn)證碼機(jī)制(如GooglereCAPTCHA或hCaptcha)可有效區(qū)分人類與機(jī)器人,尤其適合公眾網(wǎng)站;2.設(shè)置隱藏字段(Honeypot技術(shù)),利用機(jī)器人自動(dòng)填寫特性識(shí)別垃圾評(píng)論,不影響用戶體驗(yàn);3.檢查評(píng)論內(nèi)容關(guān)鍵詞黑名單,通過敏感詞匹配過濾垃圾信息,需注意避免誤判;4.判斷評(píng)論頻率與來源IP,限制單位時(shí)間內(nèi)的提交次數(shù)並建立黑名單;5.使用第三方反垃圾服務(wù)(如Akismet、Cloudflare)提升識(shí)別準(zhǔn)確性??筛鶕?jù)網(wǎng)站

如何爭取古騰堡大塊的資產(chǎn) 如何爭取古騰堡大塊的資產(chǎn) Jul 09, 2025 am 12:14 AM

在開發(fā)Gutenberg塊時(shí),正確enqueue資產(chǎn)的方法包括:1.使用register_block_type指定editor_script、editor_style和style的路徑;2.在functions.php或插件中通過wp_register_script和wp_register_style註冊(cè)資源,並設(shè)置正確的依賴和版本;3.配置構(gòu)建工具輸出合適的模塊格式,並確保路徑一致;4.通過add_theme_support或enqueue_block_assets控制前端樣式的加載邏輯,確保

如何添加自定義重寫規(guī)則 如何添加自定義重寫規(guī)則 Jul 08, 2025 am 12:11 AM

在WordPress中添加自定義重寫規(guī)則的關(guān)鍵在於使用add_rewrite_rule函數(shù)並確保規(guī)則正確生效。 1.使用add_rewrite_rule註冊(cè)規(guī)則,格式為add_rewrite_rule($regex,$redirect,$after),其中$regex是正則表達(dá)式匹配URL,$redirect指定實(shí)際查詢,$after控制規(guī)則位置;2.需通過add_filter添加自定義查詢變量;3.修改後必須刷新固定鏈接設(shè)置;4.建議將規(guī)則放在'top'以避免衝突;5.可藉助插件查看當(dāng)前規(guī)則便於

如何優(yōu)化WordPress機(jī)器人TXT 如何優(yōu)化WordPress機(jī)器人TXT Jul 13, 2025 am 12:37 AM

robots.txt對(duì)WordPress網(wǎng)站的SEO至關(guān)重要,能引導(dǎo)搜索引擎抓取行為,避免重複內(nèi)容並提升效率。 1.屏蔽如/wp-admin/、/wp-includes/等系統(tǒng)路徑,但避免誤封/uploads/目錄;2.添加Sitemap路徑如Sitemap:https://yourdomain.com/sitemap.xml以幫助搜索引擎快速發(fā)現(xiàn)站點(diǎn)地圖;3.限制/page/和帶參數(shù)的URL以減少爬蟲浪費(fèi),但需注意勿封重要?dú)w檔頁;4.避免常見錯(cuò)誤如誤封全站、緩存插件影響更新及忽略移動(dòng)端與子域名配

如何介紹WordPress性能 如何介紹WordPress性能 Jul 07, 2025 am 12:43 AM

1.使用性能分析插件可快速定位問題,如QueryMonitor可查看數(shù)據(jù)庫查詢次數(shù)與PHP錯(cuò)誤,BlackboxProfiler生成函數(shù)執(zhí)行報(bào)告,NewRelic提供服務(wù)器級(jí)分析;2.分析PHP執(zhí)行性能需檢查耗時(shí)函數(shù)、調(diào)試工具使用及內(nèi)存分配情況,如Xdebug生成火焰圖輔助優(yōu)化;3.監(jiān)控?cái)?shù)據(jù)庫查詢效率可通過慢查詢?nèi)照I與索引檢查,QueryMonitor能列出所有SQL並按時(shí)間排序;4.結(jié)合GooglePageSpeedInsights、GTmetrix與WebPageTest等外部工具評(píng)估前端加

WordPress的最小php版本是什麼 WordPress的最小php版本是什麼 Jul 10, 2025 am 11:21 AM

WordPressrequiresatleastPHP7.4,thoughusing8.0orhigherisrecommendedforbetterperformanceandsecurity.Olderversionslike5.6areoutdated,unsupported,andposesecurityrisks.UsingupdatedPHPimprovessecurity,enhancesperformance,andensurescompatibilitywithmodernpl

如何在Gutenberg使用InspectorControls 如何在Gutenberg使用InspectorControls Jul 12, 2025 am 12:16 AM

InspectorControls是Gutenberg開發(fā)中用於在右側(cè)邊欄添加自定義控件的組件,1.它屬於@wordpress/block-editor包,2.常搭配PanelBody、TextControl等組件使用,3.使用時(shí)需在edit.js中引入並合理佈局控件類型如文本框、下拉選擇、開關(guān)、滑動(dòng)條和顏色選擇器等,4.應(yīng)注意分組設(shè)置、保持簡潔、支持國際化及優(yōu)化性能。

See all articles