【问题标题】:Retrieving *number* pages by page id按页面 ID 检索 *number* 个页面
【发布时间】:2015-06-08 08:53:25
【问题描述】:

大家好

已解决

我目前正在尝试为 wordpress 开发一个插件,将三页输出到一页中,这样做的原因是创建如下所示的内容。

我环顾四周,没有看到与我想做的类似的事情。

以下是我的代码和输出。 编辑以下代码:根据 Pieter Goosen 的说法

<?php
function page_list( $atts ) {

        //extracting input parameters (attributes of shortcode)
        shortcode_atts( array(
            'pages' => ''
        ), $atts );

/***************************************************Out***********************************************************/

$i = '';

// Get the page id by the page name

$page_names = explode(",", $atts['pages']);

foreach($page_names as $page_name) {


    $page = get_page_by_title( ''.$page_name.'', OBJECT, 'page' );

        //argument it

        $args = array(
            'post_type' => 'page',
            'posts_per_page' => 3,
            'page_id' => ''.$page->ID.''
        );

        // The Query
        $the_query = new WP_Query( $args );

        // The Loop
        if ( $the_query->have_posts() ) {

            $i .= '<div class="page-information">';

            $i .= '<div class="page-information-color">';

            while ( $the_query->have_posts() ) {

                $the_query->the_post();

                $i .= '<div class="page-information-widget" style="padding-left: 20px;">';

                $i .= '<div><a href="'.get_permalink( $the_query->ID).'"><img class="alignnone size-medium wp-image-81" src="'.wp_get_attachment_url( get_post_thumbnail_id($the_query->ID,'thumbnail') ).'" alt="" width="auto" height="70" /></a></div>';

                $i .= '<div><h4>'.get_the_title().'</h4></div>';

                $i .= '<div> '.wp_trim_words( get_the_excerpt(), 19, '...').' </div>';

                $i .= '<div><a href="'.get_permalink( $the_query->ID).'"><button class="news-widget-button" type="button">More info &#x3e;</button></a></div>';

                $i .= '</div>';


            }

            $i .= '</div>';

            $i .= '</div>';

        } else {

            echo 'No Pages Found! :(';

        }

        /* Restore original Post Data */
        wp_reset_postdata();

}

//returning the output to page
return $i;
}
//instantiate the shortcode
add_shortcode( 'list_pages', 'page_list' );

?>

这会在页面下方继续向下移动 5/6 次。

我想知道为什么

  1. 我有多个条目
  2. 它们不是我请求的页面

有人可以帮忙解决问题吗?

【问题讨论】:

    标签: php wordpress


    【解决方案1】:

    这一行是错误的:

    'page__in' => ''.$page->ID.''
    
    • page__in 不存在于WP_Query

    • 无论''.$page-&gt;ID.'' 是什么,没人知道。这是给你解释你是怎么做到的

    上面的行应该是

     'page_id' => $page_id->ID,
    

    编辑

    您的代码非常草率且容易出错,抱歉

    • 永远不要使用extract()。大约两年前,由于非常具体的原因,它已从核心中删除。请参阅 Shortcode API 了解如何在没有extract()的情况下正确使用属性

    • global $out 编码真的很差。创建全局变量是邪恶的,应该避免。给你的全局变量取简单的变量名,比如$out 甚至是更大的罪恶和罪恶。请记住,如果您在外部环境中使用 $out,则会破坏您的全局

    • 您的变量名称令人困惑,$page$Page。你应该避免这种情况。这在一年的时间里看起来像是一个拼写错误,你知道这会导致什么。由于变量名称的相似性,这可能真的很糟糕且令人沮丧

    【讨论】:

    • 我在回溯约会时设法获得了代码,但没有正确清理它,这就是为什么 $page-&gt;ID 突然出现的原因。
    • 我现在确实请求了三个页面中的两个,但仍然在旁边输出默认的前三个原件。
    • 您如何使用您的简码以及如何将您的页面传递给简码
    • 请注意,我没有正确查看您的循环 inside 是什么,但是您在循环中获取了以 $the_query-&gt;ID 作为帖子 ID 的内容。这个不对,应该是$post-&gt;ID或者get_the_ID()
    【解决方案2】:

    已解决

    我做了什么:

    1. 删除了第二个 foreach(创建了两倍的重复项)
    2. 调整了全局输出(将其更改为不易猜测的输出)
    3. 更改了posts_per_page(因为它在foreach中会被循环,所以不需要三个,1个就可以了。然后用户可以指定要显示多少页。)
    4. 调整了分类为“page-information && page-information-color”的主容器 div 的位置

    请随时在您自己的答案中进行操作,以提高效率或进行不同的调整。

    <?php
    function page_list( $atts ) {
    
        //extracting input parameters (attributes of shortcode)
        shortcode_atts( array(
                    'pages' => ''
                ), $atts );
    
        /***************************************************Out***********************************************************/
    
        $i = '';
    
        // Get the page id by the page name
    
        $page_names = explode(",", $atts['pages']);
    
        $i .= '<div class="page-information">';
    
        $i .= '<div class="page-information-color">';
    
        foreach($page_names as $page_name) {
    
    
            $page = get_page_by_title( ''.$page_name.'', OBJECT, 'page' );
    
            //argument it
    
            $args = array(
                'post_type' => 'page',
                'posts_per_page' => 1,
                'page_id' => ''.$page->ID.''
            );
    
            // The Query
            $the_query = new WP_Query( $args );
    
            // The Loop
            if ( $the_query->have_posts() ) {
    
                while ( $the_query->have_posts() ) {
    
                    $the_query->the_post();
    
                    $i .= '<div class="page-information-widget" style="padding-left: 20px;">';
    
                    $i .= '<div><a href="'.get_permalink( $the_query->ID).'"><img class="alignnone size-medium wp-image-81" src="'.wp_get_attachment_url( get_post_thumbnail_id($the_query->ID,'thumbnail') ).'" alt="" width="auto" height="70" /></a></div>';
    
                    $i .= '<div><h4>'.get_the_title().'</h4></div>';
    
                    $i .= '<div> '.wp_trim_words( get_the_excerpt(), 19, '...').' </div>';
    
                    $i .= '<div><a href="'.get_permalink( $the_query->ID).'"><button class="news-widget-button" type="button">More info &#x3e;</button></a></div>';
    
                    $i .= '</div>';
    
    
                }
    
            } else {
    
                echo 'No Pages Found! :(';
    
            }
    
            /* Restore original Post Data */
            wp_reset_postdata();
    
        }
    
        $i .= '</div>';
    
        $i .= '</div>';
    
        //returning the output to page
        return $i;
        }
         //instantiate the shortcode
        add_shortcode( 'list_pages', 'page_list' );
    
        ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多