从其他文件调用 php 类

2024-04-13

我正在研究一些自定义帖子类型。我完成了第一个,并意识到我正在使用的元框代码可以被其他未来的自定义帖子类型(以及页面、帖子等)重复使用。因此,我将该类放入其自己的 php 文件中,并将其包含在我的子主题的functions.php 文件中。我以前从未使用过类,但我想我可以从任何我想要的地方调用该类,因为这就是我对函数所做的。相反,我从 post-types.php 文件中调用它并收到以下错误:

“致命错误:在第 73 行的 D:\helga\xampp\htdocs\plagueround\wp-content\themes\plagueround_new2\functions\post-types.php 中找不到类 'My_meta_box'”

在我的子主题的functions.php中,我包含了我的类所在的文件:

define('CHILDTHEME_DIRECTORY', get_stylesheet_directory() . '/');
// Meta Box Class - makes meta boxes
require_once(CHILDTHEME_DIRECTORY . 'functions/meta_box_class.php');

这是我的课

//My Meta Box CLASS
//from: http://www.deluxeblogtips.com/2010/05/howto-meta-box-wordpress.html

class My_meta_box {

        protected $_meta_box;

        // create meta box based on given data
        function __construct($meta_box) {
        $this->_meta_box = $meta_box;
        add_action('admin_menu', array(&$this, 'add'));

        add_action('save_post', array(&$this, 'save'));
    }

    /// Add meta box for multiple post types
    function add() {
        foreach ($this->_meta_box['pages'] as $page) {
            add_meta_box($this->_meta_box['id'], $this->_meta_box['title'], array(&$this, 'show'), $page, $this->_meta_box['context'], $this->_meta_box['priority']);
        }
    }

    // Callback function to show fields in meta box
    function show() {
        global $post;

        // Use nonce for verification
        echo '<input type="hidden" name="mytheme_meta_box_nonce" value="', wp_create_nonce(basename(__FILE__)), '" />';

        echo '<table class="form-table">';

        foreach ($this->_meta_box['fields'] as $field) {
            // get current post meta data
            $meta = get_post_meta($post->ID, $field['id'], true);

            echo '<tr>',
                    '<th style="width:20%"><label for="', $field['id'], '">', $field['name'], '</label></th>',
                    '<td>';
            switch ($field['type']) {
                case 'text':
                    echo '<input type="text" name="', $field['id'], '" id="', $field['id'], '" value="', $meta ? $meta : $field['std'], '" size="30" style="width:97%" />',
                        '<br />', $field['desc'];
                    break;
                case 'textarea':
                    echo '<textarea name="', $field['id'], '" id="', $field['id'], '" cols="60" rows="4" style="width:97%">', $meta ? $meta : $field['std'], '</textarea>',
                        '<br />', $field['desc'];
                    break;
                case 'select':
                    echo '<select name="', $field['id'], '" id="', $field['id'], '">';
                    foreach ($field['options'] as $option) {
                        echo '<option', $meta == $option ? ' selected="selected"' : '', '>', $option, '</option>';
                    }
                    echo '</select>';
                break;
                case 'select2': //for when value and display text don't match
                                //$options array must be multidimensional with both the 'value' and the 'text' for each option
                                //for example = array( array(text=>text1,value=>value1),array(text=>text2,value=>value2))
                                //then in <option> value = $option['value'] and text = $option['text']
                    echo '<select name="', $field['id'], '" id="', $field['id'], '">';
                    foreach ($field['options'] as $option) {
                        echo '<option value="',$option['value'],'"', $meta == $option['value'] ? ' selected="selected"' : '', '>', $option['desc'], '</option>';
                    }
                    echo '</select>';
                    break;
                case 'radio':
                    foreach ($field['options'] as $option) {
                        echo '<input type="radio" name="', $field['id'], '" value="', $option['value'], '"', $meta == $option['value'] ? ' checked="checked"' : '', ' />', $option['name'];
                    }
                    break;
                case 'checkbox':
                    echo '<input type="checkbox" name="', $field['id'], '" id="', $field['id'], '"', $meta ? ' checked="checked"' : '', ' />';
                    break;
            }
            echo    '<td>',
                '</tr>';
        }

        echo '</table>';
    }

    // Save data from meta box
    function save($post_id) {
        // verify nonce
        if (!wp_verify_nonce($_POST['mytheme_meta_box_nonce'], basename(__FILE__))) {
            return $post_id;
        }

        // check autosave
        if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
            return $post_id;
        }

        // check permissions
        if ('page' == $_POST['post_type']) {
            if (!current_user_can('edit_page', $post_id)) {
                return $post_id;
            }
        } elseif (!current_user_can('edit_post', $post_id)) {
            return $post_id;
        }

        foreach ($this->_meta_box['fields'] as $field) {
            $old = get_post_meta($post_id, $field['id'], true);
            $new = $_POST[$field['id']];

            if ($new && $new != $old) {
                update_post_meta($post_id, $field['id'], $new);
            } elseif ('' == $new && $old) {
                delete_post_meta($post_id, $field['id'], $old);
            }
        }
    }
}

然后在我的 post-types.php 文件中,我为自定义帖子类型定义了一些元框:

$prefix = '_events_';
$post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID'] ;

$events_meta_box = array(
    'id' => 'wpt_events',
    'title' => 'Events Options',
    'pages' => array('events'), // multiple post types possible
    'context' => 'side',
    'priority' => 'low',
    'fields' => array(
        array(
            'name' => 'Headline',
            'desc' => 'Enter the heading you\'d like to appear before the video',
            'id' => $prefix . 'heading1',
            'type' => 'text',
            'std' => ''
        ),

    )

);

$my_box = new My_meta_box($events_meta_box); 

那么,如何引用其他文件中的类呢?

编辑/继续

只需将 require_once 语句移至 post-types.php (试图调用该类的语句)似乎就可以了。但无论如何,我尝试了自动加载脚本

function __autoload($className)
{
        require(CHILDTHEME_DIRECTORY .'functions/class_' . $className . '.php')  ;
}

我将类文件重命名为 class_My_meta_box.php ,My_meta_box 是类名

这会导致以下错误: 警告: require(D:\helga\xampp\htdocs\plagueround/wp-content/themes/plagueround_new/functions/class_WP_User_Search.php) [function.require]: 无法打开流: D:\helga 中没有这样的文件或目录\xampp\htdocs\plagueround\wp-content\themes\plagueround_new\functions.php 第 66 行

致命错误:require() [function.require]: 无法打开所需的 'D:\helga\xampp\htdocs\plagueround/wp-content/themes/plagueround_new/functions/class_WP_User_Search.php' (include_path='.;D:\ helga\xampp\php\PEAR') 在 D:\helga\xampp\htdocs\plagueround\wp-content\themes\plagueround_new\functions.php 第 66 行

我不完全明白它说的是什么,但我认为它正在尝试自动加载一些默认的 WordPress 类...并且正在我的目录中查找它显然不存在的地方。


实际上,文件是否包含类或其他内容并不重要。为了使 PHP 能够执行其他文件中的代码,PHP 必须知道该文件在哪里,因此这是您的常规操作require or include.

Example:

// foo.class.php
class Foo {}

// main.php
require_once '/path/to/foo.class.php';
$foo = new Foo;

使用类时,实际上有意义使用命名约定 https://stackoverflow.com/questions/3350560/php-coding-style-best-practices/3350564#3350564并使用自动装载机 https://www.php.net/manual/en/function.spl-autoload-register.php, so PHP 将尝试自行包含该类 http://www.brandonsavage.net/making-life-better-with-the-spl-autoloader/,无需您要求或包含它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从其他文件调用 php 类 的相关文章

  • 合并 csv 文件 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何在 PHP 或 joomla 中将多个 CSV 文件合并为一个 csv 文件 将文件夹中 csv 文件中的所有数据合并到文本文件中 通
  • curl 无法获取网页内容,为什么?

    我正在使用curl 脚本转到链接并获取其内容以进行进一步操作 以下是链接和curl脚本
  • 如何使用 PHP 从内容中查找 URL?

    需要一个简单的 preg match 它将在内容中查找 c aspx 不带引号 如果找到 它将返回整个 url 举个例子 content div 4 a href m c aspx mt 01 9310ba801f1255e02e411d8
  • 如何使用 PHP 动态插入 CSS 类?

    下面的代码有什么问题 我想在相应的情况下动态插入 当前 CSS 类 li 单击元素 谢谢 section section li
  • cakephp 1.1 与 php 5.3

    我刚刚从 php 5 1 升级到 5 3 之前在我的服务器上使用 cakephp 1 1 自从升级 或者可能更早 我不确定 以来 我收到以下错误 任何人都可以透露一些信息 Deprecated Assigning the return va
  • PHP服务器端IAB验证openssl_verify总是返回0

    我使用以下函数 服务器端 php 来验证 IAB v3 事务 我从 Android 应用程序传递过来 Override protected void onActivityResult int requestCode int resultCo
  • 如何将 .env 添加到 codeigniter?

    我尝试按照以下步骤使 php 连接到 Outlookhttps learn microsoft com en us outlook rest php tutorial https learn microsoft com en us outl
  • HTTP_REFERER 返回 NULL,$_SERVER 中不存在密钥

    使用以来第一次 SERVER HTTP REFERER 它给了我NULL因此 当我做var dump SERVER the HTTP REFERER密钥不存在 我还尝试使用不同的浏览器和不同的网站访问网站 但没有结果 该网站在基于 Linu
  • 正则表达式替换混合数字+字符串

    我想删除所有包含数字的单词 示例 LW23 London W98 String 从上面的字符串中我唯一想保留的是 London String 这可以用正则表达式来完成吗 我目前正在使用 Python 但 PHP 代码也很好 Thanks E
  • 内联函数以及类和头文件

    头文件中定义的任何函数都会自动内联吗 如果我在类中声明一个函数并使用关键字 inline 在外部给出定义 那么这个函数会是内联的吗 如果是 为什么这不违反内联函数应在声明时赋予主体的法律 类定义中定义的任何函数都是内联的 任何标记的功能in
  • 获取目录中最后修改的文件

    有没有办法只选择目录中的最后一个文件 扩展名jpg png gif 或者我是否必须解析整个目录并使用进行检查filemtime 是的 你必须通读它们 但由于目录访问已被缓存 因此您不必真正担心它 files array merge glob
  • .htaccess 在动态文件夹名称中加载索引

    我在 htaccess 加载动态文件夹名称中的索引时遇到问题 这是我的目录结构 root products gt this is constant folder name 而不是使用 GET 获取产品 url root products i
  • Lumen 微框架 => php artisan key:generate

    我正在尝试 PHP 微框架 Lumen 来自 Laravel 我的第一步就是调查 env example文件并复制一份以供我使用 env文件 就像 Laravel 中一样 有一个变量 APP KEY 现在我尝试了简单的命令php artis
  • 如何在PHP中将图像从内存上传到AWS S3?

    所以我目前有一个使用 AWS S3 上传图像的上传系统 这是代码 Upload image to S3 s3 Aws S3 S3Client factory array key gt mykey secret gt myskey try s
  • 返回上一页

    我正在使用表格来 评价 页面 此表单将数据 发布 到其他地方的 php 脚本 我只是想在处理表单后显示一个链接 这将使用户返回到上一页 我可以在 php 脚本中使用 javascript 来执行此操作吗 GF 您可以使用链接来调用histo
  • PHP OOP 静态属性语法错误 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 为什么不
  • 如何编写可以补偿拼写错误数据的 MySQL 搜索?

    有没有什么方法可以编写一个 MySQL 搜索来弥补用户在拼写等方面的错误 作为随机示例 有人可能会输入 电子邮件受保护 cdn cgi l email protection代替 电子邮件受保护 cdn cgi l email protect
  • 在 WordPress 中获取作者角色

    我正在开发我的第一个 WP 网站 需要在其帖子旁边显示作者的角色 类似于 吉米 管理员 查看可用的作者元数据 http codex wordpress org Function Reference the author meta http
  • PHP 用星号替换所有字符

    假设我有一个字符串形式的密码 password thisisaplaintextpassword 我怎样才能把它变成下面的样子 password 我想通过电子邮件向用户发送他们的帐户详细信息 但不想发送整个内容 Use 字符串重复 http
  • MYSQL 的 Google OAuth 2.0 用户 ID 数据类型

    我正在实施 Google OAuth 2 0 并注意到 Google OAuth 返回的唯一用户 ID 是21位数字长的 我想大整数 20 足以满足这种需求 但我现在看到 Google OAuth 返回的用户 ID 的长度感到困惑 关于我应

随机推荐

  • Firebase - 在不知道其成员的注册 ID 的情况下删除设备组

    在使用 Firebase 和设备组时 我正在测试令牌 注册 ID 发生更改的情况 例如重新安装应用程序后 但我的逻辑失败了 因为重新安装应用程序后我无法再知道以前存储的令牌 问题是现在我有一个设备组有两个 ghost 我不再知道的注册 ID
  • google +1 按钮向我的网站添加滚动条

    我的网站上有一个 google 1 按钮已经一年多了 一切都运行良好 在过去的几天里 这个按钮开始在我的网站上创建一个水平滚动条 我知道 因为当我删除按钮时 滚动条就会消失 这是我的网站 www kitchen guide co il ht
  • sonarqube 6.6 升级:不可恢复的索引失败

    sonarqube 从 6 5 升级到 6 6 使用 Debian 软件包 后 sonar 无法启动 升级之前我没有更新插件 我只是让标准的 Debian 软件包升级 我正在使用外部数据库 Postgresql 我在 web log 中发现
  • mysql搜索时如何忽略大小写的区别

    mysql搜索时如何忽略大小写的区别 做这样的事情 SELECT user FROM users WHERE UPPER user UPPER moustafa 基本上 您将结果转换为一种大小写 并与也转换为大写的搜索词进行比较 从而有效地
  • 在 C++ 中构造对象的不同方法

    我想使用 C 在堆栈中构造一个对象 你知道这两种调用构造函数的方式 带括号和不带括号 有什么区别吗 a MyClass object b MyClass object 我正在使用 MFC 在为主应用程序构造全局变量时 如果我使用后一种方式
  • React Router 4 中 URL 更改但视图未更改

    我使用的是react router 4而不是react router 3 所以我使用的是react router dom 我试图让 this props history push 工作 但它所做的只是保持视图相同 但 URL 发生了变化 例
  • 如何获取打开的文件弹出窗口

    现在 我有一个设置的类路径 但我想要弹出一个打开的文件 并且用户选择要打开的文件 我尝试过 JFileChooser 但到目前为止还没有成功 这是我的代码 public static void main String args throws
  • 在 PHP 中删除数组项的最佳方法是什么?

    您能告诉我从数组中删除项目的方法吗 你觉得这样好吗 那要看 a1 array a gt 1 b gt 2 c gt 3 unset a1 b array a gt 1 c gt 3 a2 array 1 2 3 unset a2 1 arr
  • 可以在 t4 模板中使用全局变量吗?

    如何在 TT 文件中使用全局变量 如果我在标头中声明一个变量 并且在函数中引用它 则会出现编译错误 lt template debug false hostspecific false language C gt lt output ext
  • 如何使用Delphi在活动显示器的右下角显示消息窗口

    这些天你看到很多软件显示活动屏幕右下角的消息窗口几秒钟或直到单击关闭按钮 例如诺顿在检查下载后执行此操作 我想使用以下方法来做到这一点Delphi 7 如果可能的话德尔福2010 因为我正在慢慢地将代码迁移到最新版本 我在这里找到了一些关于
  • 将日期转换为 GMT - php

    我遇到了一个奇怪的问题 也许你可以帮忙 我正在尝试将日期转换为 GMT 时间 这就是我正在做的事情 date 2010 05 27 23 02 01 gmt date gmdate Y m d H i s date 但产量 gmt date
  • 如何对 Newtonsoft JArray 进行排序?

    是否可以排序JArray下面由col2例如 col1 thiscol col2 thisval col1 thiscol2 col2 thisval2 col1 thiscol3 col2 thisval3 如果将其转换为Array是唯一的
  • 如何在“if x in range”语句中使用浮点数

    我正在尝试写一个if将浮点数作为范围的语句 x 8 2 if x in range 0 4 4 print one if x in range 4 5 8 print two if x in range 8 1 9 9 print thre
  • 更新对象值 Ramda

    在上一个问题中 我尝试按父 ID 对数组进行分组 然后从每个对象中删除它们 按父 ID 对象 Ramda 对数组进行分组 https stackoverflow com q 58682137 9464680 但现在我有一个新问题 例如 我想
  • Android 致命信号 11 (SIGSEGV) at 0x00000040 (code=1) 错误

    我正在开发一个 Android 应用程序 我正在其中获取用户照片图像 5张图像 使用opencv2 4 2具有面部检测功能的相机 并使用 Web 服务保存到服务器中的数据库中 为此 我使用 Opencv2 4 2 人脸检测示例 Ksoap2
  • 裁剪以适合 svg 图案

    我有一些图案 每个图案中都有一个图像 我需要将图像缩放到其容器 即路径 的完整宽度或高度 同时保留其比例 本质上 如果您设置它们 它们的行为就需要像 html 图像一样min width 100 min height 100 我以前没有太多
  • swfupload 不允许我从一台服务器上传到另一台服务器

    我们有两个网络服务器 并且我们在这两个服务器之间专门执行任务 我们决定将所有 asp aspx 页面放入一台服务器中 并将 upload aspx sql 服务器放入另一台服务器中 这是服务器的名称 http server1 somecom
  • 为什么活动需要代表?为什么我们需要事件?

    过去几周我对发生的事情感到困惑 我了解代表如何工作 但不了解其详细工作方式 但足以了解这一点delegate datatype是单个演员委托 delegate void是一个多播委托 对方法的引用列表 我知道委托类型编译为类 但不幸的是我仍
  • 如何制作 npm 安装包并忽略一个(或所有)对等依赖项?

    I have email protected cdn cgi l email protection安装 我要安装vuex module decorators latest 其对等依赖性为vuex 3 not gt 3 我有一种感觉 这会很好
  • 从其他文件调用 php 类

    我正在研究一些自定义帖子类型 我完成了第一个 并意识到我正在使用的元框代码可以被其他未来的自定义帖子类型 以及页面 帖子等 重复使用 因此 我将该类放入其自己的 php 文件中 并将其包含在我的子主题的functions php 文件中 我