将字符串传递给可重用的php函数

时间:2015-07-24 19:59:51

标签: php wordpress

我不太使用php,所以 - 我的实际知识以require()等为中心 - 用于模板 - 并且在需要时,WordPress循环。

在当前的项目中,我不得不在页面上使用这段代码10次。

<?php
    $commercialLoop = new WP_Query(
        array(
            'post_type' => 'project',
            'posts_per_page' => -1,
            'tax_query' => array(
                array(
                    'taxonomy' => 'project-type',
                    'field' => 'slug',
                    'terms' => 'commercial'
                )
            )
        )
    );
?>

<?php while ( $commercialLoop->have_posts() ) : $commercialLoop->the_post(); ?>

    <li class='project'>
        <a href='<?php the_permalink(); ?>'>
            <div class='image-w'>
                <?php if ( has_post_thumbnail() ) { ?>
                    <?php the_post_thumbnail(); ?>
                <?php } else { ?>
                    <img src='http://placehold.it/1600x800&text=No featured image yet' alt=''>
                <?php } ?>
            </div>
            <h3 class='project-name'><?php echo get_the_title(); ?></h3>
        </a>
    </li>

<?php endwhile; wp_reset_query(); ?>

在JavaScript中,我只是将一些字符串传递给一个函数 - 然后我可以使用它。在这种情况下,每个循环唯一改变的是commercialLoop和“商业” - 我认为这一切都在改变......所以,实际上我只需要传递一个字符串对于每个不同的类别,'住宿','住房','细节'等...我希望我可以做类似的事情:

<?php getLoopThing('commercial'); ?>

但是 - 我一定不知道找到方向的正确搜索词。

HELP ???

=============================================== =

这就是我最终做的事情:

创建了一个partial:taxonomy-loop.php - 用$taxonomyName替换有问题的字符串

<?php
    $taxonomyName = new WP_Query(
        array(
            'post_type' => 'project',
            'posts_per_page' => -1,
            'tax_query' => array(
                array(
                    'taxonomy' => 'project-type',
                    'field' => 'slug',
                    'terms' => $taxonomyName
                )
            )
        )
    );
?>

<?php while ( $taxonomyName->have_posts() ) : $taxonomyName->the_post(); ?>

    <li class='project'>
        <a href='<?php the_permalink(); ?>'>
            <div class='image-w'>
                <?php if ( has_post_thumbnail() ) { ?>
                    <?php the_post_thumbnail(); ?>
                <?php } else { ?>
                    <img src='http://placehold.it/1600x800&text=No featured image yet' alt=''>
                <?php } ?>
            </div>
            <h3 class='project-name'><?php echo get_the_title(); ?></h3>
        </a>
    </li>

<?php endwhile; wp_reset_query(); ?>

在function.php中:使用传入的$taxonomy-name构建函数。

function getTaxonomyLoop( $taxonomyName ) {

    // grab the partial (wherever your partial is located)
    return include('parts/taxonomy-loop.php');

}

然后,我希望它出现在哪里:

<?php getTaxonomyLoop('commercial'); ?>


看到任何陷阱?

2 个答案:

答案 0 :(得分:2)

您可以将参数传递给这样的函数:

function a($a) {
    return $a;
}

或者如果您只想要完整的代码:

function getLoop($st){
return new WP_Query(
    array(
        'post_type' => 'project',
        'posts_per_page' => -1,
        'tax_query' => array(
            array(
                'taxonomy' => 'project-type',
                'field' => 'slug',
                'terms' => $st
            )
        )
    )
);
}

所以现在你可以打电话:

$loop = getLoop('commercial');

答案 1 :(得分:0)

get_template_part更适合这类事情。它允许您多次包含相同的模板文件,同时仍然将前端代码与您的功能分开。它还允许您的模板代码被子主题覆盖。

在您的主题目录中,您将创建一个包含模板代码的文件。

然后,当您需要引用它时,您只需使用文件名称调用get_template_part

例如,如果我要在主题根目录中创建一个名为projects.php的文件,我可以将其包含在另一个模板文件中,如下所示:

get_template_part('projects');

您不能以这种方式将参数传递给模板文件,但您可以使用全局变量或为模板所需的任何其他数据定义函数。例如:

global $taxonomyName;
$taxonomyName = 'commercial';
get_template_part('projects');

从那里你可以参考分类:global $taxonomyName

根据您确定$taxonomyName的方式,您可以定义一个函数来确定分类名称,而不必将其声明为全局。