自定义支柱类型、自定义列列表

时间:2011-01-13 作者:Zack

我基本上已经完成了一个完整的插件,现在只是在“美化”它。我正在做的一件事是重新制作列,列出我写的“帖子”。这部分很好,所有列都会根据需要进行替换,然而,有一列让我困惑。。标题字段:/

    add_action( \'manage_posts_custom_column\', array( &$this, \'_wp_filter_visitor_column_view\' ) );
    add_filter( \'manage_edit-visitor_columns\', array( &$this, \'_wp_filter_visitor_columns\' ) );

    public function _wp_filter_visitor_column_view( $column )
    {
        global $post;
        if ( $column == "title" )
        {
            $name = get_post_meta( $post->ID, \'v_f_name\', true );
            $name .= \' \' . get_post_meta( $post->ID, \'v_l_name\', true );
            echo $name;
        }
        elseif ( $column == "type" )
        {
            echo "Not available right now...";
        }
        elseif ( $column == "loggedin" OR $column == "workstation" )
        {
            $workstation = get_post_meta( $post->ID, \'v_workstation\', true );
            if ( $column == "workstation" ) echo $workstation;
            elseif ( $column == "loggedin" ) echo ( !empty($workstation) OR !isset( $workstation ) ) ? \'No\' : \'Yes\';
        }
        elseif ( $column == "id" )
        {
            echo get_post_meta( $post->ID, \'v_id\', true );
        }
    }

    public function _wp_filter_visitor_columns( $columns )
    {
        $columns = array(
                \'cb\' => \'<input type="checkbox" />\',
                \'title\' => \'Name\',
                \'type\' => \'Type\',
                \'loggedin\' => \'Logged In?\',
                \'id\' => \'Visitor ID\',
            );

        return $columns;
    }
“title”=>“Name”的列标题显示正确,但列数据显示默认标题“Auto Draft”,因为我没有使用帖子的标题字段。我是否需要自定义帖子类型的帖子标题字段,或者自动生成的标题就足够了?我不需要标题字段,而是使用Posteta表来存储我的数据。

-扎克

P、 我跟在后面this 创建列的教程。

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

我做了一点小小的改动,让它起作用。我添加了一个名为“post\\u title”的隐藏字段,好像我正在启用标题支持,但实际上没有放置丑陋的标题栏。

<div id="titlewrap"> 
    <input type="hidden" name="post_title" size="30" tabindex="1" value="" id="title" autocomplete="off" />
</div>

<script type="text/javascript">
    ( function ($) {
        $( \'#v_l_name\' ).blur( function () {
            $( \'#title\' ).attr( \'value\', $( \'#v_f_name\' ).val() + \' \' + $( \'#v_l_name\' ).val() );
        });
    })(jQuery);
</script>
总而言之,它是有效的。标题字段已正确填充。

谢谢你,迈克!;)

SO网友:MikeSchinkel

你好@Zack:

因为你的问题不清楚,我在这里有点冒险。听起来您希望能够在vistor列表中显示访问者的名字和姓氏,而不是“自动草稿?”如果是这样,此代码应该适合您:

add_action( \'the_title\', \'make_vistor_title\', 10, 2 );
function make_vistor_title($title,$post_id) {
  global $pagenow,$typenow;
  if ($pagenow==\'edit.php\' && $typenow==\'visitor\') {
    return the_visitor_title($post->ID);
  }
  return $title;
}    
function the_visitor_title($post_id) {
  return get_post_meta( $post_id, \'v_f_name\', true ) . \' \' . 
         get_post_meta( $post_id, \'v_l_name\', true );
}
如果您希望无论在何处都能使用此版本的make_visitor_title() 而是:

function make_vistor_title($title,$post_id) {
  $post = get_post($post_id);
  if ($post->post_type==\'visitor\') {
    $title = the_visitor_title($post->ID);
  }
  return $title;
}    
当然是另一个(更好?)选项是使用捕获帖子上的名字,并基于两(2)个自定义元字段中的值创建标题\'v_f_name\'\'v_l_name\' 使用下面这样的代码(这比我希望的要复杂得多,但这就是我让它工作的原因-也许其他人可以建议一种更简单的方法?)

add_action( \'admin_init\', \'visitor_post_admin_init\', 10, 2 );
function visitor_post_admin_init() {
  global $pagenow;
  if ($pagenow==\'post.php\' && isset($_POST[\'action\']) && $_POST[\'action\']==\'editpost\') {
    if (empty($_POST[\'post_title\'])) {
      $_POST[\'post_title\'] = get_visitor_title_from_POST($_POST);
    }
  }
}
add_action( \'wp_insert_post_data\', \'insert_visitor_data\', 10, 2 );
function insert_visitor_data($data,$postarr) {
  if ($data[\'post_type\']==\'actor\' && !in_array($data[\'post_status\'],array(\'draft\',\'auto-draft\'))) {
    if (isset($postarr[\'meta\'])) {
      extract($postarr);
      $post_title = get_visitor_title_from_POST($postarr);
      if (!empty($post_title))
        $data[\'post_title\'] = trim($post_title);
      $post_name = sanitize_title_with_dashes($post_title);
      $data[\'post_name\'] = wp_unique_post_slug($post_name, $ID, $post_status, $post_type, $post_parent);
    }
  }
  return $data;
}
function get_visitor_title_from_POST($POST) {
  $meta = array();
  foreach($POST[\'meta\'] as $key_value)
    $meta[$key_value[\'key\']] = $key_value[\'value\'];
  if (isset($POST[\'metavalue\'])) {
    if (isset($POST[\'metakeyselect\']) && $POST[\'metakeyselect\']!=\'#NONE#\') {
      $meta[$POST[\'metakeyselect\']] = $POST[\'metavalue\'];
    } else {
      $meta[$POST[\'metakeyinput\']] = $POST[\'metavalue\'];
    }
  }
  $title = (isset($meta[\'v_f_name\']) ? "{$meta[\'v_f_name\']} " : \'\');
  if (isset($meta[\'v_l_name\']))
    $title .= $meta[\'v_l_name\'];
  return trim($title);
}

结束

相关推荐

How do you debug plugins?

我对插件创作还很陌生,调试也很困难。我用了很多echo,它又脏又丑。我确信有更好的方法可以做到这一点,也许是一个带有调试器的IDE,我可以在其中运行整个站点,包括插件?