将Multiple if合并为一个?

时间:2014-12-14 20:25:03

标签: php wordpress

我有两个wordpress查询,如果有办法将它们组合成一个,我很好奇吗? 我试过了,但是无济于事。

<?php 
$posts = get_field('appeal_forms', 'options');
if( $posts ): ?>
    <ul>
    <?php foreach( $posts as $post): // variable must be called $post (IMPORTANT) ?>
        <?php setup_postdata($post); ?>
        <li>
            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
        </li>
    <?php endforeach; ?>
    </ul>
    <?php wp_reset_postdata(); // IMPORTANT - reset the $post object so the rest of the page works correctly ?>
<?php endif; ?>

这里是第二个:

 <?php 
    $posts = get_field('misc', 'options');
    if( $posts ): ?>
        <ul>
        <?php foreach( $posts as $post): // variable must be called $post (IMPORTANT) ?>
            <?php setup_postdata($post); ?>
            <li>
                <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
            </li>
        <?php endforeach; ?>
        </ul>
        <?php wp_reset_postdata(); // IMPORTANT - reset the $post object so the rest of the page works correctly ?>
    <?php endif; ?>

1 个答案:

答案 0 :(得分:0)

你需要将两个帖子数组合成一个数组,然后像你一样循环遍历它。

在下面的示例中,我得到两个数组,使用is_array检查它们是否有效,然后使用array_merge将它们合并为一个。

<?php
// Get both post arrays.
$appeal_forms = get_field('appeal_forms', 'options');
$misc         = get_field('misc', 'options');

// Check both are arrays.
if ( is_array( $appeal_forms ) && is_array( $misc ) ) { 
    // Combine the posts into a single array.
    $posts = array_merge( $appeal_forms, $misc ); ?>

    <ul>
        <?php foreach ( $posts as $post ) {
            setup_postdata( $post ); ?>

            <li>
                <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
            </li>
        <?php } ?>
    </ul>

    <?php wp_reset_postdata(); ?>
<?php } ?>

如果两个阵列都不会总是有帖子,那么代码需要进行调整。我执行的检查意味着如果appeal_forms或misc为空,则不显示任何内容。

如果是这种情况,我建议的解决方案是:

$posts = array();

// Check each array individually and add their contents to the post array.
if ( is_array( $appeal_forms ) ) {
    $posts = array_merge( $posts, $appeal_forms );
}

if ( is_array( $misc ) ) {
    $posts = array_merge( $posts, $misc );
}

if ( $posts ) {…