【问题标题】:Hiding empty values and Linking values隐藏空值和链接值
【发布时间】:2018-01-31 13:48:48
【问题描述】:

我正在使用 WordPress 网站,并希望将照片说明和照片信用额度集成到已制作的图像下。我发现了一个很棒的代码,可以在媒体上传页面中添加一个摄影师信用和 URL 字段。但是,在页面中显示后,我想进一步自定义它。

目前,当我上传照片时,我可以添加摄影师姓名和摄影师(或来源)网址。如果填写,该 URL 会自动链接到名称。但是,我想做的是在摄影师姓名前添加一个文本和图标,以显示“(图标)图片来源 /”

我可以使用 css 添加它,但是,当没有摄影师姓名时,它仍然显示 Image Credit 文本和图标,但没有名称。当摄影师姓名字段中没有值时,如何隐藏它?

另外,如果我输入摄影师姓名,但没有 URL,它会将姓名链接到空 URL。如果 URL 字段为空,我怎样才能使它不链接名称?

这是我正在使用的代码:

function be_attachment_field_credit( $form_fields, $post ) {
$form_fields['be-photographer-name'] = array(
    'label' => 'Photographer Name',
    'input' => 'text',
    'value' => get_post_meta( $post->ID, 'be_photographer_name', true ),
    'helps' => 'If provided, photo credit will be displayed',
);

$form_fields['be-photographer-url'] = array(
    'label' => 'Photographer URL',
    'input' => 'text',
    'value' => get_post_meta( $post->ID, 'be_photographer_url', true ),
    'helps' => 'Add Photographer URL',
);

return $form_fields;
}

add_filter( 'attachment_fields_to_edit', 'be_attachment_field_credit', 10, 2 );

/**
 * Save values of Photographer Name and URL in media uploader
 *
 * @param $post array, the post data for database
 * @param $attachment array, attachment fields from $_POST form
 * @return $post array, modified post data
 */

function be_attachment_field_credit_save( $post, $attachment ) {
    if( isset( $attachment['be-photographer-name'] ) )
        update_post_meta( $post['ID'], 'be_photographer_name', $attachment['be-photographer-name'] );

    if( isset( $attachment['be-photographer-url'] ) )
update_post_meta( $post['ID'], 'be_photographer_url', esc_url( $attachment['be-photographer-url'] ) );

    return $post;
}

add_filter( 'attachment_fields_to_save', 'be_attachment_field_credit_save', 10, 2 );

然后在我的 single.php 文件中添加以下代码来显示照片来源。

<div id="tgg_credit_line" class="tgg-photo-credit" align="right">
  <?php echo "&#x1F4F7; Image Credit / " ?><a href="<?php echo get_post_meta(get_post_thumbnail_id(), 'be_photographer_url', true); ?>"><?php echo get_post_meta(get_post_thumbnail_id(), 'be_photographer_name', true); ?></a>
  </div>

【问题讨论】:

    标签: php css wordpress


    【解决方案1】:

    您可以先查看是否设置了摄影师姓名,如果没有,请不要添加任何信用代码。您也可以检查是否有 url,然后仅在必要时添加链接标签。应该使用此代码代替您在单个模板中的代码。

    <?php 
    $photographer_name = get_post_meta(get_post_thumbnail_id(), 'be_photographer_name', true);
    $photographer_url = get_post_meta(get_post_thumbnail_id(), 'be_photographer_url', true);
    
    if ( $photographer_name ) : ?>
        <div id="tgg_credit_line" class="tgg-photo-credit" align="right">
        &#x1F4F7; Image Credit /
        <?php if ( $photographer_url ) : ?> 
             <a href="<?php echo $photographer_url ?>">
        <?php endif; ?>
        <?php echo $photographer_name ?>
        <?php if ( $photographer_url ) : ?> 
             </a>
        <?php endif; ?>
        </div>
    <?php endif; ?>
    

    【讨论】:

    • 这对于隐藏图像信用文本非常有效,但是,当 URL 字段为空时,它仍然在摄影师姓名上显示一个空链接,现在,即使我在 URL 字段中放置了一个 url ,它不会链接它。
    • 我看到 if 语句中的摄影师名称变量前面缺少 $ 并且那里有一个拼写错误的 photagrapher...
    • 确实如此。如果你不介意,我还有一个问题。我将如何实现此代码以使用画廊帖子格式
    • 我不确定。如果您只是使用内置的 WordPress 库,我会在网上或代码中查看是否有任何钩子。如果您找到一些东西并开始并链接到此评论线程中的新问题,我会检查一下。
    猜你喜欢
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 2018-05-03
    • 1970-01-01
    • 2021-06-27
    • 2013-09-03
    • 1970-01-01
    相关资源
    最近更新 更多