Using the loop inside admin

时间:2011-07-03 作者:ion

我有以下问题:

我正在为用户创建一个自定义元框,以便以友好的方式添加自定义字段
我想生成一个下拉框,其中包含类别10下的所有帖子
我在函数文件中创建了一个循环,用于检索我想要的帖子,并创建一个下拉选择列表。

因此,当我转到“管理”->“帖子”并选择要编辑的帖子时,我会遇到以下问题:
无论我选择哪个帖子,都会加载最后一篇帖子。

以下是函数文件中使用的代码,然后在为自定义元框生成html代码时调用:

function get_project_ids($proj_cat = 10) {

$output = \'\';

$catt = get_categories(\'parent=\'.$proj_cat.\'&hide_empty=0\');

    foreach ($catt as $c) :

        $output .= \'<optgroup label="\'.$c->name.\'">\';
        $d = get_categories(\'parent=\'.$c->cat_ID.\'&hide_empty=0\');

            foreach ($d as $e) :
            $output .= \'<optgroup label="\'.$e->name.\'">\';

                $args = array( \'nopaging\' => true, \'cat\' => $e->cat_ID );
                $project_query = new WP_Query( $args );

                    while ( $wp_query->have_posts() ) : $wp_query->the_post();
                        $project_id = (get_post_meta($post->ID, \'project_code\', true) != "")?get_post_meta($post->ID, \'project_code\', true):"";
                        $output .= \'<option value="\'.$post->ID.\'">\'.$project_id.\'-\'.get_the_title().\'</option>\';    
                    endwhile; 

                wp_reset_postdata();
                $wp_query = null;
                $wp_query = $original_query;

            $output .= \'</optgroup> <!-- END level-b -->\';
        endforeach;

        $output .= \'</optgroup> <!-- END level-a -->\';
    endforeach;

return $output;

4 个回复
SO网友:Rarst

我不确定这个问题,但我的建议是尝试重构它以使用get_posts() 以及无需$post 全局变量。基本上根本不接触全局。

如今,前端的循环几乎是文明的,但admin的内部仍然非常野蛮。:)

SO网友:Tom J Nowell

您正在创建一个名为$project_query, 那就永远不要使用它。

那么你在使用$wp_query, 没有global $wp_query; 陈述

然后将null赋值给$wp_query 然后将未定义变量的值赋给它。

相反,移除两条不必要的线并使用$project_query 相反下面是修改后的查询循环:

            $args = array( \'nopaging\' => true, \'cat\' => $e->cat_ID );
            $project_query = new WP_Query( $args );

                while ( $project_query ->have_posts() ) : $project_query ->the_post();
                    $project_id = (get_post_meta($post->ID, \'project_code\', true) != "")?get_post_meta($post->ID, \'project_code\', true):"";
                    $output .= \'<option value="\'.$post->ID.\'">\'.$project_id.\'-\'.get_the_title().\'</option>\';    
                endwhile; 

            wp_reset_postdata();

SO网友:ion

这是工作代码:

global $post;
$tmp_post = $post;
$args = array( \'numberposts\' => 10000, \'category\' => $e->cat_ID );
$myposts = get_posts( $args );
foreach( $myposts as $post ) : setup_postdata($post);
    $project_id = (get_post_meta($post->ID, \'project_code\', true) != "")?get_post_meta($post->ID, \'project_code\', true):"";
    $output .= \'<option value="\'.$post->ID.\'">\'.$project_id.\'-\'.get_the_title().\'</option>\';    
endforeach;
$post = $tmp_post;

SO网友:random_user_name

找到这个问题,查看了答案,但必须进行组合,因为我想使用WP\\u查询,并且在管理仪表板中仍然存在问题。

编辑帖子时,此代码在元数据库中正常工作:

function custom_metabox() {
    global $post;
    $temp_post = $post;

    $args = array(
        \'post_type\'  => \'custom_post_type\',
        \'meta_key\'   => \'_custom_meta_key\',
        \'meta_value\' => TRUE
    );

    $custom = new WP_Query( $args );

    if ( $custom->have_posts() ) {
        while ( $custom->have_posts() ) {
            $custom->the_post();
            // ... with access to the data with functions like get_the_ID(), get_the_title(), etc.
        }

        wp_reset_postdata();
    }

    $post = $temp_post;

    // ... the rest of my metabox ...
}
注:无global $post, $temp_post = $post$post = $temp_post, 我仍然对slug和摘录被覆盖有问题。通过添加这些代码,这似乎现在运行良好。

结束

相关推荐

wp-admin slow in multisite

使用子域多站点运行Wordpress 3.1.2(最新更新,大约一年前作为3.0安装);使用Sunrise域映射插件。前端速度很快,后端(wp admin)在网络管理站点(www.example.com/wp admin)上速度很慢,但在其中一个子域后端(foo.example.com/wp admin)上以“正常速度”运行。服务器是我们自己的,Ubuntu 10.04带有mod\\u安全性(我听说它可以减慢速度)。我能做些什么来加速后端或以某种方式运行跟踪吗?