类别导致404行为问题的粘滞帖子的功能

时间:2019-03-13 作者:Kenny Lajara

我想知道分类页面上的帖子有多粘,我在我的function.php 文件以进行管理。

贴子显示在分类页面上,一切正常。

但由于某种原因,使用此代码,当我访问一个预期显示404错误消息的页面时,它会显示博客页面。

Example:

如果我访问example.com/fake-page 它显示的内容与我在example.com/blog

我注意到一件奇怪的事是如果我example.com/real-category/fake-postexample.com/fake-category/post正如预期的那样,它正确地显示了404页。

我的permalink配置为/%category%/%postname%.

Here is my code:

function get_term_sticky_posts()
{ 
    // First check if we are on a category page, if not, return false
    if ( !is_category() )
        return false;

    // Secondly, check if we have stickies, return false on failure
    $stickies = get_option( \'sticky_posts\' );

    if ( !$stickies )
        return false;

    // OK, we have stickies and we are on a category page, continue to execute. Get current object (category) ID
    $current_object = get_queried_object_id();

    // Create the query to get category specific stickies, just get post ID\'s though
    $args = [
        \'nopaging\' => true,
        \'post__in\' => $stickies,
        \'cat\' => $current_object,
        \'ignore_sticky_posts\' => 1,
        \'fields\' => \'ids\'
    ];
    $q = get_posts( $args );

    return $q;
}

add_action( \'pre_get_posts\', function ( $q )
{
    if (    !is_admin() // IMPORTANT, make sure to target front end only
         && $q->is_main_query() // IMPORTANT, make sure we only target the main query
         && $q->is_category() // Only target category archives
    ) {
        // Check if our function to get term related stickies exists to avoid fatal errors
        if ( function_exists( \'get_term_sticky_posts\' ) ) {
            // check if we have stickies
            $stickies = get_term_sticky_posts();

            if ( $stickies ) {
                // Remove stickies from the main query to avoid duplicates
                $q->set( \'post__not_in\', $stickies );

                // Check that we add stickies on the first page only, remove this check if you need stickies on all paged pages
                if ( !$q->is_paged() ) {

                    // Add stickies via the the_posts filter
                    add_filter( \'the_posts\', function ( $posts ) use ( $stickies )
                    {   
                        $term_stickies = get_posts( [\'post__in\' => $stickies, \'nopaging\' => true] );

                        $posts = array_merge( $term_stickies, $posts );

                        return $posts;
                    }, 10, 1 );
                }
            }
        }
    }
});
我需要找到一些修复,以显示404时,该页面不存在。

1 个回复
SO网友:Kenny Lajara

解决方案是替换:

if (    !is_admin() // IMPORTANT, make sure to target front end only
     && $q->is_main_query() // IMPORTANT, make sure we only target the main query
     && $q->is_category() // Only target category archives
) {
适用于:

if (    !is_admin() // IMPORTANT, make sure to target front end only
     && $q->is_main_query() // IMPORTANT, make sure we only target the main query
     && $q->is_category() // Only target category archives         
     && $q->is_tax(get_query_var ( \'category_name\')) // Only target existing category names 
){

相关推荐

functions php file

好的,我正在编辑我的函数。Wordpress中的php文件(关于我的子主题),我删除了一行代码(在删除之前我复制了代码)。这导致了白色的死亡屏幕,所以我简单地粘贴回我删除的代码(是的,我将它粘贴回我删除它的位置),但我仍然有白色的死亡屏幕。我已经完成了这些功能。我上周完成的一个备份中的php文件(功能齐全),并通过FTP将其上载到正确的文件夹,但没有任何效果。我已经尝试再次激活父主题,并创建了另一个子主题,以便比较这两个功能。php文件(将全新的、有效的子主题与不再工作的原始子主题进行比较),代码看起来是