PHP类-获取非对象的属性&;未定义的通知
*edit已修复此代码-请参阅标记为edit*的内联注释。 在wordpress主题中使用以下代码时,我收到一些PHP调试通知。这是我第一次尝试使用PHP类,它确实可以正常工作,但调试通知与我有关。我在PHP模板中调用该方法,因此:PHP类-获取非对象的属性&;未定义的通知,php,wordpress,Php,Wordpress,*edit已修复此代码-请参阅标记为edit*的内联注释。 在wordpress主题中使用以下代码时,我收到一些PHP调试通知。这是我第一次尝试使用PHP类,它确实可以正常工作,但调试通知与我有关。我在PHP模板中调用该方法,因此: & 调试注意事项如下: 注意:未定义变量:post 注意:尝试获取非对象的属性 根据我所做的研究,这看起来像是类有时返回非对象的问题,因此我尝试将“echo”包装在isset和is_object中,但我无法修复这些注意事项 下面是简化的代码。为了我的理智,我真的需要
&
调试注意事项如下:
注意:未定义变量:post
注意:尝试获取非对象的属性
根据我所做的研究,这看起来像是类有时返回非对象的问题,因此我尝试将“echo”包装在isset
和is_object
中,但我无法修复这些注意事项
下面是简化的代码。为了我的理智,我真的需要一些帮助
// define the class
class getJobMeta {
var $jobmeta_echo; // set a class variable to store our echo
public function job_type() { // define a class function and make it public
global $post // EDIT IN FIX
if ( 'post' == get_post_type() ) {
$jobtype = get_the_term_list( $post->ID, 'job-type', '<span itemprop="employmentType">', ', ', '</span>', 0 ); // 0 at end of arg signifies that we don't want links outputted
}
else {
return '';
}
echo $jobtype.$this->jobmeta_echo;
} // end function job_type
// define post type
public function post_types() {
global $post // EDIT IN FIX
if ('post' == get_post_type()) {
$posttype = get_the_term_list( $post->ID, 'channel', '<strong class="channel-links clearfix">', ', ', '</strong>', 1); // 1 means output as link
} elseif ( 'blog' == get_post_type() ) {
$posttype = '<a href="/blog/" class="post-type-label">Blog</a>';
} elseif ( 'type2' == get_post_type() ) {
$posttype = '<a href="/type2/" class="post-type-label">Type2</a>';
} else {
$posttype = '';
}
echo $posttype.$this->jobmeta_echo; // EDIT TYPO
} // end function posttype
} // end getJobMeta class
// set the class into a variable
$getjobmeta = new getJobMeta;
//定义类
类getJobMeta{
var$jobmeta_echo;//设置一个类变量来存储我们的echo
公共函数job_type(){//定义一个类函数并将其公开
全局$post//在修复中编辑
如果('post'==get_post_type()){
$jobtype=get_-term_列表($post->ID,'job-type','','',0);//arg末尾的0表示不希望输出链接
}
否则{
返回“”;
}
echo$jobtype.$this->jobmeta\u echo;
}//结束函数作业类型
//定义职位类型
公共函数post_type(){
全局$post//在修复中编辑
if('post'==get\u post\u type()){
$posttype=get_-term_列表($post->ID,'channel',',',',',1);//1表示作为链接输出
}elseif('blog'==get\u post\u type()){
$posttype='';
}elseif('type2'==get\u post\u type()){
$posttype='';
}否则{
$posttype='';
}
echo$posttype.$this->jobmeta\u echo;//编辑打字错误
}//结束函数posttype
}//结束getJobMeta类
//将类设置为变量
$getjobmeta=新的getjobmeta;
谢谢
Ben您在这里询问Wordpress,而
$post
是一个全局变量,因此您需要在函数中定义它:
public function job_type() {
global $post;
...
public function post_types() {
global $post;
...
您在这里询问Wordpress,
$post
是一个全局变量,因此您需要在函数中定义它:
public function job_type() {
global $post;
...
public function post_types() {
global $post;
...
警告很可能来自这一行:
$jobtype = get_the_term_list( $post->ID, 'job-type', '<span itemprop="employmentType">', ', ', '</span>', 0 ); // 0 at end of arg signifies that we don't want
$jobtype=获取术语列表($post->ID,'job type','','','',0);//arg末尾的0表示我们不希望
特别是$post->ID
这在代码中没有初始化,因此出现了两个警告。这些警告很可能来自这一行:
$jobtype = get_the_term_list( $post->ID, 'job-type', '<span itemprop="employmentType">', ', ', '</span>', 0 ); // 0 at end of arg signifies that we don't want
$jobtype=获取术语列表($post->ID,'job type','','','',0);//arg末尾的0表示我们不希望
特别是$post->ID
这在代码中没有初始化,因此出现了两个警告。您在两个位置使用了
$post->ID
,这似乎超出了您的类的范围。也许这些应该是$this->post->ID
?我不知道Wordpress的内部结构$posttype=获取术语列表($post->ID,
“调用类”不正确。你可以调用方法。要调用方法,你应该创建一个对象或调用静态方法。你能提供更多的代码吗?$getjobmeta是如何定义的?@Michael,是的,你发现了。这是wordpress的问题。我需要在我的函数中定义全局$post,正如hakre所指出的。谢谢!@Vitalmax-很抱歉,你失去了我。你是说我应该以不同的方式构建我的类?任何关于最佳实践的指导都会很棒。这是我的第一次尝试。别忘了。谢谢你的输入。@Vitalmax-啊,我明白你的意思。我已经编辑了问题,并将“调用类”改为“调用方法”。谢谢你指出。你在两个地方使用了$post->ID
,这似乎超出了你的类的范围。也许这些应该是$this->post->ID
?我不知道Wordpress的内部结构。$posttype=获取术语列表($post->ID,
“调用类”不正确。你可以调用方法。要调用方法,你应该创建一个对象或调用静态方法。你能提供更多的代码吗?$getjobmeta是如何定义的?@Michael,是的,你发现了。这是wordpress的问题。我需要在我的函数中定义全局$post,正如hakre所指出的。谢谢!@Vitalmax-很抱歉,你失去了我。你是说我应该以不同的方式构建我的类?任何关于最佳实践的指导都会很棒。这是我的第一次尝试。别忘了。谢谢你的输入。@Vitalmax-啊,我明白你的意思。我已经编辑了问题,并将“调用类”改为“调用方法”。谢谢你指出。hakre,spot on。谢谢。global$post,是的,很抱歉这显然是一个与wordpress相关的问题。事实上,我现在收到一个新通知:未定义属性:getJobMeta::$our_echo
,关于输出HTML字符串的调用,例如post类型的博客。这可能与未跳过的HTML有关吗?不,这与我无关h unescaped HTML。这与变量有关,并且它不是getJobMeta
的成员。请查看类顶部的变量定义。它称为jobmeta\u echo
而不是our\u echo
。PHP警告您访问了一个不存在的成员(例如,变量名称拼写错误)。太棒了。非常感谢!我应该注意公平。再次感谢。hakre,注意。感谢。global$post,是的,很抱歉这显然是一个与wordpress相关的问题。事实上,我现在收到一个新通知:未定义属性:getJobMeta::$our_echo
,关于输出HTML字符串的调用,例如post-type博客。这样做可以吗使用未缩放的HTML?不,这与w无关