WP查询在函数外部工作,而不是在函数内部工作

时间:2017-05-30 作者:Caravanistan

Solution: 最终起作用的是添加

  global $post;
在查询的顶部,所以之前

$custom_taxterms = ...
Bill Erickson\'s Genesis custom loop 是我最后遵循的模板。

Original question

我希望能在一个让我困惑的问题上得到一些帮助。

我有以下疑问。它工作并输出数据。

$custom_taxterms = wp_get_object_terms( $post->ID, \'region\', array(\'fields\' => \'ids\') );
// arguments
$args = array(
    \'post_type\' => \'stay\',
    \'post_status\' => \'publish\',
    \'posts_per_page\' => 25, // you may edit this number
    \'orderby\' => \'rand\',
    \'tax_query\' => array(
        array(
            \'taxonomy\' => \'region\',
            \'field\' => \'id\',
            \'terms\' => $custom_taxterms
        )
    ),
    \'post__not_in\' => array ($post->ID),
);
$related_items = new WP_Query( $args );
// loop over query
if ($related_items->have_posts()) :
    echo \'<ul>\';
    while ( $related_items->have_posts() ) : $related_items->the_post();
        ?>
        <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
        <?php
    endwhile;
    echo \'</ul>\';
endif;
// Reset Post Data
wp_reset_postdata();
如果我现在将其放入函数中,它将停止工作。

add_action( \'genesis_loop\', \'related_posts_cpt\' );
function related_posts_cpt (){
    // same loop as above
}
需要明确的是,如果我对不同的输出使用相同的函数,它确实会起作用:

add_action( \'genesis_loop\', \'related_posts_cpt\' );
function related_posts_cpt() { 
    ?>
    <p>AAAAAAAAHHHHHH</p>
    <?php
}
我错过了什么?提前谢谢你。

1 个回复
SO网友:rudtek

函数返回输出。你不想只是附和它。

尝试以下功能:

function mycoolquery() {
    $custom_taxterms = wp_get_object_terms( $post->ID, \'region\', array(\'fields\' => \'ids\') );
// arguments
    $args = array(
        \'post_type\' => \'stay\',
        \'post_status\' => \'publish\',
        \'posts_per_page\' => 25, // you may edit this number
        \'orderby\' => \'rand\',
        \'tax_query\' => array(
            array(
                \'taxonomy\' => \'region\',
                \'field\' => \'id\',
                \'terms\' => $custom_taxterms
            )
         ),
        \'post__not_in\' => array ($post->ID),
    );
    $related_items = new WP_Query( $args );
// loop over query
    if ($related_items->have_posts()) :
       $output =  \'<ul>\';
       while ( $related_items->have_posts() ) : $related_items->the_post();

            $output .= \'<li><a href="\'.the_permalink().\'">\'.the_title().\'</a></li>\';

        endwhile;
        $output .= \'</ul>\';
    endif;
    // Reset Post Data
    wp_reset_postdata();
    return $output;
}
然后在需要的位置回显函数:

echo mycoolquery();

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post

WP查询在函数外部工作,而不是在函数内部工作 - 小码农CODE - 行之有效找到问题解决它

WP查询在函数外部工作,而不是在函数内部工作

时间:2017-05-30 作者:Caravanistan

Solution: 最终起作用的是添加

  global $post;
在查询的顶部,所以之前

$custom_taxterms = ...
Bill Erickson\'s Genesis custom loop 是我最后遵循的模板。

Original question

我希望能在一个让我困惑的问题上得到一些帮助。

我有以下疑问。它工作并输出数据。

$custom_taxterms = wp_get_object_terms( $post->ID, \'region\', array(\'fields\' => \'ids\') );
// arguments
$args = array(
    \'post_type\' => \'stay\',
    \'post_status\' => \'publish\',
    \'posts_per_page\' => 25, // you may edit this number
    \'orderby\' => \'rand\',
    \'tax_query\' => array(
        array(
            \'taxonomy\' => \'region\',
            \'field\' => \'id\',
            \'terms\' => $custom_taxterms
        )
    ),
    \'post__not_in\' => array ($post->ID),
);
$related_items = new WP_Query( $args );
// loop over query
if ($related_items->have_posts()) :
    echo \'<ul>\';
    while ( $related_items->have_posts() ) : $related_items->the_post();
        ?>
        <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
        <?php
    endwhile;
    echo \'</ul>\';
endif;
// Reset Post Data
wp_reset_postdata();
如果我现在将其放入函数中,它将停止工作。

add_action( \'genesis_loop\', \'related_posts_cpt\' );
function related_posts_cpt (){
    // same loop as above
}
需要明确的是,如果我对不同的输出使用相同的函数,它确实会起作用:

add_action( \'genesis_loop\', \'related_posts_cpt\' );
function related_posts_cpt() { 
    ?>
    <p>AAAAAAAAHHHHHH</p>
    <?php
}
我错过了什么?提前谢谢你。

1 个回复
SO网友:rudtek

函数返回输出。你不想只是附和它。

尝试以下功能:

function mycoolquery() {
    $custom_taxterms = wp_get_object_terms( $post->ID, \'region\', array(\'fields\' => \'ids\') );
// arguments
    $args = array(
        \'post_type\' => \'stay\',
        \'post_status\' => \'publish\',
        \'posts_per_page\' => 25, // you may edit this number
        \'orderby\' => \'rand\',
        \'tax_query\' => array(
            array(
                \'taxonomy\' => \'region\',
                \'field\' => \'id\',
                \'terms\' => $custom_taxterms
            )
         ),
        \'post__not_in\' => array ($post->ID),
    );
    $related_items = new WP_Query( $args );
// loop over query
    if ($related_items->have_posts()) :
       $output =  \'<ul>\';
       while ( $related_items->have_posts() ) : $related_items->the_post();

            $output .= \'<li><a href="\'.the_permalink().\'">\'.the_title().\'</a></li>\';

        endwhile;
        $output .= \'</ul>\';
    endif;
    // Reset Post Data
    wp_reset_postdata();
    return $output;
}
然后在需要的位置回显函数:

echo mycoolquery();

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post