Custom post types archive

时间:2015-02-01 作者:Alerosa

我正在从头开始开发我的第一个自定义主题(使用根作为基本框架)。主题有两个CPT,一个用于事件,一个用于关联,二者之间的关联为一对多(一个关联可以关联多个事件)。

我用pre\\u get\\u posts修改了主查询,以便在主页中显示事件。

现在,我想在侧栏上创建一个小部件,以显示具有关联事件的关联列表。我还想在每个关联的名称附近显示关联的事件数。如果我单击其中一个,我想进入一个归档页面,其中列出仅针对该关联的事件。

可以把它想象成标准的归档插件,但要有关联,而不是几个月。

我不知道在自定义小部件主功能中必须执行哪种类型的查询。这是我目前的代码:

private function getAssociationsList(){

  // The Query
  $associations = new WP_Query( array(\'post_type\' => \'associations\' ) );

  if($associations->found_posts > 0) {
    echo \'<ul>\';
      while ($associations->have_posts()) {
        $associations->the_post();

        $events_query = array(
          \'post_type\' => \'events\',
          \'meta_query\'=> array(
            array(
              \'key\'   => \'mlw_event_association\',
              \'value\' => get_the_ID()
            )
          )
        );

        $events_for_this_association = new WP_Query($events_query);

        if($events_for_this_association->found_posts > 0){
          $listItem = \'<li>\'; 
          $listItem .= \'<a href="\' . get_permalink() . \'">\';
          $listItem .= get_the_title() . \'</a>\';
          $listItem .= \' (\'. $events_for_this_association->post_count . \')</li>\'; 
          echo $listItem;
        }
      }
    echo \'</ul>\';
    wp_reset_postdata(); 

  }else{
    echo \'<p>_("No association with upcoming events at the moment")</p>\';
  } 
}
这里的问题是get\\u permalink()是指向关联页面的链接,而不是指向“筛选”存档页面的链接。此外,此查询始终显示标记,即使与相关事件没有关联。

如有任何建议,将不胜感激。

非常感谢。

1 个回复
SO网友:Privateer

我重新编写了该函数,对其进行了一些修改。

主要更改是指定要在调用中链接到的关联的IDget_permalink 使用$association->ID 而不是打电话get_the_title (尽管您可以在“获取标题”中放置相同的ID)。

我还从使用\\u post()切换到使用next\\u post(),它将下一个post拉入一个变量,而不是踩踏各种post全局变量。

最后,由于函数是getAssociationsList,我让它返回输出,而不是回显输出。(我更改了名称……因为当人们需要稍微翻译一下函数名时,使用下划线会有所帮助)

无论如何,我希望这有帮助!

private function get_associations_list(){
    $associations = new WP_Query( array(\'post_type\' => \'associations\' ) );
    $output = \'\';

    if( $associations->found_posts > 0 ) {
        $output .= \'<ul>\';
        while ($associations->have_posts()) {
            # changed to use next_post() so we can avoid messing with the global query
            # which avoids needing to use reset below.
            $association = $associations->next_post();

            # block this out as we no longer need it
            # $associations->the_post();

            # Changed value to use the objects ID rather than calling an extra function to get it
            $events_query = array(
                \'post_type\' => \'events\',
                \'meta_query\'=> array(
                    array(
                        \'key\'   => \'mlw_event_association\',
                        \'value\' => $association->ID
                    )
                )
            );

            # Checked via have_posts
            # - added target object to get permalink and title for
            # - changed count to use found_posts instead of post_count
            $events_for_this_association = new WP_Query($events_query);
            if ( $events_for_this_association->have_posts() ) {
                # There is at least one
                $association_link = get_permalink( $association->ID );
                $association_title = $association->post_title;
                $association_event_count = $events_for_this_association->found_posts;
                $output .= <<<HTML
<li><a href="{$association_link}">{$association_title}</a> ({$association_event_count})</li>
HTML;

            }
        }
        $output .= \'</ul>\';

        # no longer needing to reset post data as we never used the global space
        # wp_reset_postdata(); 

    }else{
        $output = \'<p>\' . __("No association with upcoming events at the moment") . \'</p>\';
    }

    # Maybe give caller option to echo it immediately instead of echoing it.
    return $output;
}

结束

相关推荐

widgets in contacts only

我的顶部菜单中列出了几页。这些是:联系人、我的帐户和消息。我在admin的“Pages Sidebar”选项卡中添加了一个地图。但它似乎将地图添加到上面列出的所有3个页面中,但我只希望它出现在联系人页面上,而不是其他2个页面上,因为在其他2个页面中,我希望看到其他内容(可能是针对会员的广告)。我该怎么做?谢谢你的帮助。

Custom post types archive - 小码农CODE - 行之有效找到问题解决它

Custom post types archive

时间:2015-02-01 作者:Alerosa

我正在从头开始开发我的第一个自定义主题(使用根作为基本框架)。主题有两个CPT,一个用于事件,一个用于关联,二者之间的关联为一对多(一个关联可以关联多个事件)。

我用pre\\u get\\u posts修改了主查询,以便在主页中显示事件。

现在,我想在侧栏上创建一个小部件,以显示具有关联事件的关联列表。我还想在每个关联的名称附近显示关联的事件数。如果我单击其中一个,我想进入一个归档页面,其中列出仅针对该关联的事件。

可以把它想象成标准的归档插件,但要有关联,而不是几个月。

我不知道在自定义小部件主功能中必须执行哪种类型的查询。这是我目前的代码:

private function getAssociationsList(){

  // The Query
  $associations = new WP_Query( array(\'post_type\' => \'associations\' ) );

  if($associations->found_posts > 0) {
    echo \'<ul>\';
      while ($associations->have_posts()) {
        $associations->the_post();

        $events_query = array(
          \'post_type\' => \'events\',
          \'meta_query\'=> array(
            array(
              \'key\'   => \'mlw_event_association\',
              \'value\' => get_the_ID()
            )
          )
        );

        $events_for_this_association = new WP_Query($events_query);

        if($events_for_this_association->found_posts > 0){
          $listItem = \'<li>\'; 
          $listItem .= \'<a href="\' . get_permalink() . \'">\';
          $listItem .= get_the_title() . \'</a>\';
          $listItem .= \' (\'. $events_for_this_association->post_count . \')</li>\'; 
          echo $listItem;
        }
      }
    echo \'</ul>\';
    wp_reset_postdata(); 

  }else{
    echo \'<p>_("No association with upcoming events at the moment")</p>\';
  } 
}
这里的问题是get\\u permalink()是指向关联页面的链接,而不是指向“筛选”存档页面的链接。此外,此查询始终显示标记,即使与相关事件没有关联。

如有任何建议,将不胜感激。

非常感谢。

1 个回复
SO网友:Privateer

我重新编写了该函数,对其进行了一些修改。

主要更改是指定要在调用中链接到的关联的IDget_permalink 使用$association->ID 而不是打电话get_the_title (尽管您可以在“获取标题”中放置相同的ID)。

我还从使用\\u post()切换到使用next\\u post(),它将下一个post拉入一个变量,而不是踩踏各种post全局变量。

最后,由于函数是getAssociationsList,我让它返回输出,而不是回显输出。(我更改了名称……因为当人们需要稍微翻译一下函数名时,使用下划线会有所帮助)

无论如何,我希望这有帮助!

private function get_associations_list(){
    $associations = new WP_Query( array(\'post_type\' => \'associations\' ) );
    $output = \'\';

    if( $associations->found_posts > 0 ) {
        $output .= \'<ul>\';
        while ($associations->have_posts()) {
            # changed to use next_post() so we can avoid messing with the global query
            # which avoids needing to use reset below.
            $association = $associations->next_post();

            # block this out as we no longer need it
            # $associations->the_post();

            # Changed value to use the objects ID rather than calling an extra function to get it
            $events_query = array(
                \'post_type\' => \'events\',
                \'meta_query\'=> array(
                    array(
                        \'key\'   => \'mlw_event_association\',
                        \'value\' => $association->ID
                    )
                )
            );

            # Checked via have_posts
            # - added target object to get permalink and title for
            # - changed count to use found_posts instead of post_count
            $events_for_this_association = new WP_Query($events_query);
            if ( $events_for_this_association->have_posts() ) {
                # There is at least one
                $association_link = get_permalink( $association->ID );
                $association_title = $association->post_title;
                $association_event_count = $events_for_this_association->found_posts;
                $output .= <<<HTML
<li><a href="{$association_link}">{$association_title}</a> ({$association_event_count})</li>
HTML;

            }
        }
        $output .= \'</ul>\';

        # no longer needing to reset post data as we never used the global space
        # wp_reset_postdata(); 

    }else{
        $output = \'<p>\' . __("No association with upcoming events at the moment") . \'</p>\';
    }

    # Maybe give caller option to echo it immediately instead of echoing it.
    return $output;
}

相关推荐

Using add_filter() in Widgets

只需查询引用add_filter() 作用您可以在WordPress小部件类中使用此函数吗。Example我有一个带有动态创建代码的小部件,我想将其传递给插件中创建的另一个函数。这能实现吗?<?php /** * Display the actual Widget * * @param Array $args * @param Array $instance */ public function widget($args, $inst