사용자 지정 포스트 유형에서 슬러그를 제거하면 404
3 대답
- 투표
-
- 2018-01-27
맞춤 게시물 유형 및 영구 링크 수정 등록은 괜찮습니다. 문제는 페이지에 대한 간단한 링크의 "정리 된"URL과 일치 할 가능성이 더 높고
pagename
이 아닌name
쿼리 변수를 설정하는 WordPress 재 작성 규칙에 있습니다.change_slug_struct()
함수가 가정 한대로모든 경우를 고려하여 함수를 다음과 같이 변경하세요.
function change_slug_struct( $query ) { if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) { return; } if ( ! empty( $query->query['name'] ) ) { $query->set( 'post_type', array( 'post', 'single-link', 'page' ) ); } elseif ( ! empty( $query->query['pagename'] ) && false === strpos( $query->query['pagename'], '/' ) ) { $query->set( 'post_type', array( 'post', 'single-link', 'page' ) ); // We also need to set the name query var since redirect_guess_404_permalink() relies on it. $query->set( 'name', $query->query['pagename'] ); } } add_action( 'pre_get_posts', 'change_slug_struct' );
The registering of the custom post type and the permalink modification is OK. The problem is with the WordPress rewrite rules that more than likely will match the "cleaned up" URL of your simple links to pages and it will set the
pagename
query var notname
as yourchange_slug_struct()
function assumed.So change the function to this to account for all cases:
function change_slug_struct( $query ) { if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) { return; } if ( ! empty( $query->query['name'] ) ) { $query->set( 'post_type', array( 'post', 'single-link', 'page' ) ); } elseif ( ! empty( $query->query['pagename'] ) && false === strpos( $query->query['pagename'], '/' ) ) { $query->set( 'post_type', array( 'post', 'single-link', 'page' ) ); // We also need to set the name query var since redirect_guess_404_permalink() relies on it. $query->set( 'name', $query->query['pagename'] ); } } add_action( 'pre_get_posts', 'change_slug_struct' );
-
도움이 되었기 때문에 영구 링크를 변경하거나 새로 고칠 필요조차 없었습니다.감사합니다!!that helped, I didn't even need to change or refresh the permalinks. Thank you!!
- 0
- 2018-01-29
- Paranoia
-
완전히 작동하지 않았습니다. 부모가있는 페이지 (예 : domain.com/parent/page)가있는 경우 404가 표시됩니다. 도메인 .com/page (부모없이)로 변경하면 다시 작동합니다..이게 뭔지 아세요?that didn't fully work, if I have a page with a parent (eg. domain.com/parent/page) i get a 404. If I change it to domain.com/page (without the parent) then it works again. Any idea what this could be?
- 0
- 2018-01-29
- Paranoia
-
해결책이 있으면 정답으로 다시 변경하겠습니다.불행히도 나는 붙어 있습니다 :(I'll change this back to the correct answer, if we have a solution. Unfortunately I am stuck :(
- 0
- 2018-01-30
- Paranoia
-
예.자식 페이지가있는 경우는 고려하지 않았습니다.사용자 정의 게시물 유형은 계층 적이 지 않으므로 하위 페이지가있는 경우 케이스를 제외하는 것이 안전합니다.내 대답을 수정했습니다.작동하는지 알려 주시고 올바른 답변으로 마케팅하는 것을 잊지 마십시오.Yes. I haven't taken into account the case where there are child pages. Since your custom post type is not hierarchical, it is safe to exclude cases when there are child pages. I have modified my answer. Do let me know if it works and don't forget to market it as the right answer.
- 0
- 2018-01-30
- Vlad Olaru
-
당신은 천재입니다 !!you're a genius!!
- 0
- 2018-01-30
- Paranoia
-
- 2018-01-23
퍼마 구조를 변경해야합니다.기본적으로 사용자 지정 게시물 유형의 게시물은 URL이 슬러그 접두어로 시작하는 경우에만 검색됩니다.접두사를 변경할 때 삭제할 때와 유사한 문제가 발생합니다. 이 게시물을 살펴보세요 .
포스트 유형 슬러그 접두사를 제거하려면
single-link_rewrite_rules
및 해당 규칙을 반복하고 접두사도 제거합니다.참고 : 영구 구조를 변경하면 URL 충돌이 발생할 수 있습니다.
You have to alter the perma structure. By default your custom post type's post will only be found wenether the url starts with the slug prefix. When changing the prefix you will have similar issues as when deleting it, have a look at this post.
To achieve removal of the post type slug prefix you should hook into
single-link_rewrite_rules
and iterate through those rules and remove the prefix there as well.Note: changes in the perma structure may cause url conflicts.
-
@Paranoia는 "페이지 유형 사용"의 의미를 100 % 확신하지 못합니다.그러나 [`rewrite_rules_array`] (https://codex.wordpress.org/Plugin_API/Filter_Reference/rewrite_rules_array) 후크를 사용하면 모든 규칙에 액세스 할 수 있습니다.@Paranoia not 100% sure what you mean with "use the page type". But with the [`rewrite_rules_array`](https://codex.wordpress.org/Plugin_API/Filter_Reference/rewrite_rules_array) hook you can access all rules.
- 0
- 2018-01-24
- Fleuv
-
- 2020-07-22
여러 맞춤 게시물 유형의 경우 다음과 같이 조정하세요.
$query->set( 'post_type', array( 'post', 'custom1', 'page' ) && array( 'post', 'custom2', 'page' ) );
For multiple Custom Post Types adjust like this
$query->set( 'post_type', array( 'post', 'custom1', 'page' ) && array( 'post', 'custom2', 'page' ) );
목록을 만드는 플러그인을 개발 중입니다. 목록을 만든 후 URL에서 슬러그를 제거하고 싶었습니다.
게시물 유형 :
URL에서 슬러그 제거 :
(이 코드는 여기 에서 가져온 것입니다. a>)
이제 게시를 누르면 슬러그/single-link/가 삭제되지만 페이지를 방문 할 때 항상 404가 표시됩니다. 영구 링크를 변경/재 저장해도 도움이되지 않았습니다. 내가 뭘 잘못하고 있니?