我想为Wordpress上的每个页面创建一些post meta。这样做的目的是为了分类。每个顶层页面都会有一个字母,如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
您的代码有许多问题:
- 您的查询字符串错误
- 您的else语句中的$count缺少"
- 您的代码实际要做的是根据保存的当前帖子的值在每个帖子上循环,因此如果它是父帖子,则所有循环的帖子都将是父帖子
- 您应该检查
$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有自己的系统来识别等的子项。