0

我对 PHP 还很陌生,不知道在哪里可以寻求帮助。

我试图创建的函数不是作为函数工作的,但是一旦我把它变成一个函数,它就会中断。我计划在带有参数的页面上多次使用此函数。

理想的功能是将所有自定义帖子项收集到一个数组中,对数组进行排序,然后回显 HTML 代码。

感谢您提供的任何帮助。

<?php
function postTerms($termName)
{
    $postTermsArray = array();
    rewind_posts(); while (have_posts()) : the_post();      
    $postTerms = wp_get_post_terms($post->ID, $termName, array("fields" => "names"));   
    $postTermsArray = array_merge($postTermsArray, $postTerms);
    $postTermsArray = array_unique($postTermsArray);
    endwhile;
    sort($postTermsArray);
    foreach($postTermsArray as $postTerms) {
        if ($postTerms !=''){
            $postTermsLower = strtolower($postTerms);
            $postTermsLower = preg_replace('/[^a-zA-Z0-9_ %\[\]\.\%&-]/s', '', $postTermsLower);
            $postTermsLower = preg_replace("![^a-z0-9]+!i", "-", $postTermsLower);
            echo ('<li><a href="#filter-'.$postTermsLower.'" data-filter-value=".'.$postTermsLower.'">'.$postTerms.'</a></li>');
        }
    }
}
postTerms();
?>
4

2 回答 2

3

对于初学者,您没有给$termName参数赋值。由于也没有默认值,因此它不起作用。

除此之外,您似乎正在从范围之外引用变量,例如$post->ID. 函数只能从外部访问变量,如果:

  1. 它们作为参数传递
  2. 它是一个带有use子句 ( $var = function($param) use ($outsidevar) {...}) 的匿名函数,或者
  3. 您将global $outsidevar其放入函数中以“导入”它。

(也是4。你可以使用$GLOBALS['outsidevar'],但不推荐,因为建筑$GLOBALS很贵)

解决上述问题,您的功能应该可以工作,尽管目前它看起来像一个功能,为了一个功能。您在代码中编写的所有内容都必须有一个理由,最好是在您实际执行之前以简单的注释编写。

于 2013-02-27T17:47:19.603 回答
2

您不为函数提供参数,只需调用:

postTerms();

你需要做:

postTerms($argument);
于 2013-02-27T17:47:13.333 回答