Wordpress настраиваемый тип записи и ссылки на категории 404 - PullRequest
1 голос
/ 18 ноября 2011

Я недавно создал несколько пользовательских типов записей на сайте WordPress, с кодом ниже, они генерируют ссылки в правильной форме, например root / category / id / postname, но каждая ссылка на полный пост, нумерацию страниц или категорию 404.

Я пробовал ряд популярных решений, добавляя /% category% /% post_id% / к структуре url, переписывая имена функций, но я не добираюсь быстро.

Со структурой постоянных ссылок wordpress, установленной по умолчанию, например, root /? page_id = 1257 все работает нормально.

Любая попытка добавить дополнительные параметры для перезаписи (см. Ниже) приводит к «Ошибка разбора: синтаксическая ошибка, неожиданная«; », даже если нет«; » присутствует.

'rewrite' => array(
'slug' => 'issue')

Любая помощь приветствуется - очень запутанная, очень расстроенная!

<?php

//      CUSTOM POST TYPE 1
add_action('init', 'mjwpress_register');

function mjwpress_register() {
    $args = array(
        'label' => __('Press'),
        'singular_label' => __('Press'),
        'public' => true,
        'show_ui' => true,
        'capability_type' => 'post',
        'new_item' => __('New Press Item'),
        'hierarchical' => false,
        'rewrite' => true,
        'supports' => array('title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'comments', 'revisions', 'page-attributes', 'post-formats')
    );

    register_taxonomy('press-category', array('article'), 
        array(
            'label' => 'Press Story Category', 
            'singular_label' => 'press-story-category',
            'public' => TRUE,
            'show_tagcloud' => TRUE,
            'hierarchical' => TRUE,
            'query_var' => TRUE,
            'menu_position' => 5,
            'rewrite' => TRUE)
    );

    register_post_type( 'mjwpress' , $args );
}


add_action('inthenews_init', 'inthenews_init');
add_action('save_post', 'save_mjwpress_options');

function inthenews_init(){
    add_meta_box('newsmeta', 'Press Options', 'mjwpress_meta_options', 'mjwpress', 'normal', 'low');

}

function mjwpress_meta_options(){
    global $post;
    $custom = get_post_custom($post->ID);
    $linkurl = $custom['linkurl'][0];
    $linktitle = $custom['linktitle'][0];
?>

<div class='form-wrap'>
    <div class='form-field'>
        <label for='linkurl'>Link to External Publication:</label>
        <input name='linkurl' value='<?php echo $linkurl; ?>' />
        <p>E.g. http://www.example.com/article-title.php</p>
    </div>

    <div class='form-field'>
        <label for='linktitle'>Title of External Publication:</label>
        <input name='linktitle' value='<?php echo $linktitle; ?>' />
        <p>E.g. Lib Dem Voice</p>
    </div>
</div>

<?php
}

function save_mjwpress_options(){
    global $post;
    update_post_meta($post->ID, 'linkurl', $_POST['linkurl']);
    update_post_meta($post->ID, 'linktitle', $_POST['linktitle']);
}

?>

Ответы [ 4 ]

2 голосов
/ 18 ноября 2011

Я боролся с этим весь день :) Просто зайдите в options-> Permalinks и сохраните настройки, чтобы они восстановили правила перезаписи в базе данных. Это происходит, когда вы установили параметры постоянных ссылок и после этого зарегистрировали пользовательский тип записи.

Если вы используете плагины кеша, такие как W3 Total Cache, очистите кеш перед сохранением параметров постоянных ссылок.

Также убедитесь, что у вас нет конфликтов в именах типов сообщений, используйте:

'rewrite'   => array('slug' => '<some-unique-prefix>')

Если это не поможет, проверьте это

0 голосов
/ 20 апреля 2017
add_filter('pre_get_posts', 'query_post_type');
function query_post_type($query) {
   if(is_category()) {
      $post_type = get_query_var('post_type');
      if($post_type)
         $post_type = $post_type;
      else
         $post_type = array('nav_menu_item', 'post', 'your_custom_post_type');
      $query->set('post_type', $post_type);
      return $query;
   }
 }
0 голосов
/ 26 ноября 2011

Оказывается, порядок таксономии и тип поста важны для переписывания.

См. http://mondaybynoon.com/2011/05/20/revisiting-custom-post-types-taxonomies-permalinks-slugs/

<?php

// Links post type...

// Taxonomy

$labels = array(
    'name'                          => 'Brands',
    'singular_name'                 => 'Brand',
    'search_items'                  => 'Search Brands',
    'popular_items'                 => 'Popular Brands',
    'all_items'                     => 'All Brands',
    'parent_item'                   => 'Parent Brand',
    'edit_item'                     => 'Edit Brand',
    'update_item'                   => 'Update Brand',
    'add_new_item'                  => 'Add New Brand',
    'new_item_name'                 => 'New Brand',
    'separate_items_with_commas'    => 'Separate Brands with commas',
    'add_or_remove_items'           => 'Add or remove Brands',
    'choose_from_most_used'         => 'Choose from most used Brands'
    );

$args = array(
    'label'                         => 'Brands',
    'labels'                        => $labels,
    'public'                        => true,
    'hierarchical'                  => true,
    'show_ui'                       => true,
    'show_in_nav_menus'             => true,
    'args'                          => array( 'orderby' => 'term_order' ),
    'rewrite'                       => array( 'slug' => 'cameras/brands', 'with_front' => false ),
    'query_var'                     => true
);

register_taxonomy( 'brands', 'cameras', $args );

//Post type, must come after the taxonomy...

register_post_type( 'cameras',
    array(
        'labels'                => array(
            'name'              => __( 'Cameras' ),
            'singular_name'     => __( 'Camera' )
            ),
        'public'                => true,
        'show_ui'               => true,
        'show_in_menu'          => true,
        'supports'              => array( 'title', 'editor', 'thumbnail' ),
        'rewrite'               => array( 'slug' => 'cameras', 'with_front' => false ),
        'has_archive'           => true
    )
);


?>
0 голосов
/ 24 ноября 2011

Всякий раз, когда это случается со мной, я смотрю на .htaccess, и быстро понимаю, что его там нет, или постоянная ссылка Wordpress .htaccess не записывает сам себя и его нужно скопировать / вставить.

Двойная проверка!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...