2015-11-03 89 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