如何在使用 foreach 循环显示的自定义帖子类型中提供页面的永久链接

Posted

技术标签:

【中文标题】如何在使用 foreach 循环显示的自定义帖子类型中提供页面的永久链接【英文标题】:How to give permalink of page in a custom post type displayed using foreach loop 【发布时间】:2018-02-14 09:29:29 【问题描述】:

我有一个名为服务的自定义帖子类型。在此,我有许多帖子显示在名为 services 的页面上,用于每个循环。

这是 ma 服务页面代码:

<?php get_header();
$args = array( 'posts_per_page' => -1, 'post_status'=> 'publish', 'post_type' => 'services');
$services = get_posts( $args );
?>
<ul>
   <?php
       $i=1;
       foreach ($services as $values) 
              if($i%2==0) 
   ?>
   <li>
       <div class="entry-title">
       <h2><a href=""><?php echo $values->post_title;?></a></h2>
       </div>

现在每个标题都有一个“a href”链接,该链接将重定向到其单独的页面。这些页面在 PAGES 帖子类型中设置。我如何在此处传递 a href。

【问题讨论】:

developer.wordpress.org/reference/functions/get_permalink 我读了这篇文章,但没有安静地掌握它 【参考方案1】:

这样做

<h2>
  <a href="<?php echo esc_url( get_permalink($values->ID) ); ?>"><?php echo $values->post_title;?>
  </a>
</h2>

但是您为什么不使用传统的 wordpress 循环,或者您可以简单地执行以下操作

<?php

global $post;
$args = array( 'posts_per_page' => -1, 'post_status'=> 'publish', 'post_type' => 'services');

$services = get_posts( $args );
foreach ( $services as $post ) : setup_postdata( $post ); ?>
    <div class="entry-title">
       <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
   </div>
<?php endforeach; 
wp_reset_postdata();?>

仔细看看有没有

setup_postdata( $post ); 

foreach ( $services as $post )之后

【讨论】:

如果我需要显示属于同一自定义帖子类型的标题的单页,则此代码 onlu 有效。但是我在每个标题的帖子类型“PAGES”中创建了一个不同的页面。我想在这里传递那个网址 这将显示'post_type' =&gt; 'services' 中的所有帖子,因为您的查询是这样设置的 是的,它显示了我的服务帖子类型中的所有帖子......但是每个帖子标题都有一个不同的 url,我想将其重定向到它在帖子类型页面中创建的 PAGE ......根据当我单击标题时,您的代码只会根据单个 page.html 以不同的设计显示相同的数据 你的意思是每个帖子都有另一个链接要重定向到? 创建一个post meta来存储页面的url,或者如果不使用,则将url设置为摘录并回显href中的值,或者使用advanced custom field创建一个存储页面的字段网址【参考方案2】:

尝试更改您的代码,例如:

<h2><a href="<?php the_permalink(); ?>"><?php echo $values->post_title;?></a></h2>

【讨论】:

很抱歉,但它似乎没有任何效果【参考方案3】:

如果您已经创建了帖子,那么为什么要为所有相同的帖子创建一个页面。

如果您创建了一个具有相同帖子标题名称的页面,那么您可以更改您的查询并在那里显示您的页面标题而不是帖子标题。

您只需为页面帖子类型创建“服务”名称类别。我知道默认情况下 WordPress 没有创建类别的功能,所以你可以为此安装一个插件。有很多可用的插件,比如Post Tags and Categories for Pages

首先安装插件,然后创建类别服务并分配给所有服务相关页面。

之后,您需要更改查询,例如获取所有带有服务类别的页面标题。见下文:

   global $post;
$args = array( 'posts_per_page' => -1, 'post_status'=> 'publish', 'post_type' => 'page', 'category' => "YOUR CATEGORY ID",);

$services = get_posts( $args );
foreach ( $services as $post ) : setup_postdata( $post ); ?>
    <div class="entry-title">
       <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
   </div>
<?php endforeach; 
wp_reset_postdata();?>

希望你明白我的意思,并对你有所帮助。谢谢。

【讨论】:

以上是关于如何在使用 foreach 循环显示的自定义帖子类型中提供页面的永久链接的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP/Eclipse 中对 foreach 循环中从数组中拉出的自定义对象进行智能感知?

如何在 Nightwatch 测试的自定义命令中添加嵌套函数 javascript - forEach - 循环遍历元素

用于显示距当前日期超过 8 个月的 WordPress 自定义帖子类型的自定义查询

在(foreach)循环中向第一个 div 添加一个类

如何在仪表板帖子列表中显示自定义字段(替换标题)

在 Wordpress 中使用自定义帖子类型时无法在循环中过滤类别