Wordpress插件未激活,因为它为自定义wp查询提供致命错误

时间:2014-04-02 18:03:20

标签: php wordpress

我正在尝试开发一个推荐插件。它不会运行并提供以下错误消息..

  

无法激活插件,因为它触发了致命错误。

代码是:

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

知道我哪里错了吗?

2 个答案:

答案 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>'
              ;
}