我正在尝试开发一个推荐插件。它不会运行并提供以下错误消息..
无法激活插件,因为它触发了致命错误。
代码是:
add_filter('the_content','Recommender_function');
function Recommender_function(){
$id=get_the_id();
if(!is_singular('post')){
return $content;
}
$terms=get_the_terms($id,'category');
$categoriesarr=array();
foreach($terms as $term)
{
$categoriesarr[]=$term->cat_ID;
}
$loop=new WP_Query(
array('posts_per_page'=>4,'category__in'=>$categoriesarr));
if($loop->have_posts()){
$content.='<h2>I say, you should also try</h2>
<ul class ="Recommendation">';
while($loop-have_posts()){
$loop-the_post();
$content.='<li>
<a href="'.get_permalink().'">'.get_the_title().'</a></li>';
}
$content.='</ul>';
WP_reset_Query();
return $content;
}
}
知道我哪里错了吗?
答案 0 :(得分:1)
查看原文中的这两行:
while($loop-have_posts()){
$loop-the_post();
您正在实例化为$loop
的类中调用函数,而不是名为$loop-have_posts()
或$loop-the_post()
的函数。所以这两行应该是这样的:
while($loop->have_posts()){
$loop->the_post();
我注意到的另一件事是你通过$content
连接.=
字符串,但是你没有初始化字符串。所以我在$content = '';
循环之前添加了if()
。希望这会奏效。
此外,我会这样说:你真的需要养成格式化代码以便于阅读的习惯。当你处于编码过程中时,这似乎很痛苦,但实际情况是你的代码阅读起来越难,你调试它的时间就越难。并且这使得其他人更难以帮助您进行调试。
所以说,我在下面重新格式化了你的功能:
add_filter('the_content','Recommender_function');
function Recommender_function() {
$id=get_the_id();
if (!is_singular('post')) {
return $content;
}
$terms = get_the_terms($id,'category');
$categoriesarr = array();
foreach ($terms as $term) {
$categoriesarr[] = $term->cat_ID;
}
$loop = new WP_Query (array('posts_per_page'=>4,'category__in'=>$categoriesarr));
$content = '';
if ($loop->have_posts()) {
$content .= '<h2>I say, you should also try</h2>'
. '<ul class ="Recommendation">'
;
while ($loop->have_posts()) {
$loop->the_post();
$content .= '<li>'
. '<a href="'.get_permalink().'">'
. get_the_title()
. '</a>'
.'</li>'
;
}
$content .= '</ul>';
WP_reset_Query();
return $content;
}
}
答案 1 :(得分:1)
您不能在函数名称中使用-
。你的while循环使用这种格式两次,我猜你想做$loop->have_posts()
和$loop->the_post()
。
while ($loop-have_posts()) {
$loop-the_post();
$content .= '<li>'
. '<a href="'.get_permalink().'">'
. get_the_title()
. '</a>'
.'</li>'
;
}