有没有更好的方法从当前帖子中检索ACF页面链接类型的名称?

时间:2018-06-29 作者:bestprogrammerintheworld

我正在使用高级自定义字段bookitall_roomstype 自定义帖子类型bookitall_bookings 作为另一个自定义帖子类型

  • 在bookitall\\u bookings中,有一个字段称为bookitall_roomstype 存储为pagelink (acf“类型”)。(这看起来像是实际房间类型的永久链接(它不是存储为标题/名称)
  • 我正在设置要显示的某些列(及其值)。现在我希望显示roomtype的名称。我在做下面的事。。。

    This is a snippet of my code. This snippet retrieves the NAME roomtype_name of the pagelink-type bookitall_roomstype:

    $allfields_currentpost = get_fields();
    $args = array(
              \'posts_per_page\'   => -1,
              \'offset\'           => 0,
              \'orderby\'          => \'ID\',
              \'order\'            => \'ASC\',
              \'post_type\'        => \'bookitall_roomtypes\'
    );
    $roomtypes = get_posts( $args );  
    
    $pagelink = get_field(\'bookitall_roomstype\'); //pagelink acf type        
    $roomtypes_slugs = array();
    foreach ( $roomtypes as $r ) {
        $roomtypes_slugs[] = get_permalink( $r->ID);
    }
    $arrkey = (array_search($pagelink, $roomtypes_slugs));
    $roomtype_name = \'\';
    if ( $arrkey !== false ) {
        $roomtype_name = $roomtypes[$arrkey]->post_title;
    }      
    
    The above do actually work (如果有人有同样的问题,我会把它放在这里want to know if there is a better/simpler way of achieving above? (从当前帖子中获取roomtype的名称)

    我试着用url to postid( $pagelink )get_page_by_path( $pagelink ) 但它们只返回0(这意味着不返回任何对象)。如果有邮件被退回,我可以使用$post->post_title.

    更新时间:New code (感谢@Milo!!!):

    $allfields_currentpost = get_fields(false, false);        
    $roomtype_id = $allfields_currentpost[\'bookitall_roomstype\'];  
    $roomtype_name = get_the_title($roomtype_id);
    
    (我也在使用当前帖子中的其他字段值,因此我使用get_fields() 而不是get_field())

    2 个回复
    最合适的回答,由SO网友:Milo 整理而成

    The page link field 实际存储post ID,该ID由get_field 输出功能。的第三个参数get_field 允许您禁用该输出格式,以便您只需获取ID,然后可以使用该ID获取该帖子的标题和永久链接:

    $post_id = get_field( \'bookitall_roomstype\', false, false );
    if( $post_id ):
        echo get_the_permalink( $post_id );
        echo get_the_title( $post_id );
    endif;
    

    SO网友:WebElaine

    你不需要得到所有bookitall_roomstype 在代码的第2-9行中。您确实只想提取指定给当前bookitall_bookings CPT。

    就“pagelink”字段而言,这似乎是一种不安全的信息调用方式。如果有一天permalink发生了变化呢?似乎将post ID而不是永久链接保存为bookitall_roomtypes 领域

    考虑到这一点,也为了让它更清楚bookitall_roomstype CPT名称与不相同bookitall_roomtypes 自定义字段,我建议如下:

    // pull an ACF field that has the post ID saved
    $room_type_ids = get_field(\'bookitall_room_type_ids\');
    // create an empty array to hold room type details
    $room_types = array();
    foreach($room_type_ids as $room) {
        // save the permalink
        $room_types[][0] = get_the_permalink($room);
        // save the name
        $room_types[][1] = get_the_title($room);
    }
    // now you can loop through the room types to display as you wish
    // this just links the name to the permalink, but you can add whatever
    // markup you need
    foreach($room_types as $room_details) {
        echo \'<a href="\' . $room_details[0] . \'">\' . $room_details[1] . \'</a>\';
    }
    
    这样,您只需提取所需的最低信息,而不是每个房间类型,然后是每个房间类型的详细信息,然后才检查当前帖子是否需要这些特定的详细信息。:)

    结束
    有没有更好的方法从当前帖子中检索ACF页面链接类型的名称? - 小码农CODE - 行之有效找到问题解决它

    有没有更好的方法从当前帖子中检索ACF页面链接类型的名称?

    时间:2018-06-29 作者:bestprogrammerintheworld

    我正在使用高级自定义字段bookitall_roomstype 自定义帖子类型bookitall_bookings 作为另一个自定义帖子类型

  • 在bookitall\\u bookings中,有一个字段称为bookitall_roomstype 存储为pagelink (acf“类型”)。(这看起来像是实际房间类型的永久链接(它不是存储为标题/名称)
  • 我正在设置要显示的某些列(及其值)。现在我希望显示roomtype的名称。我在做下面的事。。。

    This is a snippet of my code. This snippet retrieves the NAME roomtype_name of the pagelink-type bookitall_roomstype:

    $allfields_currentpost = get_fields();
    $args = array(
              \'posts_per_page\'   => -1,
              \'offset\'           => 0,
              \'orderby\'          => \'ID\',
              \'order\'            => \'ASC\',
              \'post_type\'        => \'bookitall_roomtypes\'
    );
    $roomtypes = get_posts( $args );  
    
    $pagelink = get_field(\'bookitall_roomstype\'); //pagelink acf type        
    $roomtypes_slugs = array();
    foreach ( $roomtypes as $r ) {
        $roomtypes_slugs[] = get_permalink( $r->ID);
    }
    $arrkey = (array_search($pagelink, $roomtypes_slugs));
    $roomtype_name = \'\';
    if ( $arrkey !== false ) {
        $roomtype_name = $roomtypes[$arrkey]->post_title;
    }      
    
    The above do actually work (如果有人有同样的问题,我会把它放在这里want to know if there is a better/simpler way of achieving above? (从当前帖子中获取roomtype的名称)

    我试着用url to postid( $pagelink )get_page_by_path( $pagelink ) 但它们只返回0(这意味着不返回任何对象)。如果有邮件被退回,我可以使用$post->post_title.

    更新时间:New code (感谢@Milo!!!):

    $allfields_currentpost = get_fields(false, false);        
    $roomtype_id = $allfields_currentpost[\'bookitall_roomstype\'];  
    $roomtype_name = get_the_title($roomtype_id);
    
    (我也在使用当前帖子中的其他字段值,因此我使用get_fields() 而不是get_field())

    2 个回复
    最合适的回答,由SO网友:Milo 整理而成

    The page link field 实际存储post ID,该ID由get_field 输出功能。的第三个参数get_field 允许您禁用该输出格式,以便您只需获取ID,然后可以使用该ID获取该帖子的标题和永久链接:

    $post_id = get_field( \'bookitall_roomstype\', false, false );
    if( $post_id ):
        echo get_the_permalink( $post_id );
        echo get_the_title( $post_id );
    endif;
    

    SO网友:WebElaine

    你不需要得到所有bookitall_roomstype 在代码的第2-9行中。您确实只想提取指定给当前bookitall_bookings CPT。

    就“pagelink”字段而言,这似乎是一种不安全的信息调用方式。如果有一天permalink发生了变化呢?似乎将post ID而不是永久链接保存为bookitall_roomtypes 领域

    考虑到这一点,也为了让它更清楚bookitall_roomstype CPT名称与不相同bookitall_roomtypes 自定义字段,我建议如下:

    // pull an ACF field that has the post ID saved
    $room_type_ids = get_field(\'bookitall_room_type_ids\');
    // create an empty array to hold room type details
    $room_types = array();
    foreach($room_type_ids as $room) {
        // save the permalink
        $room_types[][0] = get_the_permalink($room);
        // save the name
        $room_types[][1] = get_the_title($room);
    }
    // now you can loop through the room types to display as you wish
    // this just links the name to the permalink, but you can add whatever
    // markup you need
    foreach($room_types as $room_details) {
        echo \'<a href="\' . $room_details[0] . \'">\' . $room_details[1] . \'</a>\';
    }
    
    这样,您只需提取所需的最低信息,而不是每个房间类型,然后是每个房间类型的详细信息,然后才检查当前帖子是否需要这些特定的详细信息。:)

    相关推荐

    将Pemalink结构更改为/%post_id%/%postname%/

    我当前正在使用permalink结构:/%年%/%月%/%日%/%postname%/我想将其更改为:/%post\\u id%/%postname%/我希望是:更快(数据库按post\\u id排序?)较短的URL(以及清晰可见的短文,只需去掉%postname%/即可)对搜索引擎优化更加友好-因为我的内容是“常青树”,所以发布日期不相关(并且写在每篇文章上,以及最后的更新日期)-因此这将提供较短的URL,与使用年/月/日结构相比没有任何缺点</问题:WordPress是否自动处理所有301重定向