在Wordpress中发布外部链接,文件链接或发布网址

时间:2016-03-11 18:21:23

标签: php wordpress custom-post-type permalinks advanced-custom-fields

确定。所以我有一个我正在研究的Wordpress网站,客户需要将她的帖子链接到外部链接,文件网址或帖子本身。我有两个自定义字段设置,一个称为“url”,另一个称为“file_url”。我已经获得了“url”工作但我不确定如何添加“file_url”自定义帖子类型的逻辑,以防有那个数据。我一直试图让它工作一段时间,但我认为我缺乏知识真的伤害了我。是的,因为他是一个菜鸟。

function.php带来了这个文件:

<?php
/**
 *
 * Permalink
 *
 * @package Theme
 */

add_filter( 'post_link', 'wpse_64285_external_permalink', 10, 2 );

/**
 * Parse post link and replace it with meta value.
 *
 * @wp-hook post_link
 * @param   string $link
 * @param   object $post
 * @return  string
 */
function wpse_64285_external_permalink( $link, $post )
{
    $meta = get_post_meta( $post->ID, 'url', TRUE);
    $fileMeta = get_post_meta( $post->ID, 'file_url', TRUE);
    $url  = esc_url( filter_var( $meta, FILTER_VALIDATE_URL ));

    return $url ? $url : $link;
}

此处的代码包含一些修改:https://wordpress.stackexchange.com/a/72384/77860

修改

获得了一位天才同事的支持。这是代码,以防有人需要它,这将根据后端的内容拉出正确的字段:

<?php
/**
 *
 * Permalink
 *
 * @package Theme
 */

add_filter( 'post_link', 'wpse_64285_external_permalink', 10, 2 );

/**
 * Parse post link and replace it with meta value.
 *
 * @wp-hook post_link
 * @param   string $link
 * @param   object $post
 * @return  string
 */
function wpse_64285_external_permalink( $link, $post )
{

    $url = $link;

    if ($post->post_type == 'post'){
        $meta = get_field( 'url', $post->ID);
        $fileMeta = get_field( 'file_url', $post->ID);

        if (isset($meta) && !empty($meta)){
            $url  = esc_url( filter_var( $meta, FILTER_VALIDATE_URL ));
        }

        if (isset($fileMeta) && !empty($fileMeta)){
            $url  = esc_url( filter_var( $fileMeta, FILTER_VALIDATE_URL ));
        }
     }

    return $url;
}

1 个答案:

答案 0 :(得分:0)

Code Works Prefect,请检查您是否在自定义字段中获取数据。似乎您使用ACF请检查字段名称是否正确。

外部网址:

enter image description here

文件网址:

enter image description here

我将代码编写为最佳实践,以下是

<?php
if (isset($meta) && !empty($meta)){
  $url  = esc_url( filter_var( $meta, FILTER_VALIDATE_URL ));
}else if (isset($fileMeta) && !empty($fileMeta)){
  $url  = esc_url( filter_var( $fileMeta, FILTER_VALIDATE_URL ));
}
?>