怎么调用自定义文章类型生成列表? - wordpress开发

前台可调用自定义文章类型文章进行列表展示

wordpress的自定义文章类型是一项很强大的功能,可以自己创建新的文章类型以便在主题中进行调用,这样也是与其他主题拉开不同的主要方法。

函数

创建一个新的 Post Type 需要使用 register_post_type 函数注,在你主题的 functions.php 文件下调用该函数:

register_post_type( $post_type, $args );
//$post_type 参数就是你自定义 Post Type 的名称。

function my_custom_post_product() {
    $args = array();
    register_post_type( 'product', $args );
}
add_action( 'init', 'my_custom_post_product' );

参数很多,为了写教程方便,只列出比较常用的参数,大体结构如下:

function my_custom_post_site() {
	$labels = array(
		'name'               => _x( '网址导航', 'post type 名称' ),
		'singular_name'      => _x( '网址', 'post type 单个 item 时的名称,因为英文有复数' ),
		'add_new'            => _x( '新建网址', '添加新内容的链接名称' ),
		'add_new_item'       => __( '新建网址' ),
		'edit_item'          => __( '编辑网址' ),
		'new_item'           => __( '新网址' ),
		'all_items'          => __( '所有网址' ),
		'view_item'          => __( '查看网址' ),
		'search_items'       => __( '搜索网址' ),
		'not_found'          => __( '没有找到有关网址' ),
		'not_found_in_trash' => __( '回收站里面没有相关网址' ),
		'parent_item_colon'  => '',
		'menu_name'          => '网址'
	);
	$args = array(
		'labels'        => $labels,
		'description'   => '网址信息',
		'public'        => true,
		'menu_position' => 5,
		'supports'      => array( 'title', 'editor', 'thumbnail', 'excerpt', 'comments' ),
		'has_archive'   => true
	);
	register_post_type( 'site', $args );
}
add_action( 'init', 'my_custom_post_site' );

将上面代码加到主题 functions.php 的最下面,进入后台你会发现多出了 site 选项,这样表示注册成功:

怎么调用自定义文章类型生成列表? - wordpress开发-Npcink

这时候我们可以新建 site发表一篇电影类型的文章了。但是这样与文章类型基本相同,我们需要更多的自定义来完善我们的 site类型。

添加分类功能需要使用函数 register_taxonomy,使用方法也很简单,跟注册 Post Type 函数类似,只不过多了一个参数用来指定对应的 Post Type :

register_taxonomy( $taxonomy, $object_type, $args );

就本例而言,可以配置如下常用参数:

function my_taxonomies_site() {
	$labels = array(
		'name'              => _x( '网址分类', 'taxonomy 名称' ),
		'singular_name'     => _x( '网址分类', 'taxonomy 单数名称' ),
		'search_items'      => __( '搜索网址分类' ),
		'all_items'         => __( '所有网址分类' ),
		'parent_item'       => __( '该网址分类的上级分类' ),
		'parent_item_colon' => __( '该网址分类的上级分类:' ),
		'edit_item'         => __( '编辑网址分类' ),
		'update_item'       => __( '更新网址分类' ),
		'add_new_item'      => __( '添加新的网址分类' ),
		'new_item_name'     => __( '新网址分类' ),
		'menu_name'         => __( '网址分类' ),
	);
	$args = array(
		'labels' => $labels,
		'hierarchical' => true,
	);
	register_taxonomy( 'sitecat', 'site', $args );
}
add_action( 'init', 'my_taxonomies_site', 0 );

添加到主题之后,我们看到出现了熟悉的文章分类功能,只不过上面的文案全部变成我们自定义的内容了:

怎么调用自定义文章类型生成列表? - wordpress开发-Npcink

为 Post Type 添加自定义 Meta Box

我们想要添加的电影类型不能仅仅只有正文内容,我们还需要额外添加一些 导演 之类的有关内容。那么就需要添加自定义 Meta Box,Meta Box 可以在文章发表页面中添加自定义的表单,编写文章的时候可以填写额外的信息然后在前端调用出来。

自定义 Meta Box 需要用到 add_meta_box 函数:

add_meta_box( $id, $title, $callback, $post_type, $context,$priority, $callback_args );

我们注册一个 Meta Box :

add_action( 'add_meta_boxes', 'site_director' );
function site_director() {
	add_meta_box(
		'site_director',
		'网址链接',
		'site_director_meta_box',
		'site',
		'side',
		'low'
	);
}

然后在配置参数里面指定了回调函数 site_director_meta_box,我们需要在这个函数里面创建表单:

function site_director_meta_box($post) {

	// 创建临时隐藏表单,为了安全
	wp_nonce_field( 'site_director_meta_box', 'site_director_meta_box_nonce' );
	// 获取之前存储的值
	$value = get_post_meta( $post->ID, '_site_director', true );
?>
<label for="site_director"></label>
<input type="text" id="site_director" style="width:100%" name="site_director" value="<?php echo esc_attr( $value ); ?>" placeholder="输入网址链接" >
<?php
}
add_action( 'save_post', 'site_director_save_meta_box' );
function site_director_save_meta_box($post_id){
	// 安全检查
	// 检查是否发送了一次性隐藏表单内容(判断是否为第三者模拟提交)
	if ( ! isset( $_POST['site_director_meta_box_nonce'] ) ) {
		return;
	}
	// 判断隐藏表单的值与之前是否相同
	if ( ! wp_verify_nonce( $_POST['site_director_meta_box_nonce'], 'site_director_meta_box' ) ) {
		return;
	}
	// 判断该用户是否有权限
	if ( ! current_user_can( 'edit_post', $post_id ) ) {
		return;
	}
	// 判断 Meta Box 是否为空
	if ( ! isset( $_POST['site_director'] ) ) {
		return;
	}
	$site_director = sanitize_text_field( $_POST['site_director'] );
	update_post_meta( $post_id, '_site_director', $site_director );
}

添加自定义字段:

add_action("manage_posts_custom_column",  "site_custom_columns");
add_filter("manage_edit-site_columns", "site_edit_columns");
function site_custom_columns($column){
	global $post;
	switch ($column) {
		case "site_director":
			echo get_post_meta( $post->ID, '_site_director', true );
			break;
	}
}
function site_edit_columns($columns){

	$columns['site_director'] = '网址';

	return $columns;
}

显示 Meta Box 内容

echo '网址:'.get_post_meta( get_the_ID(), '_site_director', true );

调用 WP_Query 高度自定义调用 Post Type 的内容

$args = array( 'post_type' => 'site', 'posts_per_page' => 10 );
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
  the_title();
  echo '

<div class="entry-content">';
  the_content();
  echo '</div>';
endwhile;

补充

除了文章本身的栏目以外需要进行设计作品的展示,所以想添加一个新的文章类型调用独立的展示模板,所以就用的了wp的自定义文章类型的功能。

网上教程很多,这里不做赘述,在实现功能后,前台需要调用文章进行列表展示,网上很多类似的教程,但是有些不是很完善,这里总结代码如下:

<?php
    $args = array(
        'post_type' => 'portfolio', //自定义文章类型名称
        'showposts' => 10, //输出的文章数量,这个可以是缺省值,不用设置
       //如果你不需要分类,想调用所有分类法的文章比如首页,可以去掉下面根据id调用这段代码
        'tax_query' => array(
            array(
                'taxonomy' => 'portfolio_list',//自定义分类法名称
                'terms' => 64 //id 为 64 的分类。也可是多个分类 array(12,64)
                ),
            )
        );
    $my_query = new WP_Query($args);
    if( $my_query->have_posts() ) {
        while ($my_query->have_posts()) : $my_query->the_post();?>
        //这里输出分类文章
        <h3><?php the_title(); ?></h3>
        <p><?php the_content(); ?></p>
        <?php endwhile; wp_reset_query(); //重置 query 查询
       } ?>

搜索

允许自定义文章类型(custom post type)出现在搜索结果中

// MAKE CUSTOM POST TYPES SEARCHABLE
function searchAll( $query ) {
 if ( $query->is_search ) { $query->set( 'post_type', array( 'site','plugin', 'theme','person' )); }
 return $query;
}
add_filter( 'the_search_query', 'searchAll' );
WP开发

仅管理员可见后台更新通知 - wordpress开发

2019-5-19 15:35:49

WP开发

怎么获取上一篇文章、下一篇文章的链接? - wordpress开发

2019-5-23 20:37:34

⚠️
Npcink上的部份代码及教程来源于互联网,仅供网友学习交流,若您喜欢本文可附上原文链接随意转载。
无意侵害您的权益,请发送邮件至 link@baimu.org 或点击右侧 私信:Muze 反馈,我们将尽快处理。
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索