大家好日子!
我需要抓取文章的网址并通过删除它的最后一部分来修改它(向上移动一级)。
使用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>
但是如何删除它的最后一部分呢?
提前致谢!
答案 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);