Wordpress开发新手。
我正在使用一个插件,它使用自定义帖子类型创建在线课程。
我注意到这个插件有一个名为
/wp内容/插件/sfwd lms/包含/类/类ldlms主题模型。php
它包含:
<?php
if ( ( class_exists( \'LDLMS_Model_Post\' ) ) && ( ! class_exists( \'LDLMS_Model_Topic\' ) ) ) {
class LDLMS_Model_Topic extends LDLMS_Model_Post {
private static $post_type = \'sfwd-topic\';
function __construct( $topic_id = 0 ) {
$this->load( $topic_id );
}
// Endof functions.
}
}
因此,在一个钩子操作中,我试图访问插件的模型。例如:
require_once LEARNDASH_LMS_PLUGIN_DIR . \'includes/classes/abstract-ldlms-model-post.php\';
require_once LEARNDASH_LMS_PLUGIN_DIR . \'includes/classes/class-ldlms-topic-model.php\';
add_action( \'learndash-topic-quiz-row-before\', \'show_topic_content\', 10, 3);
function show_topic_content($topicID, $course_id, $user_id) {
// get model
$thistopic = new LDLMS_Model_Topic($topicID);
print_r($thistopic);die;
}
但我有一个错误:
Fatal error: Uncaught Error: Call to undefined method LDLMS_Model_Topic::load() in wp-content/plugins/sfwd-lms/includes/classes/class-ldlms-topic-model.php:8
我刚从Laravel开发公司来,所以我想有一种类似wordpress的方式来访问模型,也许我错过了一些步骤?
或者也许,因为topic
在这个插件中post
我需要使用post
模型看来这会很奇怪topic
模型是它自己独特的post
.
我很想知道访问模型及其权限的正确的、插件无关的方式是什么。
谢谢Brian
SO网友:Tom J Nowell
我刚从Laravel开发公司来,所以我想有一种类似wordpress的方式来访问模型,也许我错过了一些步骤?
你不需要,Laravel是一个提供结构的框架,所以模型就是模型,但在WP中没有这些。
WordPress中的插件只是PHP文件,顶部有一条注释,其中包含一些元数据。它们没有被包含、沙盒或以任何方式分开,这意味着:
您无法从类可能位于的文件夹/文件名中推断出任何内容这些对象和变量不存储在公共位置,除非插件将其放在一个位置,否则没有标准的方法获取插件数据结构,如果插件有任何数据结构,插件可能没有任何模型可获取,它可能使用不同的编程范式,它可能根本不存储任何数据。插件甚至可以加载Laravel的部分内容,并使用Laravel在内部构建自己。我自己在WP插件中使用过Symfony组件
因此,如果数据是使用WordPress API(如自定义帖子类型、帖子元、分类法等)存储的,那么您可以使用所有标准的WP函数来检索它们。你需要做一些调查来了解后元价值观LearnDash存储了什么,以及它们的含义和作用。
至于控制器和模型,WP不提供控制器和模型。WP提供的任何类都不是存储或扩展的地方。它不是一个面向对象的框架,或者根本不是一个框架,您必须提供这些信息。
那么,如何获得具有所需数据的对象呢?
查看learndash文档阅读代码,找出该类在何处实例化为对象,以及如何存储该类。查找单例、静态变量、全局变量、过滤器,接受可能没有获取它的方法,但更重要的是,请联系learndash支持部门。第三方插件是非主题的,所以你在这里得到的任何答案都是通用的,它不会告诉你LearnDash的细节。如果LearnDash支持帮不上忙,那么很不幸,您需要雇佣一位了解LearnDash的开发人员,调查其他方法,或者阅读LearnDash代码和文档来解决问题