Products
GG网络技术分享 2025-03-18 16:12 22
上一篇我们介绍了一个函数就搞定 WordPress 自定义文章选项开发,今天继续,我们今天给大家讲解如何使用一个函数就搞定 WordPress 后台文章列表自定义栏目开发,也是一个函数,非常方便快速。
WordPress 后台文章列表自定义栏目是指在 WordPress 后台文章列表页面,给文章列表表哥添加一些栏目来显示数据,比如文章的浏览数,是否设置了 SEO 信息等,所以学会快速开发 WordPress 后台文章列表自定义栏目开发是 WordPress 二次开发的必备的技能。
如果我们使⽤ WordPress 原⽣的代码给后台⽂章列表页⾯添加一列的话,需要使用两个接口:
add_filter('manage_post_posts_columns', function($columns){
$columns['views'] = '浏览';
return $columns;
});
add_action('manage_post_posts_custom_column' , function ($column, $post_id){
if($column == 'views'){
echo (int)get_post_meta($post_id , 'views' , true);
}
}, 10, 2 );
相对前面两个的开发算简单,但是需要知道这两个接口。
如果和上面一样,需压增加一列来显示文章的浏览数,这种只是简单从 post meta 种去取数据,WPJAM Basic 只需要一行就搞定:
wpjam_register_posts_column('views', ['title'=> '浏览']);
如果复杂一点的例子,获取的数据需要自己处理一下怎么处理呢?
我们继续使用一个函数就搞定 WordPress 设置页面开发里面创建的「WPJAM SEO」插件来演示,怎么在文章栏目显示设置的 SEO 标题,关键字和描述。
直接上代码:
add_action('plugins_loaded', function(){// 所有插件都已经加载
if(!did_action('wpjam_loaded')){// 确保已加载 WPJAM Basic 插件
return;
}
wpjam_register_posts_column('seo', [
'title'=> 'SEO设置',
'column_callback'=> function($post_id){
$value= '';
foreach(['title'=>'SEO标题', 'description'=>'SEO描述', 'keywords'=>'SEO关键字'] as $key => $title){
$value.= '<strong>'.$title.'</strong>:';
if($seo_value = get_post_meta(get_the_ID(), 'seo_'.$key, true)){
$value .= "\\n".$seo_value."\\n\\n";
}else{
$value .= "未设置\\n";
}
}
return wpautop($value);
}
]);
});首先还是先确保 WPJAM Basic 已加载,这方面一个函数就搞定 WordPress 设置页面开发中已经做了详细的介绍,这里就不再赘述了。
这个就是标题中说的那个牛逼的函数,是的,我们只用了 wpjam_register_posts_column 这一个函数就在 WordPress 后台搞定自定义文章列表栏目:
所以上面代码就是在文章列表页增加「SEO设置」栏目:
就是这么简单,如果你是 WordPress 主题或者插件开发者,使用 WPJAM Basic 进行二次开发都是超简单的一件事情,我会把二次开发做成一个专题,下篇教程预告:一个函数搞定 WordPress 自定义分类选项开发。
做过seo的都知道,标题和关键词,描述是非常重要的,wordpress网站默认分类目录是没有这个seo的功能的。
我们可以通过安装seo插件来解决,但是seo插件功能比较多,设置繁琐,今天给大家分享一个非插件实现分类目录seo功能的方法。
首先,我们需要新增一个文件放到主题文件里面:
<?phpadd_action('edit_category_form_fields','category_function');
functioncategory_function(){
if(isset($_GET['action'])&&$_GET['action']=='edit')$value=get_option('cat_set_'.$_GET['tag_ID']);
$title='cat_title';
$keywords='cat_keywords';
$description='cat_description';
?>
<tableclass="form-table"></table>
<h2>自定义SEO信息</h2>
<tableclass="form-table">
<tbody>
<trclass="form-field">
<thscope="row"valign="top"><labelfor="<?phpecho$title?>">标题</label></th>
<td><inputname="<?phpecho$title?>"id="<?phpecho$title?>"type="text"value="<?phpechoesc_attr(stripslashes($value['title']));
?>"><pclass="description">默认调用分类名称作为Head中Title信息。</p>
</td>
</tr>
<trclass="form-field">
<thscope="row"valign="top"><labelfor="<?phpecho$keywords;?>">关键词</label></th>
<td><inputname="<?phpecho$keywords;?>"id="<?phpecho$keywords;?>"type="text"value="<?phpecho$value['keywords'];
?>"><pclass="description">多个关键词用小写逗号“,”分隔开;默认调用分类名称作为Head中KeyWords信息。</p>
</td>
</tr>
<trclass="form-field">
<thscope="row"valign="top"><labelfor="<?phpecho$description;?>">描述</label></th>
<td><textareaname="<?phpecho$description;?>"id="<?phpecho$description;
?>"rows="3"cols="30"><?phpechostripslashes($value['description']);?></textarea><pclass="description">若未设置,将显示为“关于‘某某’分类下的所有文章。”作为Head中Description信息。</p>
</td>
</tr>
</tbody>
</table>
<?php
}
add_action('edit_category','save_category_function');
functionsave_category_function(){
if(isset($_POST['action'])&&isset($_POST['taxonomy'])&&$_POST['action']=='editedtag'&&$_POST['taxonomy']=='category'){
update_option('cat_set_'.$_POST['tag_ID'],array('title'=>$_POST['cat_title'],'description'=>$_POST['cat_description'],'keywords'=>$_POST['cat_keywords'],'template'=>$_POST['cat_template'],'orderby'=>$_POST['cat_orderby'],'per_page'=>$_POST['cat_per_page'],));
}
};
?>
然后,在主题函数function.php中引用
include("seocategory.php");
最后就是前台功能的调用了。
标题调用代码:
if(is_category()){$cat_id=get_query_var('cat');
$val=get_option("cat_set_$cat_id");
if(!Empty($val)&&$val['title']!=''){
$title=$val['title'].'-'.get_bloginfo('name');
}else{
$title=single_cat_title('',false).'-'.get_bloginfo('name');
}
}
关键词获取:
if(is_category()){$cat_id=get_query_var('cat');
$val=get_option("cat_set_$cat_id");
if(!Empty($val)&&$val['keywords']!=''){
$keywords=$val['keywords'];
}else{
$keywords=single_cat_title('',false);
}
}
描述获取:
if(is_category()){$cat_id=get_query_var('cat');
$val=get_option("cat_set_$cat_id");
if(!Empty($val)&&$val['description']!=''){
$description=$val['description'];
}else{
$description=$blog_name."'".single_cat_title('',false)."'";
}
}
上面是分别调用的代码,如果要一起输出可以用下面代码:
//functions.php文件添加到wp_head();//标题
functionpage_title(){
global$page,$paged;
$title='';
if(get_option('themes_fo2_seo_ht')&&get_option('themes_fo2_seo_on')&&(is_home()||is_front_page())){
$title=get_option('themes_fo2_seo_ht');
}elseif(is_category()){
$cat_id=get_query_var('cat');
$val=get_option("cat_set_$cat_id");
if(!Empty($val)&&$val['title']!=''){
$title=$val['title'].'-'.get_bloginfo('name');
}else{
$title=single_cat_title('',false).'-'.get_bloginfo('name');
}
}else{
$title=trim(wp_title('',false)).'-'.get_bloginfo('name');
}
//Addapagenumberifnecessary:
if($paged>=2||$page>=2)
$title.='-'.sprintf(__('Page%s','frontopen'),max($paged,$page));
echo"";
}
add_action('wp_head','page_title');
//关键字
functionpage_keywords(){
global$s,$post;
$keywords='';
if(is_single()){
if(get_the_tags($post->ID)){
foreach(get_the_tags($post->ID)as$key=>$tag){
$keywordsArr[$key]=$tag->name;
}
$keywords=implode(',',$keywordsArr);
}else{
$keywords=trim(wp_title('',false));
}
//foreach(get_the_category($post->ID)as$category)$keywords.=$category->cat_name.',';
//$keywords=substr_replace($keywords,'',-2);
}elseif(is_home()){$keywords=get_option('themes_fo2_seo_hk');
}elseif(is_tag()){$keywords=single_tag_title('',false);
//}elseif(is_category()){$keywords=single_cat_title('',false);
}elseif(is_category()){
$cat_id=get_query_var('cat');
$val=get_option("cat_set_$cat_id");
if(!Empty($val)&&$val['keywords']!=''){
$keywords=$val['keywords'];
}else{
$keywords=single_cat_title('',false);
}
}elseif(is_search()){$keywords=esc_html($s,1);
}else{$keywords=trim(wp_title('',false));
}
if($keywords){
echo"\\n";
}
}
add_action('wp_head','page_keywords');
//网站描述
functionpage_description(){
global$s,$post;
$description='';
$blog_name=get_bloginfo('name');
if(is_singular()){
if(!empty($post->post_excerpt)){
$text=$post->post_excerpt;
}else{
$text=$post->post_content;
}
$description=trim(str_replace(array("\\r\\n","\\r","\\n"," ",""),"",str_replace("\\"","'",strip_tags($text))));
if(!($description))$description=$blog_name."-".trim(wp_title('',false));
}elseif(is_home()){$description=get_option('themes_fo2_seo_hd');
}elseif(is_tag()){$description=$blog_name."'".single_tag_title('',false)."'";
//}elseif(is_category()){$description=$blog_name."'".single_cat_title('',false)."'";
}elseif(is_category()){
$cat_id=get_query_var('cat');
$val=get_option("cat_set_$cat_id");
if(!Empty($val)&&$val['description']!=''){
$description=$val['description'];
}else{
$description=$blog_name."'".single_cat_title('',false)."'";
}
}elseif(is_archive()){$description=$blog_name."'".trim(wp_title('',false))."'";
}elseif(is_search()){$description=$blog_name.":'".esc_html($s,1)."'的搜索結果";
}else{$description=$blog_name."'".trim(wp_title('',false))."'";
}
$description=mb_substr($description,0,220,'utf-8');
echo"\\n";
}
add_action('wp_head','page_description');
Demand feedback