PHP - 从URL中删除最后一部分

时间:2015-01-22 13:45:43

标签: php wordpress

大家好日子!

我需要抓取文章的网址并通过删除它的最后一部分来修改它(向上移动一级)。

使用Wordpress函数<?php echo get_permalink( $post->ID ); ?>

抓取当前网址

使用示例。我目前的文章网址:

http://example.com/apples/dogs/coffee

删除网址的最后一部分,使其成为:

http://example.com/apples/dogs

(最后没有斜线)

因此,这将返回当前的Wordpress URL:

<a href="<?php echo get_permalink( $post->ID ); ?>">Text</a>

但是如何删除它的最后一部分呢?

提前致谢!

5 个答案:

答案 0 :(得分:5)

$url = 'http://example.com/apples/dogs/coffee';
$newurl = dirname($url);

答案 1 :(得分:2)

这里写的大多数答案都有效,但使用explode和RegExp解析网址是一种不好的做法。最好使用PHP函数parse_url。在这种情况下,如果URL更改,则不会遇到问题。此代码将省略url片段的最后一部分。

以下是代码:

<?php
$url = 'http://example.com/apples/dogs/coffee';
$parsed_url = parse_url($url);
$fragment = isset($parsed_url['path']) ? $parsed_url['path'] : '';
$host = isset($parsed_url['host']) ? $parsed_url['host'] : '';
$scheme = isset($parsed_url['scheme']) ? $parsed_url['scheme'] : '';
$new_fragment = '';
if(!empty($fragment)){
    $fragment_parts = explode('/', $fragment);
    // Remove the last item
    array_pop($fragment_parts);
    // Re-assemble the fragment
    $new_fragment = implode('/', $fragment_parts);
}
// Re-assemble the url
$new_url = $scheme . '://' . $host . $new_fragment;
echo $new_url;
?>

答案 2 :(得分:2)

看起来你只是在寻找帖子的父母。在这种情况下,您需要使用'get_post_ancestors($ post-&gt; ID)'。

来自wordpress codex ...

</head>
<?php

/* Get the Page Slug to Use as a Body Class, this will only return a value on pages! */
$class = '';
/* is it a page */
if( is_page() ) { 
    global $post;
        /* Get an array of Ancestors and Parents if they exist */
    $parents = get_post_ancestors( $post->ID );
        /* Get the top Level page->ID count base 1, array base 0 so -1 */ 
    $id = ($parents) ? $parents[count($parents)-1]: $post->ID;
    /* Get the parent and set the $class with the page slug (post_name) */
        $parent = get_page( $id );
    $class = $parent->post_name;
}
?>

<body <?php body_class( $class ); ?>

答案 3 :(得分:1)

这将做你要问的事 -

 echo implode('/',array_slice(explode('/',get_permalink( $post->ID )),0,-1))

但它很弱。

如果您可以保证在URL末尾没有任何其他内容需要保留,则只能使用尽可能简单的解决方案。

答案 4 :(得分:1)

有很多方法(爆炸,strpos和substr,正则表达式)。使用正则表达式可以执行以下操作:

$url = 'http://example.com/apples/dogs/coffee';
$url = preg_replace('#/[^/]+?$#', '', $url);