2015-11-03 94 views
-1

时向页面添加字母/数字我期待在Wordpress上为每个页面创建一些帖子元。这是关于分类的一点。每个顶级页面都会有一个字母,如A B C D等。顶级页面的每个子页面都会有一个数字,如01,02,03,04。我试图修改我的代码发布/更新/删除相应地添加/更新元,无论页面被删除或添加。我的问题是如何检查它是否是保存的顶级页面或子页面?代码看起来好像只使用代码的顶层部分,不管是否是父类,都会保存不同的字母。在发布/更新

function updateNumbers($post) { 
    global $wpdb; 
    $querystr = "SELECT $wpdb->posts.* FROM $wpdb->posts WHERE $wpdb->posts.post_status = 'publish' AND $wpdb->posts.post_type = 'page' "; 
    $pageposts = $wpdb->get_results($querystr, OBJECT); 
    if($post->post_parent > 0) { 
     //Child Page 
     $counts = 01; 
     if ($pageposts): 
     foreach ($pageposts as $post): 
     setup_postdata($post); 
     $counts++; 
     $parent_letter = get_post_meta($post->post_parent, 'incr_letter', true); 
     add_post_meta($post->ID, 'incr_number', $counts, true); 
     update_post_meta($post->ID, 'incr_number', $counts); 
     add_post_meta($post->ID, 'incr_letter', $parent_letter, true); 
     update_post_meta($post->ID, 'incr_letter', $parent_letter); 
     endforeach; 
     endif; 
    }else { 
     //Top Level Page 
     $counts = A; 
     if ($pageposts): 
     foreach ($pageposts as $post): 
     setup_postdata($post); 
     $counts++; 
     add_post_meta($post->ID, 'incr_letter', $counts, true); 
     update_post_meta($post->ID, 'incr_letter', $counts); 
     endforeach; 
     endif; 
    } 
} 

add_action ('publish_post', 'updateNumbers'); 
add_action ('deleted_post', 'updateNumbers'); 
add_action ('edit_post', 'updateNumbers'); 

所需的分层结构将类似于此:

- Page 1 - A.01 
- Page 2 - B.01 
-- Page 2 Child - B.02 
-- Page 2 Child - B.03 
-- Page 2 Child - B.04 
- Page 3 - C.01 
- Page 4 - D.01 
+0

以及你遍历所有帖子1周时后保存并根据该值更改所有帖子。 – David

+0

@大卫,对,但由于某种原因,它不是确定和运行适当的功能,无论它是父母或子页面。所有网页只是得到一个sequintial字母,没有号码,没有层次 – Derek

回答

0

代码有一些问题:

  1. 你的查询字符串是错误的
  2. $计数您else语句缺少“”
  3. 你的代码实际上会做什么是基于当前帖子的值被保存,所以如果它是父亲,所有环形帖子将是父母
  4. 您应该检查$post->post_parent == 0而不是大于0,如果将0作为字符串传递,则可以为true。

总之:

function updateNumbers($post) { 
    global $wpdb; 

    // you had your query wrong..the loop was prob empty.. 
    $querystr = "SELECT * FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'page' "; 
    $pageposts = $wpdb->get_results($querystr, OBJECT); 

    if($post->post_parent == 0) { 
     //Top Level Page 
     $counts = "A"; //string 

     // Loop over all posts for every save, update, etc..... expensive 
    }else { 
     // Loop over all posts for every save, update, etc..... expensive 
    } 


} 

但你正在尝试做的已经存在,WP有其系统能够识别的等孩子

+0

不值得回复? – David