当我在帖子的metabox中使用WP_QUERY时,Slug正在更改

时间:2017-07-13 作者:D. Merchant

我想使用一个元框,允许作者在所有帖子编辑页面中选择相关帖子。。代码在发布帖子时起作用,元数据正在保存。。但《华盛顿邮报》的头条新闻正在发生变化。例如,我的帖子的url是“www.example.com/qwerty”。在我通过更改相关帖子发布帖子后,url是“www.example.com/asdfgh-2”。

“asdfgh”是前一篇文章的鼻涕虫。我很困惑,这是一个很奇怪的问题。我几天来一直在努力解决这个问题,但我做不到。。我的代谢箱在下面。在元数据库中使用循环是否错误?

<div class="meta-td">
          <?php

                                // The Query
                                $rb_query = new WP_Query( \'posts_per_page=1000\' );

                                // The Loop
                                if ( $rb_query->have_posts() ) {
                                    echo \'<select style="width:220px;" name="related-post">\';
                                    echo \'<option value="none"  >Select a post</option>\';
                                    while ( $rb_query->have_posts() ) {
                                        $rb_query->the_post();
                                        $rid = get_the_ID();
                                        echo \'<option value="\';
                                        echo $rid;
                                        echo \'"\';
                                        if ( $saved_meta[\'related-post\'][0]== $rid ){ echo \' selected\'; }
                                        echo \'>\';
                                        echo get_the_title();
                                        echo \'</option>\';
                                    }
                                    echo \'</select>\';
                                    wp_reset_postdata();
                                } else {
                                    // no posts found
                                }
                            ?>
        </div>
这是metabox代码enter image description here

这是保存代码enter image description here

1 个回复
SO网友:Kangulo

我想我已经找到了问题所在。从…起wordpress get_posts 文档中有一个get\\u post示例

<ul>
<?php

global $post;
$args = array( \'posts_per_page\' => 5, \'offset\'=> 1, \'category\' => 1 );

$myposts = get_posts( $args );
foreach ( $myposts as $post ) : setup_postdata( $post ); ?>
    <li>
        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    </li>
<?php endforeach; 
wp_reset_postdata();?>

</ul>
问题是循环中的变量$post,我不确定是否是因为它与第4行中的另一个全局变量$post冲突。

因此,我更改了以下代码:

$countries = get_posts(array(
    \'post_type\' => \'country\',
    \'post_status\' => \'publish\',
    \'posts_per_page\' => -1,
    \'orderby\' => \'title\',
    \'order\'   => \'ASC\',
));    
?>
<p>
<!-- my custom value Select -->
<label for="location_country_id">Country:</label>
<select name=\'location_country_id\' id=\'location_country_id\'>
    <option value=""> -- choose Country -- </option>
    <?php 
    if ( $countries ):
        foreach  ( $countries as $post ) :  setup_postdata($post);
        $selected = \'\';

        if ( $current_country == $post->ID)
        {
            $selected = \'selected\';                
        }
    ?>
        <option value="<?php echo esc_attr($post->ID); ?>" <?=$selected?>><?php echo esc_html($post->post_title); ?></option>
    <?php endforeach; 
        /* Restore original Post Data */
        wp_reset_postdata();
    endif;
    ?>
</select>
</p>
为了这个

$countries = get_posts(array(
    \'post_type\' => \'country\',
    \'post_status\' => \'publish\',
    \'posts_per_page\' => -1,
    \'orderby\' => \'title\',
    \'order\'   => \'ASC\',
));    
?>
<p>
<!-- my custom value Select -->
<label for="location_country_id">Country:</label>
<select name=\'location_country_id\' id=\'location_country_id\'>
    <option value=""> -- choose Country -- </option>
    <?php 
    if ( $countries ):
        foreach  ( $countries as $country ) :  setup_postdata($country);
        $selected = \'\';
        //if($player->id ==  $item->title)
        if ( $current_country == $country->ID)
        {
            $selected = \'selected\';                
        }
    ?>
        <option value="<?php echo esc_attr($country->ID); ?>" <?=$selected?>><?php echo esc_html($country->post_title); ?></option>
    <?php endforeach; 
        /* Restore original Post Data */
        wp_reset_postdata();
    endif;
    ?>
</select>
</p>
再也没有断杆了。

我希望这对其他人有帮助。

结束

相关推荐

Show the excerpt in a loop

我想用这个循环显示最后3篇文章。这很有效,但我不知道为什么,但摘录总是一样的。我做错了什么? <?php $args = array( \'numberposts\' => \'3\' ); $recent_posts = wp_get_recent_posts( $args ); foreach( $recent_posts as $recent ){ ?> <div class=\"