如何在插件中包含和使用自定义类文件?

时间:2020-04-18 作者:Ben Aldrich

我对OOP完全陌生,但我试图通过创建一个简单的Recipes插件来深入了解。我添加了一个Recipes自定义帖子类型和一些元字段,现在我正在尝试创建一些模板文件来显示recipe元和内容。要做到这一点,我认为创建一个类来获取特定帖子的所有元是有用的。

为了测试,我创建了一个模板文件,用于在帖子内容后用单个元值回显一句话:

$recipe = new Wp_Recipes_Recipe;
echo \'<p>The prep time for this recipe is \' . $recipe->$recipeprep . \'</p>\';
我在plugin dir>public中创建了一个名为“class wp recipes recipe.php”的新文件,其中包含以下内容:

class Wp_Recipes_Recipe {

  public function __construct( $post_id ) {

    $this->$recipemeta = get_post_custom($post_id);
    $this->$recipeprep = $this->$recipemeta[\'_rcp-prep-time\'][0];

  }

}
我想我需要添加一些代码来指定包含我的新文件,但我不知道该放在哪里。我已经尝试将文件的“require\\u once”放在includes文件夹的load\\u dependencies()函数中。无论我尝试什么,我试图显示的元值都不会显示,我的努力唯一值得注意的效果是wp管理栏不再显示。

我可能完全走错了方向,但任何指导都将不胜感激!谢谢

2 个回复
最合适的回答,由SO网友:cameronjonesweb 整理而成

构造函数要求在类安装时将post ID传递给类,请尝试以下操作

$recipe = new Wp_Recipes_Recipe( get_the_ID() );

SO网友:Jacob Peattie

当WordPress加载插件时,它只会自动加载主插件文件。顶部有这个的那个:

<?php
/**
 * Plugin Name: YOUR PLUGIN NAME
 */
如果在其他文件中有要使用的函数或类定义,则需要将它们包含在此文件中。如果您的类文件是public/class-wp-recipes-recipe.php, 然后你会像这样包括它,使用plugin_dir_path():

<?php
/**
 * Plugin Name: YOUR PLUGIN NAME
 */

require_once plugin_dir_path( __FILE__ ) . \'public/class-wp-recipes-recipe.php\';
现在,在加载插件后,您的类可以在WordPress中的任何位置使用。

您可能希望将include放入函数中,只在需要时才包含它,甚至可以尝试使用自动加载程序,但这是将PHP文件加载到插件中所需的最低要求。

最后,您不应该使用Wp_ 您自己的类和函数的前缀。前缀的目的是为它们命名名称,以避免与其他主题、插件和WordPress本身发生冲突。虽然WordPress不太可能包含名为Wp_Recipes_Recipe, 你应该Wp_ 保留并使用您自己的唯一前缀(甚至namespaces, WordPress并不需要PHP 5.6)。

相关推荐

重置插件版本缓存|PRE_SET_SITE_TRANSPENT_UPDATE_PLUGINS

在我的插件中,我使用这些过滤器进行自动更新并检查许可证。add_filter( \'pre_set_site_transient_update_plugins\', array( &$this, \'check_for_update\' ) ); add_filter( \'plugins_api\', array( &$this, \'plugin_api_call\' ), 10, 3 ); 但正如我所看到的,WordPress在我的插件中更改了版本标签后,会调用该过