当用户角色为\'administrator\'
或者是um_verified\'
老实说,我不知道这意味着什么,但我仍然想解决这个问题。此函数提取给定WordPress帖子的用户id,然后获取作者数据,使用作者数据找出用户角色,如果用户角色与if子句匹配,则会对其进行回显,整个函数将根据内容运行。
我对下面给出的代码的实现给出了正确的结果,基本上是可行的,但它显示了一个错误“试图获取非对象的属性‘角色’”,基本上这意味着该属性应该是一个对象。
我如何解决这个错误,基本上我知道有些地方出了问题,因为它在几个小时内就累积了大约5mb的错误。请帮助我更正代码,并解释对象在PHP中的含义。
function Milyin_After_Content($content) {
if( is_single() ):
ob_start();
$user_meta=get_userdata(get_the_author_meta(\'ID\'));
$user_role=$user_meta->roles;
if (in_array("administrator", $user_role) | in_array("um_verified", $user_role)){
echo \'<svg height="12pt" viewBox="0 0 512 512" width="12pt" xmlns="http://www.w3.org/2000/svg"><path d="m256 0c-141.164062 0-256 114.835938-256 256s114.835938 256 256 256 256-114.835938 256-256-114.835938-256-256-256zm0 0" fill="#1f1fff"/><path d="m385.75 201.75-138.667969 138.664062c-4.160156 4.160157-9.621093 6.253907-15.082031 6.253907s-10.921875-2.09375-15.082031-6.253907l-69.332031-69.332031c-8.34375-8.339843-8.34375-21.824219 0-30.164062 8.339843-8.34375 21.820312-8.34375 30.164062 0l54.25 54.25 123.585938-123.582031c8.339843-8.34375 21.820312-8.34375 30.164062 0 8.339844 8.339843 8.339844 21.820312 0 30.164062zm0 0" fill="#fff"/></svg>
\';}
$code_content_2 = ob_get_clean();
$content .= $code_content_2;
endif;
return $content;
}
add_filter(\'the_content\', \'Milyin_After_Content_2\', 10);
这就是代码,我回显的代码只是普通的HTML,基本上是SVG标记,所以应该没有问题。如果有更好的方法或内置Wordpress函数来检查用户角色数组,那就更好了,但由于这是我找到的唯一方法,请帮助我调试并改进它。。。
最合适的回答,由SO网友:ChristopherJones 整理而成
PHP中的对象是一种可以阅读更多内容的数据类型data types here
最好在使用变量类型之前检查它们。在你的情况下,你假设$user_meta
是一个对象。因为您正在筛选the_content()
, 它可能被称为其他地方并返回该错误。
以下是更新的代码is_object()
要在使用前检查该变量,请执行以下操作:
function Milyin_After_Content($content) {
if( is_single() ):
ob_start();
$user_meta=get_userdata(get_the_author_meta(\'ID\'));
// NOTE:
// First check
if(is_object($user_meta)){
// Then set your variable here
$user_role=$user_meta->roles;
if (in_array("administrator", $user_role) || in_array("um_verified", $user_role)){
echo \'<svg height="12pt" viewBox="0 0 512 512" width="12pt" xmlns="http://www.w3.org/2000/svg"><path d="m256 0c-141.164062 0-256 114.835938-256 256s114.835938 256 256 256 256-114.835938 256-256-114.835938-256-256-256zm0 0" fill="#1f1fff"/><path d="m385.75 201.75-138.667969 138.664062c-4.160156 4.160157-9.621093 6.253907-15.082031 6.253907s-10.921875-2.09375-15.082031-6.253907l-69.332031-69.332031c-8.34375-8.339843-8.34375-21.824219 0-30.164062 8.339843-8.34375 21.820312-8.34375 30.164062 0l54.25 54.25 123.585938-123.582031c8.339843-8.34375 21.820312-8.34375 30.164062 0 8.339844 8.339843 8.339844 21.820312 0 30.164062zm0 0" fill="#fff"/></svg>\';
}
$code_content_2 = ob_get_clean();
$content .= $code_content_2;
}
endif;
return $content;
}
add_filter(\'the_content\', \'Milyin_After_Content_2\', 10);
(还要注意上面@WebElaine的评论,在if()语句中应该使用两个管道。)
希望有帮助!