如果metabox为空,则使用自定义帖子类型隐藏html

时间:2018-08-15 21:11:35

标签: wordpress hide display meta-boxes

我试图仅在填充了metabox的情况下显示#firstimg,因为否则它只会显示一个空框,因为它正在搜索不存在的图像。

我正在使用“自定义帖子类型”,可以显示到目前为止的图像,但是,一旦我尝试隐藏#firstimg,它所做的一切只会使我的代码混乱(它不会显示网站的其余部分,而且控制台日志中也没有任何内容,因此我不知道自己在做什么错。)

我假设我可能已经关闭了(希望吗?),但是我没有正确编写代码。希望有人愿意帮助我!

  <img class="port-img" id="firstimg" src="
  <?php $key_1_value = get_post_meta($post->ID, 'ecpt_img_1', true); 
    if( ! empty( $key_1_value ) ) { 
    echo $key_1_value; 
    document.getElementById("firstimg").style.display = "block";}
  ?>">
  <img class="port-img" id="secondimg" src="<?php $key_2_value = get_post_meta($post->ID, 'ecpt_img_2', true); if( ! empty( $key_2_value ) ) { echo $key_2_value;}?>">
  <img class="port-img" id="thirdimg" src="<?php $key_3_value = get_post_meta($post->ID, 'ecpt_img_3', true); if( ! empty( $key_3_value ) ) { echo $key_3_value;}?>">

2 个答案:

答案 0 :(得分:1)

看来您的php中有JavaScript。也许尝试这样的事情?我假设您的CSS在.port-img或#firstimg ...上没有display: none ...

<?php $key_1_value = get_post_meta($post->ID, 'ecpt_img_1', true); 
if( !empty( $key_1_value ) ) : ?>  
   <img class="port-img" id="firstimg" src="<?php echo $key_1_value; ?>"/>
<?php endif; ?>
<img class="port-img" id="secondimg" src="<?php $key_2_value = get_post_meta($post->ID, 'ecpt_img_2', true); if( ! empty( $key_2_value ) ) { echo $key_2_value;}?>">
<img class="port-img" id="thirdimg" src="<?php $key_3_value = get_post_meta($post->ID, 'ecpt_img_3', true); if( ! empty( $key_3_value ) ) { echo $key_3_value;}?>">

答案 1 :(得分:1)

您没有转义或回显JavaScript,这是导致网站无法加载超过该点的原因(您遇到致命错误)。

如果键不存在,为什么不根本不显示图像呢?

$key_1_value = get_post_meta( $post->ID, 'ecpt_img_1', true );
$key_2_value = get_post_meta( $post->ID, 'ecpt_img_2', true );
$key_3_value = get_post_meta( $post->ID, 'ecpt_img_3', true );

if( $key_1_value ) echo '<img class="port-img" id="firstimage" src="'. $key_1_value .'" />';
if( $key_2_value ) echo '<img class="port-img" id="secondimage" src="'. $key_2_value .'" />';
if( $key_3_value ) echo '<img class="port-img" id="thirdimage" src="'. $key_3_value .'" />';

或者更好的是,您甚至可以将1、2和3作为数组循环(请注意,您必须将CSS从#firstmage更改为#image-1,依此类推-但这确实您也不需要定义键变量,然后再检查它,因为get_post_meta()将返回一个 truthy 值,或者返回false(如果没有)存在,因此您可以在定义它的同时进行比较:

foreach( range(1,3) as $i ){
    if( $image_src = get_post_meta( $post->ID, "ecpt_img_$i", true ) ){
        echo "<img class='port-image' id='image-$i' src='$image_src' />";
    }
}