自定义帖子类型-通过Single-Portfolio.php输出的项目链接

时间:2020-05-16 作者:810311

我有以下代码使用表单输入注册metabox,用于输入live project链接

    function portfolio_meta_box() {

  add_meta_box (\'project-meta\', \'Add Project Link\', \'portfolio_meta_options\',  \'portfolio\', \'side\', \'low\');

  }

  add_action("admin_init", "portfolio_meta_box");

  function portfolio_meta_options(){

        global $post;

        if ( defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE ) return $post_id;
        $custom = get_post_custom($post->ID);
        $link = $custom [\'project-link\'][0];
  ?>

  <input name="project-link" value="<?php echo $link; ?>" />
  <?php
   }


//save custom meta boxes when the post is saved


function save_project_link (){

  global $post;

  if(defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE )  {
     return $post_id;
  }

  else  {

    update_post_meta ($post->ID, \'project-link\', $_POST[\'project-link\']);
  }
}

add_action (\'save_post\', \'save_project_link\');
在我的单一投资组合中。php我正在使用此代码输出项目URL

<?php

get_header(); ?>

<main class="view"> 

   <?php $link= get_post_custom_values(\'project-link\'); 
      if($link[0] != "") ://!= not equal empty string
    ?>                     
       <a href="<?=$link[0]?>" target="_blank">view site</a>

      <?php  else: ?>

      <em>live link unavailable</em>

      <?php endif; ?>

      <?php     while ( have_posts() ) :the_post(); the_content(); endwhile;?>

</main><!-- .site-main -->


<?php get_footer(); ?>
这给了我以下输出(请参见屏幕截图上的左列),但我想知道如何更改代码以获得右列所示的输出(这是一个可单击的链接,应该只显示在第一个项目屏幕截图下)

enter image description here

我的第二个问题是我注意到$link = $custom [\'project-link\'][0];

\'<?php $link= get_post_custom_values(\'project-link\'); 
      if($link[0] != "") ://!= not equal empty string
    ?>                     
       <a href="<?=$link[0]?>" target="_blank">view site</a>\'
我们使用[\'project-link\'][0];$link[0]. 是第一个[\'project-link”“][0];索引为零的索引数组,使其拾取数组中的第一个值?至于第二个$链接[0],在这种情况下为什么我们需要零索引?

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

您可以始终使用Wordpress代码参考来了解发生了什么:

get_post_custom() 是一个检索post元字段并需要post id作为参数的函数。它返回array 使用给定帖子的帖子元:https://developer.wordpress.org/reference/functions/get_post_custom/

get_post_custom_values() 是一个函数,用于检索自定义post字段的值,并接受键和post id作为参数。它返回array 元字段值的。https://developer.wordpress.org/reference/functions/get_post_custom_values/

因此,您需要索引来访问数组中的第一个位置。如果要查看数组的索引,可以按如下方式输出它们:

$key_values = get_post_custom_values( \'project-link\' );

echo $key_values[0];
这将显示索引位置0上的数组包含的内容。如果你想看看这些指数位置里面有什么,可以用1或2试试。

另一个问题是,如何获得所需的输出。首先,您希望显示url,因此必须将其放在a标记之间:

<a href="<?php echo $link[0]; ?>" target="_blank"><?php echo $link[0]; ?></a>
如果你想把它放在你的内容下面,你需要把你的the_content() 在a标记上方调用。此外,我想您应该在post循环中使用它,并使用函数get\\u post\\u custom\\u values和post id:

<main class="view">
    <?php
        while ( have_posts() ) :the_post();
            the_content();
            $current_post = get_the_ID();
            $link= get_post_custom_values(\'project-link\', $current_post); 
            if($link[0] != "") { ?>
                <a href="<?php echo $link[0]; ?>" target="_blank"><?php echo $link[0]; ?></a>
            <?php } else { ?>
                <em>live link unavailable</em>
            <?php }
        endwhile;
    ?>
</main><!-- .site-main -->
希望这有助于我正确理解你的问题。