WordPress获取当前文章别名
日期:
标签:WordPress教程
如需帮忙改代码,或者WordPress二次开发、PHP网站建设等需求,可联系我购买付费服务: 点此联系我
相信很多人在使用WordPress的时候,都喜欢使用文章别名作为固定链接,如我的博客固定链接形式为 https://www.ludou.org/%postname%.html
,这个postname就是文章的别名(也称 slug name)。你在后台编写文章的时候,可以自己定义文章的别名,如下图的黄色部分:
当然你可以在文章编辑页,点击某篇文章下的"快速编辑",那里也可以编辑别名:
现在有个问题,我怎样才能获取这个文章别名呢?WordPress中提供了<?php the_title(); ?>来获取文章标题,<?php the_permalink(); ?>用于获取当前文章的链接,但是并没有发现获取文章别名的函数。找不到相应的函数,我们可以自己写个函数,以下是已编写好的函数,你可以编辑你的主题目录中的functions.php
,在 ?>
前面添加以下函数:
function the_slug() {
$post_data = get_post($post->ID, ARRAY_A);
$slug = $post_data['post_name'];
return $slug;
}
然后你就可以在你需要的地方调用该函数了:
<?php echo the_slug(); ?>
输出结果为当前文章的别名,如本文的为 wordpress-post-slug-and-page-slug-function
如果你用的别名是中文,那么调用出来的将会是一堆乱码,因为WordPress对中文的别名进行了编码,在数据库中存储的不是中文。
参考文章:
-- 完 --
本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
原文出处:露兜即刻 https://www.ludou.org/wordpress-post-slug-and-page-slug-function.html
不好意思,本人愚笨,不是很懂什么意思。
是不是我想用标题作为文章的链接,但是如果用/%postname%.html就变成中文或者乱码了,用这个方法可以自动转还成wordpress-post-slug-and-page-slug-function这种英文形式?
@西门 不是!
本文只是教你如何获取文章的别名,至于你想怎么用就随你愿了,%postname%.html只是举个例子!
如果你的文章别名是中文,而且用%postname%.html这种固定链接形式,那么文章网址将会是中文(Firefox中),或者乱码(IE)
如果你想使用%postname%.html这种链接形式,且不想出现乱码情况,可以搜索自动将中文名称转成拼音的插件。
已将博客订阅,关注中!
@滔滔乐 谢谢关注!
WP中文论坛路过.
function the_slug() {
$post_data = get_post($post->ID, ARRAY_A);
$slug = $post_data['post_name'];
return $slug;
}
这个函数你测试过吗, $post是the loop中的全局变量, 在函数体内使用应该先 "global $post;"声明吧..
话说, 按照WP模板标签风格, the_xxx之类tag一般是直接输出值, get_the_xxx是返回值.
@cxy152376 1、the_slug()是自定义的函数,不是WordPress内置函数,名称可以自己起个;
2、至于该函数到底是直接输出值,还是返回值,你可以自己做些更改,不必拘泥于WordPress标签风格
3、该函数我已经测试过,可以正常使用,在index.php的主循环中可以正常使用,在single.php中未加循环的情况下也可以正常使用;
4、$post在主循环外部仍然有效,不必添加全局变量声明,当然添加了也没有错
可以参考:
http://playworkplay.com/blog/wordpress-quicktips-getting-a-posts-id/
可以不用修改这些代码啊,个人使用方法是先用英文或拼音写标题,然后发布,这样英文链接就形成了,然后再编辑为你要的中文名称重新发布就好了。
@米修 本文只是教你如何获取文章的别名;
本文并不是教你如何设置英文链接。
看了半天 没看个明白
调用别名
数据库里没中文,
那只能调英文…
@GO时尚网 是的!数据库中不存放中文,如果别名是中文,WordPress会对其解码成%形式再存放,取出来的时候再解码,至于怎么解码,至今没研究出来。
@Ludou 那个%形式是ASCII码的十六进制形式,每个字符以%做前缀。
他会自已译成英文?
@武汉SEO 不会!你自己填。
待你熟悉WordPress就知道了。
我搜索到这里就是为了一个,就是能不能文章别名和标签别名,中文自动转换成拼音或者英文
@假睫毛 你可以尝试搜索关键字:wordpress 文章 别名 中文 拼音
@Ludou 不过显示出来会很长,楼主你自己也是手动的嘛?
@假睫毛 是的
@Ludou 嗯,插件还是没有手动好!
不好意思,打扰下,我按照你的方法弄了一下,并且我的别名也是英文,但是调出来的确是乱码是怎么回事呢?
@杜彬的博客 这种情况我没见过,你在自己找找原因。
你好,我想请教你一个问题,我想获取文章里第一个标签的别名,怎么实现。
先谢谢你。
@漠天 代码:
<?php
$post_tags = wp_get_post_tags($post->ID);
if ($post_tags)
echo $post_tags[0]->slug;
?>
请问下 <?php echo the_slug(); ?>
这个应该添加到哪呢. . 不好意思.我是初学者
@fool 那你想添加在哪个页面,哪个地方?
@Ludou 你的就是直接替换固定链接那里.把中文的替换成了 拼音
@fool 如果你是想要这个功能,那么你来错地方了,我的固定连接是我自己写的英文,而不是拼音。
@Ludou 不是你可能误会了. . 这代码不是实现输出 文章别名吗 ? 需要手动改. .
在后台发布文章后,固定连接仍然是中文 … 所以那段代码是不是应该显示在后台?这样我该添加到哪个页面
@fool https://www.ludou.org/create-wordpress-themes-template-hierarchy.html
你参考上面的说明,将这段代码放在主题的合适页面的合适位置就可以了!
另外,这段代码不会帮你自动将中文别名转换成拼音别名,如果你需要这样的功能,请选择下面任一插件:
http://www.williamlong.info/archives/1027.html
http://blog.2i2j.com/being-humble-opinion/wp-slug-for-wordpress-plugins.html
请问,我要调用任意的page页面,别名怎么调用,求代码,谢谢!
@京[飞翔] 同理。按文中在functions.php中添加函数后,将以下代码放在任意page页面,即可输出别名:
<?php echo the_slug(); ?>
@Ludou 我意思是不调用当前文章的别名,调用任意单页的别名,由ID号来判断的!先谢谢了!
@京[飞翔] 看你的网站貌似也是搞网站技术方面。同理,把函数里面的代码提取出来:
// $post->ID 改成你的ID
$post_data = get_post($post->ID, ARRAY_A);
echo $post_data["post_name"];
get_post不行就换成get_page
的确可以调用Page Name,但如果我的Page下包含子级Page,如何调用其改页面和子级页面的page name?
@Arens $cur_page = get_page( $post->ID );echo $cur_page->post_title;
$args = array(
'child_of' => $post->ID,
'post_type' => 'page',
'post_status' => 'publish'
);
$sub_pages = get_pages( $args );
if(!empty($sub_pages)) {
foreach($sub_pages as $sub_page) {
// 打印所有子分类的标题
echo ', ' .$sub_page->post_title;
}
}
不错的博客,以后常来请教~
露兜你好,在我的网站上我采用了你的前台投稿页面,作为我网站的投稿页。首先对此表示万分感谢。然后现在我的投稿页面上增加了一些新内容,基本都差不多了,最后剩下一个别名的问题弄不来,就是我想把后台填写别名slug name的这个功能调用到前台。让用户自行在前台直接填写文章别名为英文或拼音,然后把这个别名作为固定连接。为了seo优化。请一定指教。另,欢迎到小站参观,现在内测,还是空架子,请勿见笑。
技术哥,有个小难题想请您协助一下:
如果实现只获取文章标题的英文内容呢?
例如标题是“我爱中国 i love china”,然后用代码获取英文 i love china 。
球指导 T_T….
@lee https://www.ludou.org/php-get-latin-alphabet-from-string.html
为什么这个SLUG NAME显示的时候,必须是带中横杠的。
我是个产品页面,这个别名我希望是对产品的简单描述,那么在显示的时候,我不想看到中横杠,应该怎么办?
@WINDBRAVE SLUG NAME不支持空格
路过,。。
楼主的博客真的货真价实!
我刚刚建站不到1个月,百度收录也刚刚开始,
请问博主,固定链接怎么样设置对SEO更好?
我现在是这样的
http://www.gmsir.com/ruanjian/317.html
中间的ruanjian是分类目录,317是文章ID,
是否取消分类目录,直接下面这样会更好?
http://www.gmsir.com/317.html
还是使用你说的文章名或者文章别名的效果更好?
我想用已发布文章数量加1作文章别名,看了网上的许多代码
add_action( 'save_post', 'using_id_as_slug', 10, 2 );
function using_id_as_slug($post_id, $post){
global $post_type;
if($post_type=='post'){ //只对文章生效
// 如果是文章的版本,不生效
if (wp_is_post_revision($post_id))
return false;
// 取消挂载该函数,防止无限循环
remove_action('save_post', 'using_id_as_slug' );
// 使用文章ID作为文章的别名
wp_update_post(array('ID' => $post_id, 'post_name' => $post_id ));
// 重新挂载该函数
add_action('save_post', 'using_id_as_slug' );
}
}
有这段代码如何修改能够实现,谢谢
Ludou哥能不能指定文章id获取上下篇文章呢?get_permalink 这个是默认的 不能指定文章id啊
@h5游戏 <?php
// 下一篇
$next_post = get_next_post();
if (!empty( $next_post )): ?>
<a href="<?php echo get_permalink( $next_post->ID ); ?>"><?php echo $next_post->post_title; ?></a>
<?php endif; ?>
@h5游戏 <?php
// 上一篇
$prev_post = get_previous_post();
if (!empty( $prev_post )): ?>
<a href="<?php echo $prev_post->guid ?>"><?php echo $prev_post->post_title ?></a>
<?php endif ?>
@露兜 能指定id 比如post_id =5之类的上下篇文章吗?
@h5游戏 https://core.trac.wordpress.org/browser/tags/4.5.3/src/wp-includes/link-template.php#L0
搜索:function get_adjacent_post(
用这个函数改个名放到你的主题的functions.php中,给里面的get_post传递一下id即可:$post = get_post()
感谢楼主