WordPress教程
模板兔提供专业的wordpress建站教程、wordpress主题开发教程、wordpress插件开发教程、wordpress二次开发教程等。
WordPress教程:开发模板的过程中,难免会需要添加自定义文章类型,但是默认的链接结构都是类似forum/标题 这种结构,可能对搜索引擎不友好,所以我们需要做些修改,下面有两种方法。将代码贴进主题的functions.php里,然后更新下固定链接即可!
方法一:
add_filter('post_type_link', 'custom_blog_link', 1, 3);
function custom_blog_link( $link, $post = 0 ){
if ( $post->post_type == 'blog' ){
return home_url( 'blog/' . $post->ID .'.html' );
} else {
return $link;
}
}
add_action( 'init', 'custom_blog_rewrites_init' );
function custom_blog_rewrites_init(){
add_rewrite_rule(
'blog/([0-9]+)?.html$',
...
WordPress教程:默认调用:
<?php previous_post_link('上一篇: %link') ?>
<?php next_post_link('下一篇: %link') ?>
当文章处于首篇或末篇时,会显示空白,但可以通过增加判断还填补空白:
<?php if (get_previous_post()) { previous_post_link('上一篇: %link');} else {echo "已是最后文章";} ?>
<?php if (get_next_post()) { next_post_link('下一篇: %link');} else {echo "已是最新文章";} ?>
经过测试虽然显示同分类下的文章,但首篇文章和末尾的文章会不显示对应的提示信息“已是最后文章”和“已是最后文章”。只要在get_previous_post()函数中指定一下文章所属分类ID便能使代码完全有效。
<?php
$categ...
WordPress教程:比如要在后台文章列表里显示文章点击量,将下面的代码添加到主题的functions.php中即可:
add_action('manage_posts_custom_column', 'add_postviews_column_content');
add_filter('manage_posts_columns', 'add_postviews_column');
add_action('manage_pages_custom_column', 'add_postviews_column_content');
add_filter('manage_pages_columns', 'add_postviews_column');
function add_postviews_column($defaults) {
$defaults['views'] = '点击量';
return $defaults;
}
function add_postviews_column_content($column_name) {
if($column_name == 'views') {
if(function_exists('MBT_views')) { MBT_views(...
WordPress教程:模板兔开发的部分主题里会有前端头像上传的功能,那么怎么才能让头像同步后台与前端呢?我们这里去除默认的头像,用固定的某张图片代替,大大加快加载速度。
代码如下:
add_filter('get_avatar', 'MBT_get_avatar', 10, 3);
function MBT_get_avatar($avatar, $id_or_email, $size){
$default_avatar = get_bloginfo('template_url').'/img/avatar.png'; //默认头像
if(is_object($id_or_email)) {
if($id_or_email->user_id != 0) {
$email = $id_or_email->user_id;
$user = get_user_by('email',$email);
$user_avatar = get_user_meta($id_or_email->user_id, 'avatar', true);
if($user_avatar)
return '...
WordPress教程:有时候我们需要在菜单里加入额外的一些元素,可以用Walker_Nav_Menu类来完成。
class description_walker extends Walker_Nav_Menu {
function start_el(&$output, $item, $depth, $args) {
global $wp_query;
global $wpdb;
$indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
$class_names = $value = '';
$classes = empty( $item->classes ) ? array() : (array) $item->classes;
$classes[] = 'menu-item-' . $item->ID;
$class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) );
$class_names = ' class="' . esc_attr( $class_n...
WordPress教程:在多人共用一个帐号的情况下,有这样一种需求,我不需要知道WordPress的用户名和密码,就能自动登录到公共帐号。这样的需要该如何实现呢?
方法一:wp_signon()
在主题中使用WordPress内置函数 wp_signon() ,可将用户名和密码直接放到代码中,无需再去要求用户输入,快捷登录,省时省力:
if (!is_user_logged_in()) {
$creds = array();
$creds['user_login'] = 'mobantu'; // 用户名是mobantu,自行修改
$creds['user_password'] = 'mobantu'; // 密码是mobantu
$creds['remember'] = true; $user = wp_signon( $creds, false ); if ( is_wp_error($user) ) echo $user->get_error_message();
}
将以上代码应用到你的Wo...
WordPress教程:最近给客户加了个论坛功能,需要帖子顶置功能,可是又不想某版块下的顶置贴显示在论坛首页,所以得在首页排除掉某版块的顶置贴,大致代码如下:
$sticky = get_option('sticky_posts'); rsort( $sticky );
$sticky_args = array('post__in' => $sticky, 'caller_get_posts' => 1, 'showposts' => 10, 'post_type' => 'thread',
'tax_query' => array(
array(
'taxonomy' => 'forum',
'terms' => array('145','146','147','148','149','150'),
'field' => 'id',
'operator' => 'NOT IN'
)
)
);
$sticky_arms = array_merge($sticky_args, $wp_query->query);
query_posts($sticky_arms...
WordPress教程:有时候是不会注意到有日志需要审核的,所以最好的办法就是在 WordPress 后台的首页(就是仪表盘)直接显示待审日志列表。
add_action('wp_dashboard_setup', 'MBT_thread_modify_dashboard_widgets' );
function MBT_thread_modify_dashboard_widgets() {
global $wp_meta_boxes;
if(current_user_can('manage_options')){ //只有管理员才能看到
add_meta_box( 'pending_posts_dashboard_widget', '待审文章', 'pending_posts_dashboard_widget_function','dashboard', 'normal', 'core' );
}
}
function pending_posts_dashboard_widget_function() {
global $wpdb;
$pending_posts = $wpdb->get_results("SELECT * FROM {...
WordPress教程:有时候我们需要网站前端让用户上传图片,可是wordpress默认的只有编辑权限才能在前端上传,但是一般默认的用户权限是订阅者或者投稿者,所以得改改他们的权限,代码如下:
function MBT_enable_file_uploads_by_role( ) {
$role = 'subscriber';//这是角色
if(!current_user_can($role) || current_user_can('upload_files'))
return;
$contributor = get_role( $role );
$contributor->add_cap('upload_files');
} add_action('admin_init', 'MBT_enable_file_uploads_by_role');
WordPress教程:有时候我们遇到文章多字段多重排序,或者说一个字段排序同时又得判断是否含有另一个字段或另一个字段值等于某个值,看以下代码:
<?php
//多个字段多重排序
$args = array(
'post_type' => 'words',
'meta_query' => array(
array(
'key' => 'word_count',
'orderby' => 'meta_value_num',
'order' => DESC
,
),
array(
'key' => 'title',
'orderby' => 'meta_value',
'order' => DESC
),
arr...
WordPress教程:$post = array(
'comment_status' => 'closed',
'ping_status' => 'closed',
'post_author' => 2,
'post_content' => $_POST['synopsis'],
'post_name' => sanitize_title($_POST['title']),
'post_status' => 'private',
'post_title' => $_POST['title'],
'post_type' => 'film',
'tax_input' => array(
'film_category' => array(
$_POST['category']
)
)
);
$new_film_id = wp_insert_p...
WordPress教程:js代码例如:
<script>
jQuery(document).ready(function(){
jQuery("#viptable .quxiaovip").click(function(){
jQuery.ajax({
url: '<?php echo admin_url( 'admin-ajax.php' );?>',
type: "POST",
data: {
action:"quxiaovip",
id:jQuery(this).data("id"),
},
success: function(data) {
alert(data);
location.reload(true);
}
});
});
});
</script>
php代码例如:
function quxiaovip_callback(){
// do something
echo 'mobantu';
}
add_action( 'wp_ajax_quxiaovip', 'quxiaovip_callback');
注意以上quxiaovip字符串需要一致!
WordPress教程:wordpress在默认情况下可以使用文章的一个自定义字段进行排序,代码如下:
$args = array(
'meta_key' => 'sort',
'orderby' => 'meta_value_num', // 须 WordPress 2.8 及以上版本
'order' => DESC
);
$arms = array_merge($args, $wp_query->query);
query_posts($arms);
while (have_posts())
//循环内容
endwhile;wp_reset_query();
但是有时候我们可能会碰到更加复杂的情况,需要对两个自定义字段进行组合排序,方法如下:
$query = "SELECT wposts.*, wpostmeta1.*, wpostmeta2.*
FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta1, $wpdb->postmeta wpostmeta2
WHERE wposts....
WordPress教程:if( !class_exists('CustomPostTypeArchiveInNavMenu') ) {
class CustomPostTypeArchiveInNavMenu {
function CustomPostTypeArchiveInNavMenu() {
add_action( 'admin_head-nav-menus.php', array( &$this, 'cpt_navmenu_metabox' ) );
add_filter( 'wp_get_nav_menu_items', array( &$this,'cpt_archive_menu_filter'), 10, 3 );
}
function cpt_navmenu_metabox() {
add_meta_box( 'add-cpt', __('自定义文章类型存档'), array( &$this, 'cpt_navmenu_metabox_content' ), 'nav-menus', 'side', 'default' );
}
function cpt_navmenu_metabox_content() {
$post_types = get_post_types( array( 'show_in...
WordPress教程:有时候,我们需要通过分类的序号来排序分类列表,wordpress的分类有个term_order属性,默认为0。
<?php
function mbt_add_category_field(){
echo '<div class="form-field">
<label for="cat-num">序号</label>
<input name="_term_order" id="cat-num" type="text" value="" size="40">
<p>专题列表排序,数字越好,越靠前</p>
</div>';
}
add_action('category_add_form_fields','mbt_add_category_field',10,2);
// 分类编辑字段
function mbt_edit_category_field($tag){
echo '<tr class="form-field">
<th scope="row"><label for="c...