>以对象为导向的代码无处不在,WordPress也不例外。
WordPress的核心构建在用于控制所有内容的一系列对象/类上 在本教程中,我们将研究面向对象的设计,以及如何在为WordPress开发时如何在实际应用中使用这些设计,包括:
准确地了解哪种面向对象的设计是。
>>
钥匙要点WordPress组中的面向对象的设计(OOD)相关的功能和信息中的信息,增强代码组织和维护。
> OOD提供了诸如通过封装,通过继承的可伸缩性和模块化的更好的组织提供好处,以便于代码重复使用和管理。
>教程提供了在WordPress中创建自定义事件展示的一个实践示例,证明了OOD原理的实现。 示例中的由于程序代码运行良好,因此您可能想知道以对象为导向的方法开发的意义是什么?
>虽然程序设计没有“错误”,但以更面向对象的样式开发有几个好处。
>组织将所有代码都放在一个地方可以帮助您保持井井有条,并协助其他可能会出现并需要了解您的系统的开发人员。
>
>没有什么比捡起一个项目并不得不四处寻找的函数和变量更糟糕的是,这些功能和变量用于创建网站的各种元素(由于未知原因而始终分布在多个文件上)。>
可伸缩性>
可以通过使用继承扩展这些类来扩展或缩放这些类。继承将使您基于另一个类创建一个类,该类可访问其所有属性和方法。>您可以扩展一类以执行其他功能,甚至可以覆盖其方法和属性以迎合这种情况。
>使用程序代码,您要么需要重构代码的一部分,要么完全创建新代码以处理其他情况。模块化
对象设计的目的是封装所有功能,以将情况求解到类中。
>由于解决问题的所有代码都在类内部,并且该类通常在其自己的PHP文件中,因此您可以将整个文件放在另一个位置,因此它本质上是模块化的。>您可以复制和粘贴程序代码,但通常情况不太井井有条,您可能必须浏览几个文件以确保您拥有所需的功能。
在这种情况下,我们的客户希望在其网站上可以创建和管理事件的位置。这些活动将用于促进即将到来的琐事之夜,宾果游戏和其他有趣的活动。
>第一步是分解所需的功能,以便我们可以计划解决方案(在这里进行良好的计划将有助于我们以对象为导向的方法进行)。在我们的情况下,我们可以看到以下一组任务:我们可以创建一个插件,也可以编辑子主题以提供此功能。
因为我们希望所有内容都可以容易地管理和模块化,所以让我们从“孩子主题”内部设置文件夹结构开始。
在此目录中,我们应该制作另一个文件夹,这次称为event_showcase。在此文件夹中,我们将在此情况下放置所有适用的文件。 我们还需要一个JS和一个CSS文件夹。
>将功能组织到文件夹中将意味着您可以更轻松地查看哪些模块 /功能您的主题工具。例如,您可能需要为主题实现另一组功能,您可以添加一个新文件夹,从逻辑上讲,所有内容都整齐地组织了。
>让我们为我们的示例创建文件,然后将它们移至正确的目录>
> event_showcase_class.php
> event_showcase_admin_styles.css
>将文件加载到WordPress
中>打开您的孩子主题的函数。php,并将以下代码放在顶部或底部
>创建类概述
>我们的类文件称为event_showcase_class.php将包含用于我们的事件系统的大多数功能;因此,最好绘制出我们需要进行这项工作需要的方法和属性的基本概述。
><span>//Theme functions for child theme </span> <span>//load our event showcase class </span><span>$event_showcase = get_stylesheet_directory() . '/includes/event_showcase/event_showcase_class.php'; </span><span>include($event_showcase);</span>>将以下代码复制到您的类文件中。
<span>//Theme functions for child theme </span> <span>//load our event showcase class </span><span>$event_showcase = get_stylesheet_directory() . '/includes/event_showcase/event_showcase_class.php'; </span><span>include($event_showcase);</span>
>让我们通过方法和属性运行,以便我们可以理解过程流程:
>我们在类的顶部声明了一些将通过我们的方法引用的属性。这些目的是使它们更容易重新置换此类并在将来更改其功能。
__ construct()
<span>/* </span><span> * Event Showcase </span><span> * Creates an 'event' content type to showcase upcoming functions and information </span><span> * Uses hooks and filters inside your theme to output relevant information </span><span> */ </span> <span>class event_showcase{ </span> <span>//variables </span> <span>private $directory = ''; </span> <span>private $singular_name = 'event'; </span> <span>private $plural_name = 'events'; </span> <span>private $content_type_name = 'event_showcase'; </span> <span>//magic function, called on creation </span> <span>public function __construct(){} </span> <span>//sets the directory (path) so that we can use this for our enqueuing </span> <span>public function set_directory_value(){} </span> <span>//check if we need to flush rewrite rules </span> <span>public function check_flush_rewrite_rules(){} </span> <span>//enqueue public scripts and styles </span> <span>public function enqueue_public_scripts_and_styles(){} </span> <span>//enqueue admin scripts and styles </span> <span>public function enqueue_admin_scripts_and_styles(){} </span> <span>//adding our new content type </span> <span>public function add_content_type(){} </span> <span>//adding meta box to save additional meta data for the content type </span> <span>public function add_meta_boxes_for_content_type(){} </span> <span>//displays the visual output of the meta box in admin (where we will save our meta data) </span> <span>public function display_function_for_content_type_meta_box($post){} </span> <span>//when saving the custom content type, save additional meta data </span> <span>public function save_custom_content_type($post_id){} </span> <span>//display additional meta information for the content type </span> <span>//@hooked using 'display_additional_meta_data' in theme </span> <span>function display_additional_meta_data(){} </span> <span>} </span> <span>//create new object </span> <span>$event_showcase = new event_showcase;</span>我们的__ -construct函数是一个魔术函数。这些功能是类的特殊PHP5功能,可以访问执行特定操作的特定功能。
> __ -construct函数一旦初始化了类,因此它是第一个将触发的函数。在这里,我们正在添加所有挂钩,过滤器和启动逻辑。 使用以下代码更新基本轮廓。
>您可能会认为add_action看起来与您以前看到的东西有点不同,并且您正确。
>
使用add_action和Add_filter在类中使用时,您必须在数组中提供第二个参数。数组的第一个值是$此变量(意味着类本身),第二个是将要使用的函数的名称(用引号包装)。<span>//variables </span><span>private $directory = ''; </span><span>private $singular_name = 'event'; </span><span>private $plural_name = 'events'; </span><span>private $content_type_name = 'event_showcase';</span>>
有关更多信息,请查看WordPress codex上的add_action函数的类脚注。
>由于我们将启用CSS和JS,因此将文件目录URL存储到可以访问的变量中是有意义的。我们的目录结构是 /包括 /event_showcase,但是可以自定义以适合您的结构。
<span>//Theme functions for child theme </span> <span>//load our event showcase class </span><span>$event_showcase = get_stylesheet_directory() . '/includes/event_showcase/event_showcase_class.php'; </span><span>include($event_showcase);</span>check_flush_rewrite_rules()
重写可确保您的内容类型转换为漂亮的格式,但是,此重写很昂贵,并且如果过度完成,则可以减慢您的网站。因为重写可能会影响您的网站,因此通常仅在主题/插件激活或停用的情况下更改。
>>由于您可能不想手动更新固定链接,因此此功能要求WordPress自动进行,并且仅一次(添加了新的内容类型之后)。
>此功能将检查是否需要通过主题选项刷新网站。如果需要冲洗,则将更新永久链接,然后将选项的值设置为false(因此它仅触发一次,而不是每次加载页面)。enqueue_public_scripts_and_styles()
此功能处理前端网站的脚本和样式的起点。
<span>/* </span><span> * Event Showcase </span><span> * Creates an 'event' content type to showcase upcoming functions and information </span><span> * Uses hooks and filters inside your theme to output relevant information </span><span> */ </span> <span>class event_showcase{ </span> <span>//variables </span> <span>private $directory = ''; </span> <span>private $singular_name = 'event'; </span> <span>private $plural_name = 'events'; </span> <span>private $content_type_name = 'event_showcase'; </span> <span>//magic function, called on creation </span> <span>public function __construct(){} </span> <span>//sets the directory (path) so that we can use this for our enqueuing </span> <span>public function set_directory_value(){} </span> <span>//check if we need to flush rewrite rules </span> <span>public function check_flush_rewrite_rules(){} </span> <span>//enqueue public scripts and styles </span> <span>public function enqueue_public_scripts_and_styles(){} </span> <span>//enqueue admin scripts and styles </span> <span>public function enqueue_admin_scripts_and_styles(){} </span> <span>//adding our new content type </span> <span>public function add_content_type(){} </span> <span>//adding meta box to save additional meta data for the content type </span> <span>public function add_meta_boxes_for_content_type(){} </span> <span>//displays the visual output of the meta box in admin (where we will save our meta data) </span> <span>public function display_function_for_content_type_meta_box($post){} </span> <span>//when saving the custom content type, save additional meta data </span> <span>public function save_custom_content_type($post_id){} </span> <span>//display additional meta information for the content type </span> <span>//@hooked using 'display_additional_meta_data' in theme </span> <span>function display_additional_meta_data(){} </span> <span>} </span> <span>//create new object </span> <span>$event_showcase = new event_showcase;</span>
加载资源时,我们还使用$目录和$ content_type_name属性。
enqueue_admin_scripts_and_styles()
此功能处理管理员后端网站的脚本和样式的起点。
>我们检查我们是否在我们的内容类型的编辑屏幕或新屏幕上,并且仅在我们的情况下继续进行(当我们不在正确的页面上时不需要加载资源)。
<span>//variables </span><span>private $directory = ''; </span><span>private $singular_name = 'event'; </span><span>private $plural_name = 'events'; </span><span>private $content_type_name = 'event_showcase';</span>
>
go从上面的链接下载时间选择器库,并在您的目录中包含相关的CSS和JS文件。
add_content_type()
我们在此功能中声明我们的自定义内容类型。
>该函数使用$ singular_name,$ plural_name和$ content_type_nameproperties来使此新帖子类型的注册轻松。
>>这样的构造注册函数,这意味着您只需提供几片信息即可轻松更改和注册帖子类型。
>有关注册自定义内容类型的更详细概述,请查看register_post_type函数的WordPress codex
<span>//Theme functions for child theme </span> <span>//load our event showcase class </span><span>$event_showcase = get_stylesheet_directory() . '/includes/event_showcase/event_showcase_class.php'; </span><span>include($event_showcase);</span>>添加了此步骤后,您应该看到一个新项目已添加到后端WordPress菜单中。
<span>/* </span><span> * Event Showcase </span><span> * Creates an 'event' content type to showcase upcoming functions and information </span><span> * Uses hooks and filters inside your theme to output relevant information </span><span> */ </span> <span>class event_showcase{ </span> <span>//variables </span> <span>private $directory = ''; </span> <span>private $singular_name = 'event'; </span> <span>private $plural_name = 'events'; </span> <span>private $content_type_name = 'event_showcase'; </span> <span>//magic function, called on creation </span> <span>public function __construct(){} </span> <span>//sets the directory (path) so that we can use this for our enqueuing </span> <span>public function set_directory_value(){} </span> <span>//check if we need to flush rewrite rules </span> <span>public function check_flush_rewrite_rules(){} </span> <span>//enqueue public scripts and styles </span> <span>public function enqueue_public_scripts_and_styles(){} </span> <span>//enqueue admin scripts and styles </span> <span>public function enqueue_admin_scripts_and_styles(){} </span> <span>//adding our new content type </span> <span>public function add_content_type(){} </span> <span>//adding meta box to save additional meta data for the content type </span> <span>public function add_meta_boxes_for_content_type(){} </span> <span>//displays the visual output of the meta box in admin (where we will save our meta data) </span> <span>public function display_function_for_content_type_meta_box($post){} </span> <span>//when saving the custom content type, save additional meta data </span> <span>public function save_custom_content_type($post_id){} </span> <span>//display additional meta information for the content type </span> <span>//@hooked using 'display_additional_meta_data' in theme </span> <span>function display_additional_meta_data(){} </span> <span>} </span> <span>//create new object </span> <span>$event_showcase = new event_showcase;</span>display_function_for_content_type_meta_box($ post)
在我们的示例中,我们正在收集有关将向最终用户展示的事件的日期,时间和其他信息。
我们首先将所有附加的后元元数据收集到变量中,并显示HTML表单的输出。其中一些字段将触发日期选择器接口,而其他字段会触发时间选择器(由元素上使用的类确定)。
>此外,我们设置了一个nonce字段,以便我们可以在此页面上验证保存。>
>完成此步骤后,您应该看到新的空元框已转换,现在可以保留我们所有的新信息。
<span>//variables </span><span>private $directory = ''; </span><span>private $singular_name = 'event'; </span><span>private $plural_name = 'events'; </span><span>private $content_type_name = 'event_showcase';</span>
> save_custom_content_type($ post_id)
>我们将所有值收集到变量中,并使用Sanitize_text_field函数对它们进行消毒。之后,我们调用update_post_meta函数以保存我们的数据。
此功能显示我们新内容类型的单个帖子的保存元信息(单个事件)。
> >您可以调用do_action('display_content_type_meta');从主题内的任何地方(只要您在此内容类型的单个帖子上),它将显示元信息。 >我正在使用二十三十三个父母主题,所以我正在挂接我的显示器主题的content.php。
之后
其他文件,CSS和JS
您可以看到其他字幕,日期,时间和票务数据。
从这里到哪里? >现在您已经看到了一个实用的对象设计的实践示例,以及增强开发的容易,您可以运用这些技能并构建更好的主题和插件。 希望本文将帮助您计划开发,并查看面向对象的方法如何节省您的时间和精力。 > WordPress中的面向对象的编程(OOP)是什么?这些对象用于相互交互以设计应用程序和软件。 WordPress中的OOP是有益的,因为它为程序提供了一个清晰的模块化结构,这使其适合定义隐藏实现详细信息并且单元具有明确定义的接口的抽象数据类型。<span>//magic function, called on creation
</span><span>public function __construct(){
</span>
<span>$this->set_directory_value(); //set the directory url on creation
</span> <span>add_action('init', array($this,'add_content_type')); //add content type
</span> <span>add_action('init', array($this,'check_flush_rewrite_rules')); //flush re-write rules for permalinks (because of content type)
</span> <span>add_action('add_meta_boxes', array($this,'add_meta_boxes_for_content_type')); //add meta boxes
</span> <span>add_action('wp_enqueue_scripts', array($this,'enqueue_public_scripts_and_styles')); //enqueue public facing elements
</span> <span>add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_scripts_and_styles')); //enqueues admin elements
</span> <span>add_action('save_post_' . $this->content_type_name, array($this,'save_custom_content_type')); //handles saving of content type meta info
</span> <span>add_action('display_content_type_meta', array($this,'display_additional_meta_data')); //displays the saved content type meta info
</span><span>}</span>
这个操作的第二个值称为display_additional_meta_data,与此功能相对应。这意味着任何时候有人调用do_action('display_content_type_meta');它将调用此函数并显示新的帖子元信息。<span>//Theme functions for child theme
</span>
<span>//load our event showcase class
</span><span>$event_showcase = get_stylesheet_directory() . '/includes/event_showcase/event_showcase_class.php';
</span><span>include($event_showcase);</span>
现在,大部分功能已经完成,让我们将其交换到我们的CSS和JS文件中以快速添加一些样式和交互性。>
> event_showcase_admin_styles.css > event_showcase_public_styles.css
<span>/*
</span><span> * Event Showcase
</span><span> * Creates an 'event' content type to showcase upcoming functions and information
</span><span> * Uses hooks and filters inside your theme to output relevant information
</span><span> */
</span>
<span>class event_showcase{
</span>
<span>//variables
</span> <span>private $directory = '';
</span> <span>private $singular_name = 'event';
</span> <span>private $plural_name = 'events';
</span> <span>private $content_type_name = 'event_showcase';
</span>
<span>//magic function, called on creation
</span> <span>public function __construct(){}
</span> <span>//sets the directory (path) so that we can use this for our enqueuing
</span> <span>public function set_directory_value(){}
</span> <span>//check if we need to flush rewrite rules
</span> <span>public function check_flush_rewrite_rules(){}
</span> <span>//enqueue public scripts and styles
</span> <span>public function enqueue_public_scripts_and_styles(){}
</span> <span>//enqueue admin scripts and styles
</span> <span>public function enqueue_admin_scripts_and_styles(){}
</span> <span>//adding our new content type
</span> <span>public function add_content_type(){}
</span> <span>//adding meta box to save additional meta data for the content type
</span> <span>public function add_meta_boxes_for_content_type(){}
</span> <span>//displays the visual output of the meta box in admin (where we will save our meta data)
</span> <span>public function display_function_for_content_type_meta_box($post){}
</span> <span>//when saving the custom content type, save additional meta data
</span> <span>public function save_custom_content_type($post_id){}
</span> <span>//display additional meta information for the content type
</span> <span>//@hooked using 'display_additional_meta_data' in theme
</span> <span>function display_additional_meta_data(){}
</span> <span>}
</span>
<span>//create new object
</span> <span>$event_showcase = new event_showcase;</span>
> event_showcase_admin_scripts.js
<span>//variables
</span><span>private $directory = '';
</span><span>private $singular_name = 'event';
</span><span>private $plural_name = 'events';
</span><span>private $content_type_name = 'event_showcase';</span>
>在操作中完成的功能!
>
<span>//magic function, called on creation
</span><span>public function __construct(){
</span>
<span>$this->set_directory_value(); //set the directory url on creation
</span> <span>add_action('init', array($this,'add_content_type')); //add content type
</span> <span>add_action('init', array($this,'check_flush_rewrite_rules')); //flush re-write rules for permalinks (because of content type)
</span> <span>add_action('add_meta_boxes', array($this,'add_meta_boxes_for_content_type')); //add meta boxes
</span> <span>add_action('wp_enqueue_scripts', array($this,'enqueue_public_scripts_and_styles')); //enqueue public facing elements
</span> <span>add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_scripts_and_styles')); //enqueues admin elements
</span> <span>add_action('save_post_' . $this->content_type_name, array($this,'save_custom_content_type')); //handles saving of content type meta info
</span> <span>add_action('display_content_type_meta', array($this,'display_additional_meta_data')); //displays the saved content type meta info
</span><span>}</span>
>所有内容都拼凑在一起时,您应该能够使用其他元数据创建一个新的“事件”。当您查看活动时,您应该在下面看到我的样本>
>
>您可能想从我的GitHub页面下载此示例的来源,然后更改它适合即将到来的项目或扩展其以提供其他功能。
>面向对象的编程与WordPress中的程序编程有何不同?
>
>如何在WordPress中的盒子中删除OBJ?
>
>我如何学习以wordpress为导向的对象编程? WordPress面向对象的编程。这包括在线教程,课程和书籍。您还可以通过检查WordPress核心代码来学习,因为它是使用OOP原理编写的。是wordpress开发所需的面向对象的编程吗?> > > > > >
并不是严格地面向对象的编程。强烈建议使用WordPress开发。使用OOP原则可以帮助您的代码更可读,可重复使用且易于维护。它还可以帮助您更好地理解WordPress核心代码。以上是WordPress以对象为导向的开发的详细内容。更多信息请关注PHP中文网其他相关文章!