L'appel des classes php à partir d'autres fichiers

Je suis en train de travailler sur certains types de poste personnalisés. J'ai fini le premier et réalisé que le metabox code que j'ai été en utilisant pourraient être réutilisées par d'autres, d'avenir, de types de poste personnalisés (ainsi que des pages, messages, etc). Alors j'ai mis la classe dans son propre fichier php et de la functions.php dossier de mon thème enfant. Je n'ai jamais utilisé les classes avant, mais j'ai pensé que je pourrais appeler la classe, d'où que je voulais depuis que je fais pour les fonctions. au lieu de cela je l'ai appelé de mon post-types.php fichier et j'ai obtenu le message d'erreur suivant:

"Fatal error: Class 'My_meta_box' ne trouve pas dans D:\helga\xampp\htdocs\plagueround\wp-content\themes\plagueround_new2\functions\post-types.php sur la ligne 73"

Dans le functions.php de mon thème enfant, je ai inclus le fichier où ma classe vies:

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

voici ma classe

//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);
}
}
}
}

ensuite dans mon post-types.php fichier où je suis la définition de certains méta boîtes pour un custom post type, j'ai:

$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); 

Soi - comment dois-je faire référence classes à partir d'autres fichiers?

MODIFICATIONS/POURSUITE

simplement en déplaçant le require_once déclaration à la post-types.php (l'un essayant d'appel de la classe) semblait fonctionner. mais pour le fun j'ai essayé le chargement automatique de script

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

où j'ai renommé mon fichier de classe class_My_meta_box.php et My_meta_box est le nom de la classe

qui provoque les erreurs suivantes:
Avertissement: require(D:\helga\xampp\htdocs\plagueround/wp-content/themes/plagueround_new/functions/class_WP_User_Search.php) [function.exiger]: failed to open stream: No such file or directory in D:\helga\xampp\htdocs\plagueround\wp-content\themes\plagueround_new\functions.php sur la ligne 66

Erreur fatale: require() [function.exiger]: Failed opening required 'D:\helga\xampp\htdocs\plagueround/wp-content/themes/plagueround_new/functions/class_WP_User_Search.php' (include_path='.;D:\helga\xampp\php\PEAR') dans D:\helga\xampp\htdocs\plagueround\wp-content\themes\plagueround_new\functions.php sur la ligne 66

je ne comprend pas tout à fait ce qu'il dit, MAIS je pense que c'est en essayant de charger automatiquement certains de wordpress par défaut de la classe... et est à la recherche de mon répertoire où il est évident qu'elle n'existe pas.

  • votre metabox.php n'est pas inclus. êtes-vous sûr que le require_once déclaration de chargement est correctement?
  • require / require_once provoquer une erreur fatale si le fichier n'existe pas. Une autre erreur fatale que Helga est arriver.
  • putain vous êtes tous tellement vite. merci! eh bien j'ai testé le require_once instruction w/ jquery alerte si j'étais/suis assez sûr que c'était de gagner correctement chargé. il semblait fonctionner quand j'ai déménagé le besoin énoncé post-types.php où je faisait référence à la classe