How to reduce repetitive code

时间:2011-06-21 作者:SparrwHawk

我一直在寻找如何做到这一点有一段时间,但没有结果。我的模板的一部分使用了大量相同的代码,即检索特定页面。

如果这是Javascript,我会设置一个函数并继续调用该函数。如何重复调用下面的代码?

<?php
    $page = get_page_by_title(\'Excerpts Showreel\'); <-- This piece of code will change
// the code below will never change.
?>
<?php
    $my_id = $page;
    $post_id = get_post($my_id, ARRAY_A);
    $title = $post_id[\'post_title\'];
    $content = $post_id[\'post_content\'];
?>
<?php 
    echo $content
?>

3 个回复
最合适的回答,由SO网友:EAMann 整理而成

您可以像在JavaScript中一样,在PHP中定义自己的自定义函数。下面是使用函数重写的代码示例:

$page = get_page_by_title(\'Excerpts Showreel\'); <-- This piece of code will change

// the code below will never change.
function get_my_content( $page ) {
    $my_id = $page;
    $post_id = get_post($my_id, ARRAY_A);
    $title = $post_id[\'post_title\'];
    $content = $post_id[\'post_content\'];

    return $content;
}

echo get_my_content($page);
只要你有get_my_content() 函数定义,您可以在任何需要的地方使用它。

SO网友:Chip Bennett

根据@EAMann的回答,我假设您希望“Extracts Showreel”是可变的,并基于传递变量返回内容?

function mytheme_get_page_content_by_title( $title = false ) {

    if ( false == $title ) return;

    $page = get_page_by_title( $title );
    $my_id = $page;
    $post_id = get_post($my_id, ARRAY_A);
    $title = $post_id[\'post_title\'];
    $content = $post_id[\'post_content\'];

    return $content;
}
然后在模板中:

echo mytheme_get_page_content_by_title( \'Excerpts Showreel\' );
请注意,您可能需要对$title 正在传递到函数中的变量。

EDIT

我不知道您为什么需要返回标题(这是您开始的内容,并传递给您的函数),但现在您可以:

function mytheme_get_page_details_by_title( $title = false ) {

    if ( false == $title ) return;

    $page = get_page_by_title( $title );
    $my_id = $page;
    $post_id = get_post($my_id, ARRAY_A);
    $posttitle = $post_id[\'post_title\'];
    $postcontent = $post_id[\'post_content\'];

    $details = array(
        \'title\' => $posttitle,
        \'content\' => $postcontent
    );

    return $details;
}
然后,您必须将其传递给变量才能在模板中使用它:

$mypostdetails = mytheme_get_page_details_by_title( \'Excerpts Showreel\' );

echo $mypostdetails[\'title\']; // print the post title
echo $mypostdetails[\'content\']; // print the post content

SO网友:Ryan Street

功能get template part 这样做会很完美。只需将代码放在一个单独的文件中。

<?php get_template_part( \'loop\', \'index\' ); ?>
通过上述操作,您可以在主题文件夹中创建一个名为循环索引的文件。php

请在此处阅读:http://codex.wordpress.org/Function_Reference/get_template_part

结束

相关推荐