php 在wordpress中的父帖子页面上显示子帖子

6mzjoqzu  于 2022-12-10  发布在  PHP
关注(0)|答案(2)|浏览(221)

我们目前的网站使用的是自定义帖子和父/子帖子。当查看(父)帖子时,会使用一个插件来提取其子帖子,这些帖子会显示在页面上的一个标签中。
我们正在使用一个新版本的自定义主题在几个网站上,现在不再使用父母/孩子的关系。相反,我们有元框在我们的自定义文章类型和所有额外的信息可以提交的权利。
我想更新这个特定的网站与最新版本的主题,但由于它是使用父/子关系,我想添加几行代码的主题,以实现相同的结果,并保持旧的职位,而不是修改他们的方式。
我想做的是:我想要一个非常简单的方法来显示所有的子职位(按顺序)在一个父职位页。
我在这里和那里找到了一些想法,但到目前为止似乎都没有成功。(这里有一个例子:http://www.wpbeginner.com/wp-tutorials/how-to-display-a-list-of-child-pages-for-a-parent-page-in-wordpress/以及这个https://wordpress.stackexchange.com/questions/153042/how-to-display-list-of-child-pages-with-parent-in-wordpress)。我不知道这是否与我使用post而不是pages有关。
我不想要一个子帖子的列表,而是直接显示这些帖子的内容。我认为实现这一点的最好方法可能是创建一个函数来检索子帖子,然后在模板中回显结果。这样就不必改变我们的主题,它可以与我们不同的网站一起工作。

编辑:

到目前为止,我在single.php中做了如下尝试:

$query = new WP_Query( array( 
    'post_parent' => get_the_ID(),
 ));
while($query->have_posts()) {
    $query->the_post();
    the_content(); //Outputs child's content as it is
}
wp_reset_query();`

然后我将代码更改为:

$new_args = array(
'order'          => 'ASC',
'post_parent'    => get_the_ID()
);
$new_query = new WP_Query( $new_args);
if ($new_query->have_posts() ) {
    while($new_query->have_posts() ) {
        $new_query->the_post();
            the_content();
    }
wp_reset_query();
}

然后因为它也不起作用,我把它改成:

$children = get_children( array('post_parent' => get_the_ID()) );
foreach ( $children as $children_id => $children ) {
    the_title();
    the_content();
}

最新的似乎能够返回一些结果,它“知道”当前的帖子有孩子在里面,但我显示的是当前帖子的标题和内容。我很确定我不应该在这里使用the_content()

niknxzdl

niknxzdl1#

好的,在循环中的帖子模板中尝试类似的操作。它应该可以帮助你在特定的帖子中输出子帖子。〈?php /Somwhere in the loop/

$query = new WP_Query( array( 
        'post_parent' => get_the_ID(),
        'posts_per_page' => 3, //shows only 3 children. If you want to show all of them, comment this line
    ));
    while($query->have_posts()) {
        $query->the_post();
        /*Output the child markup here*/
        the_content(); //Outputs child's content as it is
    }
    wp_reset_query();
?>

更新:好的,你可以试着在ID数组中使用post_parent__,这应该也可以。〈?php /Somwhere in the loop/

$query = new WP_Query( array( 
        'post_parent__in' => array(get_the_ID()),
        'posts_per_page' => 3, //shows only 3 children. If you want to show all of them, comment this line
    ));
    while($query->have_posts()) {
        $query->the_post();
        /*Output the child markup here*/
    }
    wp_reset_query();
?>

如果没有,下面是使用get_children函数输出帖子内容的方法。

<?php
    $children = get_children( array('post_parent' => get_the_ID()) );
    foreach ( $children as $children_id => $child ) {
        echo $child->post_title;
        echo str_replace( ']]>', ']]&gt;',apply_filters( 'the_content', $child->post_content )); //mimic the_content() filters
        //echo $child->post_content; // if you do not need to filter the content;
    }
?>
icnyk63a

icnyk63a2#

/* Fetch only one level child pages of a parent page */    
         $pages = get_pages(
         array (
                  'parent'  => 'parent_id', 
                  'post_type  => 'page', 
                  'post_status'  => 'publish',
                );
                
         $ids = wp_list_pluck( $pages, 'ID' );
 /* Return page IDs in array format */
 /* You can retrieve "post_title", "guid", "post_name" instead of "ID"

/* Fetch all child pages of a parent page*/    
$pages = get_pages(
         array (
         'parent'  => '-1',
         'child_of' => 'parent_id', /* Return child of child for current page id */
         'post_type  => 'page',
         'post_status'  => 'publish',
          );
         $ids = wp_list_pluck( $pages, 'ID' );
/* Return page IDs in array format */
/* You can retrieve "post_title", "guid", "post_name" instead of "ID" */

相关问题