Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在发布/更新页面中添加字母/数字_Php_Wordpress - Fatal编程技术网

Php 在发布/更新页面中添加字母/数字

Php 在发布/更新页面中添加字母/数字,php,wordpress,Php,Wordpress,我想为Wordpress上的每个页面创建一些PostMeta。这一点是为了分类。每个顶级页面将有一个字母,如B、C、D等。顶级页面的每个子页面将有一个数字,如01、02、03、04。我正在尝试修改我的发布/更新/删除代码,以相应地添加/更新元数据,无论页面是删除还是添加。我的问题是如何检查它是保存的顶级页面还是保存的子页面?代码似乎只使用了代码的顶层部分,并且无论是否为父级,都会保存一个不同的字母 function updateNumbers($post) { global $wpdb;

我想为Wordpress上的每个页面创建一些PostMeta。这一点是为了分类。每个顶级页面将有一个字母,如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语句中的$counts缺少“”
  • 代码实际要做的是根据保存的当前帖子的值在每个帖子上循环,因此如果它是父帖子,则所有循环帖子都将是父帖子
  • 您应该检查
    $post->post\u parent==0
    而不是不大于0,如果0作为字符串传递,则该值可能为真
  • 无论如何:

    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有它的系统来识别等的子页面。

    那么,每当保存一篇文章时,您就在所有文章上循环,并根据该值更改所有文章。@David,是的,但出于某种原因,它没有确定并运行相应的函数,不管它是父页面还是子页面。所有的页面都只有一个亮片字母,没有数字,没有层次结构