niestandardowa taksonomia – Pokaż ślimak kategorii portfela w adresie URL (jeśli istnieje)
![niestandardowa taksonomia – Pokaż ślimak kategorii portfela w adresie URL (jeśli istnieje)](https://oen.pl/wp-content/uploads/2023/01/apple-touch-icon@2.png)
Próbuję osiągnąć dwupoziomową strukturę portfela i działa ona dobrze w bułce tartej, ale nie w adresie URL. Chodzi o to, aby pokazać ślimak portfela (miejsca docelowe), po którym następuje kategoria portfela (jeśli istnieje), a na końcu nazwa portfela. To jest plik (portfolio-post.php), który należy zmienić, ale nie mam pojęcia, jak to zrobić, każda pomoc byłaby mile widziana:
<?php
/*******************************************************************************************************************
* Create and register Portfolio post type
*/
if ( !function_exists('ishyoboy_portfolio_post_type') ){
function ishyoboy_portfolio_post_type()
{
$labels = array(
'name' => __( 'Portfolio', 'ishyoboy_assets' ),
'singular_name' => __( 'Portfolio Item', 'ishyoboy_assets' ),
'add_new' => _x( 'Add New Item', 'portfolio-post', 'ishyoboy_assets' ),
'add_new_item' => __( 'Add New Item', 'ishyoboy_assets' ),
'edit_item' => __( 'Edit Portfolio Item', 'ishyoboy_assets' ),
'new_item' => __( 'New Portfolio Item', 'ishyoboy_assets' ),
'view_item' => __( 'View Portfolio Item', 'ishyoboy_assets' ),
'search_items' => __( 'Search Portfolio Items', 'ishyoboy_assets' ),
'not_found' => __( 'No Portfolio Items Found', 'ishyoboy_assets' ),
'not_found_in_trash'=> __( 'No Portfolio Items Found In Trash', 'ishyoboy_assets' ),
'parent_item_colon' => __( 'Parent Portfolio Item', 'ishyoboy_assets' ),
'menu_name' => __( 'Portfolio', 'ishyoboy_assets' ),
'all_items' => __( 'All Portfolio Items', 'ishyoboy_assets' ),
);
$taxonomies = array();
$supports = apply_filters( 'ish_cpt_plugin_portfolio_post_type_supports', array('title', 'editor', 'thumbnail', 'comments' ) );
global $ish_options;
if ( isset( $ish_options['slug_portfolio'] ) && '' != $ish_options['slug_portfolio'] ){
$slug = trim( $ish_options['slug_portfolio'] );
} else {
$slug = _x('portfolio', 'URL slug', 'ishyoboy_assets'); // "URL slug" is necessary for WPML to be able to translate the slug
}
$post_type_args = array(
'labels' => $labels,
'singular_label' => __( 'Portfolio' , 'ishyoboy_assets' ),
'public' => true,
'publicly_queryable' => true,
'exclude_from_search' => false,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'capability_type' => 'post',
'has_archive' => false,
'hierarchical' => false,
'rewrite' => array(
'slug' => $slug,
'with_front' => true,
'feed' => true,
'pages' => false
),
'supports' => $supports,
'menu_position' => null,
'menu_icon' => null, //get_template_directory_uri() . '/inc/slider/images/icon.png',
'taxonomies' => $taxonomies
);
register_post_type( 'portfolio-post', $post_type_args );
}
}
/*******************************************************************************************************************
* Set Portfolio post type's messages
*/
if ( !function_exists('ishyoboy_portfolio_messages') ){
function ishyoboy_portfolio_messages($messages)
{
global $post, $post_ID;
$messages['portfolio-post'] =
array(
0 => '',
1 => sprintf(('Portfolio Updated. <a href=" portfolio</a>'), esc_url(get_permalink($post_ID))),
2 => __('Custom Field Updated.', 'ishyoboy_assets'),
3 => __('Custom Field Deleted.', 'ishyoboy_assets'),
4 => __('Portfolio Updated.', 'ishyoboy_assets'),
5 => isset($_GET['revision']) ? sprintf( __('Portfolio Restored To Revision From %s', 'ishyoboy_assets'), wp_post_revision_title((int)$_GET['revision'], false)) : false,
6 => sprintf(__('Portfolio Published. <a href=" Portfolio</a>', 'ishyoboy_assets'), esc_url(get_permalink($post_ID))),
7 => __('Portfolio Saved.', 'ishyoboy_assets'),
8 => sprintf(__('Portfolio Submitted. <a target="_blank" href=" Portfolio</a>', 'ishyoboy_assets'), esc_url( add_query_arg('preview', 'true', get_permalink($post_ID)))),
9 => sprintf(__('Portfolio Scheduled For: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Preview Portfolio</a>', 'ishyoboy_assets'), date_i18n( __( 'M j, Y @ G:i', 'ishyoboy_assets' ), strtotime($post->post_date)), esc_url(get_permalink($post_ID))),
10 => sprintf(__('Portfolio Draft Updated. <a target="_blank" href=" Portfolio</a>', 'ishyoboy_assets'), esc_url( add_query_arg('preview', 'true', get_permalink($post_ID)))),
);
return $messages;
}
}
add_filter( 'post_updated_messages', 'ishyoboy_portfolio_messages' );
/*******************************************************************************************************************
* Create Category for Portfolio post type
*/
if ( !function_exists('ishyoboy_portfolio_category') ){
function ishyoboy_portfolio_category()
{
$labels = array(
'name' => __( 'Portfolio Categories', 'ishyoboy_assets' ),
'singular_name' => __( 'Portfolio Category', 'ishyoboy_assets' ),
'search_items' => __( 'Search Portfolio Categories', 'ishyoboy_assets' ),
'popular_items' => __( 'Popular Portfolio Categories', 'ishyoboy_assets' ),
'all_items' => __( 'All Portfolio Categories', 'ishyoboy_assets' ),
'parent_item' => __( 'Parent Portfolio Category', 'ishyoboy_assets' ),
'edit_item' => __( 'Edit Portfolio Category', 'ishyoboy_assets' ),
'update_item' => __( 'Update Portfolio Category', 'ishyoboy_assets' ),
'add_new_item' => __( 'Add New Portfolio Category', 'ishyoboy_assets' ),
'new_item_name' => __( 'New Portfolio Category', 'ishyoboy_assets' ),
'separate_items_with_commas' => __( 'Separate Portfolio Categories with commas', 'ishyoboy_assets' ),
'add_or_remove_items' => __( 'Add or remove Portfolio Category', 'ishyoboy_assets' ),
'choose_from_most_used' => __( 'Choose from most used Portfolio Categories', 'ishyoboy_assets' )
);
global $ish_options;
if ( isset( $ish_options['slug_portfolio'] ) && '' != $ish_options['slug_portfolio'] ){
$slug = trim( $ish_options['slug_portfolio'] ) . '-category';
} else {
$slug = _x('portfolio-category', 'URL slug', 'ishyoboy_assets'); // "URL slug" is necessary for WPML to be able to translate the slug
}
$args = array(
'labels' => $labels,
'public' => true,
'hierarchical' => true,
'show_ui' => true,
'show_in_nav_menus' => true,
'query_var' => true,
"rewrite" => array(
'slug' => $slug,
'hierarchical' => true
)
);
register_taxonomy( 'portfolio-category', 'portfolio-post', $args );
}
}
if ( is_admin() ){
/*******************************************************************************************************************
* Backend columns
*/
if ( !function_exists('ishyoboy_portfolio_edit_columns') ){
function ishyoboy_portfolio_edit_columns( $columns ){
$columns = array(
"cb" => "<input type=\"checkbox\" />",
"title" => __( 'Title', 'ishyoboy_assets' ),
"author" => __( 'Author', 'ishyoboy_assets' ),
"category" => __( 'Categories', 'ishyoboy_assets' ),
"thumbnail" => __( 'Image', 'ishyoboy_assets' ),
"date" => __( 'Date', 'ishyoboy_assets' )
);
return $columns;
}
}
add_filter("manage_edit-portfolio-post_columns", "ishyoboy_portfolio_edit_columns");
if ( !function_exists('ishyoboy_portfolio_custom_columns') ){
function ishyoboy_portfolio_custom_columns($column){
global $post;
switch ($column)
{
case "thumbnail":
the_post_thumbnail('thumbnail');
break;
case "category":
echo get_the_term_list($post->ID, 'portfolio-category', '', ', ','');
break;
}
}
}
add_action( 'manage_portfolio-post_posts_custom_column' , 'ishyoboy_portfolio_custom_columns', 10, 2 );
/**
* Add dropdown filter for sliders
*/
if ( !function_exists('ishyoboy_restrict_portfolio_by_category') ){
function ishyoboy_restrict_portfolio_by_category() {
global $typenow, $wp_query;
if ( isset($typenow) && 'portfolio-post' == $typenow ) {
$taxonomy = 'portfolio-category';
$term = isset( $wp_query->query[$taxonomy]) ? $wp_query->query[$taxonomy] : '';
$portfolio_taxonomy = get_taxonomy($taxonomy);
wp_dropdown_categories(array(
'show_option_all' => __("Show all", 'ishyoboy_assets') . ' ' . $portfolio_taxonomy->label,
'taxonomy' => $taxonomy,
'name' => $taxonomy,
'orderby' => 'name',
'selected' => $term,
'hierarchical' => true,
'depth' => 0,
'show_count' => true, // Show # listings in parens
'hide_empty' => true, // Don't show businesses w/o listings
));
}
}
}
add_action('restrict_manage_posts','ishyoboy_restrict_portfolio_by_category');
if ( !function_exists('taxonomy_filter_ishyoboy_portfolio_request') ){
function taxonomy_filter_ishyoboy_portfolio_request( $query ) {
global $pagenow, $typenow;
if ( isset($pagenow) && 'edit.php' == $pagenow ) {
$filters = get_object_taxonomies( $typenow );
if ( isset($filters) && '' != $filters){
foreach ( $filters as $tax_slug ) {
$var = &$query->query_vars[$tax_slug];
if ( isset($var) && '' != $var ) {
$term = get_term_by( 'id', $var, $tax_slug );
if ( isset($term) && '' != $term ) {
$var = $term->slug;
}
}
}
}
}
}
}
add_filter( 'parse_query', 'taxonomy_filter_ishyoboy_portfolio_request' );
if ( !function_exists('ishyoboy_portfolio_post_thumbnails') ){
function ishyoboy_portfolio_post_thumbnails() {
$supported_types = get_theme_support( 'post-thumbnails' );
if ( $supported_types === false ) {
add_theme_support( 'post-thumbnails', array( 'portfolio-post' ) );
}
elseif( true === $supported_types){
}
elseif( is_array( $supported_types[0] ) ){
$supported_types[0][] = 'portfolio-post';
add_theme_support( 'post-thumbnails', $supported_types[0] );
}
}
}
/**
* Change the default setting for comments on Portfolio posts. Make them closed by default.
*/
if ( ! function_exists( 'ishyoboy_default_content_portfolio' ) ) {
function ishyoboy_default_content_portfolio( $post_content, $post ) {
if( $post->post_type )
switch( $post->post_type ) {
case 'portfolio-post':
$post->comment_status="closed";
break;
}
return $post_content;
}
}
add_filter( 'default_content', 'ishyoboy_default_content_portfolio', 10, 2 );
}
/*******************************************************************************************************************
* Initialize Portfolio post type
*/
add_action( 'init', 'ishyoboy_portfolio_post_type' );
add_action( 'init', 'ishyoboy_portfolio_category', 0 );
//add_action( 'after_theme_setup','ishyoboy_portfolio_post_thumbnails' );