当前位置: 首页 > 知识库问答 >
问题:

如果分类法与当前类别匹配,则将文章显示为特色文章

刁璞
2023-03-14

我用过ACF。我已将“分类法”选择下拉字段添加到后期编辑页面。从下拉列表中,我选择了这篇文章应该出现在哪个类别中,但我的代码显示的是所有类别中的同一篇文章。

下面是类别中的代码。php文件。我需要它来显示最近的帖子,它已经被赋予了“类别中的功能”,因此,在我定义的类别中的功能。

我category.php的当前循环

<?php 

$category = get_field('feature_in_category');

// args
$args = array(
    'numberposts' => -1,
    'posts_per_page' => 1,
    'category__in' => $category,
    'orderby'=> 'modified'
);

// get results
$the_query = new WP_Query( $args );

// The Loop
?>
<?php if( $the_query->have_posts() ): ?>


<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
    <div class="small-6 columns">
        <div class="img-box-shadow">
            <a href="<?php the_permalink(); ?>">
                <?php echo the_post_thumbnail(); ?>
            </a>
        </div>
    </div>
    <div class="small-6 columns">
        <h3><a href="<?php the_permalink(); ?>"><?php echo the_title(); ?></a></h3>
        <p><?php echo the_excerpt(); ?></p>
    </div>


<?php endwhile; ?>

<?php else : echo '<p style="color:#fff;">no posts</p>'; ?>

<?php endif; ?>
<?php wp_reset_query();  // Restore global post data stomped by the_post(). ?>

Pastebin:http://pastebin.com/NR3UanAd

共有2个答案

魏旭
2023-03-14

在查看此处的文档之后http://codex.wordpress.org/Class_Reference/WP_Query您的代码似乎做了所有正确的事情。我相信您的答案取决于用于生成结果的实际查询字符串。通过执行以下操作,您应该能够在查询对象的属性中看到该查询字符串:

<?php 

$category = get_field('feature_in_category');

// args
$args = array(
    'numberposts' => -1,
    'posts_per_page' => 1,
    'category__in' => $category,
    'orderby'=> 'modified'
);

// get results
$the_query = new WP_Query( $args );
echo '<pre>'; print_r($the_query); die();

我建议在直接在数据库上看到查询字符串后,使用phpMyAdmin或Navicat之类的工具直接连接到数据库。您应该能够在那里调整查询以生成所需的结果,然后相应地调整参数。也可能是您的查询没有问题,问题在于类别功能。如果是这样的话,这种调试方法也应该揭示这一点。

更新:我认为你只需要使用“cat”而不是“category”。另外,确保在调用中使用为字段名设置的内容来获取_字段。此反馈基于以下示例:http://www.the-perfect-life.org/html-5-css-3-php-wordpress-jquery-javascript-photoshop-illustrator-tutorial/how-to-create-custom/wordpress-plugin-theme-codex-code-function/advanced-custom-fields-get-field-taxonomy-query-related-posts-by-tag-and-category/

$categoryValue = get_field('feature_in_category');
$args=array(
'cat' => $categoryValue,
'posts_per_page'=>1 // Number of related posts to display
);
$my_query = new wp_query( $args );
while( $my_query->have_posts() ) {
$my_query->the_post();
?>
<div>
<a href="<? the_permalink()?>">
<?php the_title(); ?>
</a>
</div>
wp_reset_query();
瞿子濯
2023-03-14

我对ACF不是很熟悉,还没有使用过。我看了一些留档等,这是我发现的:

ACF分类字段将在您的应用程序中返回NULL,因为传递给get\u字段的ID是类别ID,这是无效的post ID。是的,您可以将类别ID传递给get\u字段,但是,为了返回该自定义字段的值,必须为该特定类别指定一个自定义字段。

看看ACF文档

$field = get_field($field_name, $post_id, $format_value); 

◦$post_id:输入值的特定post id。默认为当前职位ID(非必需)。这也可以是选项/分类法/用户等

如前所述,我不熟悉ACF,但ACF字段数据的存储方式似乎与默认自定义字段存储数据的方式相同。所以你会有一对匹配的key=

“ACF分类法”下拉列表保存转换为类别的选定值。同样,我不确定它是否保存了名称、slug或ID,但从我能得到的信息来看,它保存了category ID,因此我将对此做出假设

所以,这里要做的第一件事是,获取当前查看的类别的ID。可以通过get_queried_object_id()检索

现在您有了当前的类别ID,您需要将其与特定的meta_key=feature_in_category的值相匹配,并返回具有此特定键=的帖子

假设ACF数据的存储方式与从自定义字段存储数据的存储方式相同(此代码需要PHP5.4,对于早期版本,请将[]更改为array()

$cat_id = get_queried_object_id(); // Assumption that category ID is saved by ACF

$args = [
    'posts_per_page' => 1,
    'orderby'        => 'modified',
    'meta_key'       => 'feature_in_category',
    'meta_value_num' => $cat_id, // Assumption that category ID is saved by ACF
];
$q = new WP_Query( $args );

if( $q->have_posts() ) {
    while( $q->have_posts() ) {
        $q->the_post();

        // YOUR TEMPLATE TAGS AND MARKUP

    }
    wp_reset_postdata();
}

如果类别ID未由ACF字段保存,并且它保存了名称或slug,则可以按如下方式更改代码

$category = get_queried_object()->name; // For category name

$category = get_queried_object()->slug; // For category slug

然后在查询参数中,更改

'meta_value_num' => $cat_id, // Assumption that category ID is saved by ACF

'meta_value' => $category, 

编辑

除此之外,作为评论发布,OP使用的查询结果有效。

$cat_id = get_queried_object_id();
$args = [
        'posts_per_page' => 1,
        'orderby'        => 'modified',
        'meta_query' => [
                [                        
                        'key' => 'feature_in_category',
                        'value' => $cat_id,
                        'compare' => 'IN'
                ]
        ]
];

 类似资料:
  • 我有一张分类表 我有文章表如下 和我的用户表作为 因此与这些数据我想显示所有的文章这是列在子类别 例如: 主要类别的url是:mydomain。子类别的com/cat/business url为:mydomian。com/cat/商业/广告 因此,当人们访问主类别时,它应该显示主类别上列出的文章的子类别,即使cat_id未被提及为主类别。我想在“业务类别”页面上列出业务子类别文章的所有子类别。 有

  • 我试图在侧边栏中显示当前页面的类别和子类别。标题应该是当前类别的名称,并链接到当前类别。我正在努力实现的一个例子可以在侧边栏中看到:https://food52.com/shop/pantry 以下是我当前的网站示例:https://farmtofrank.wpengine.com/product-category/prepared-foods/ 这是我迄今为止创建的代码: 它可以工作,但会将父链

  • 在WordPress主题版上,我有一个归档页面,页面顶部有一篇特色文章,上面显示了特色图片、发布日期和摘录,下面还有其他文章。 遇到了这样一个问题:文章的标题正确,图片正确,但摘录不正确。相反,它引入了不同帖子的文本。 下面的代码有什么不正确的线索吗?

  • 如何让在其输出中的匹配行之前显示文件名?

  • 我正在工作的wordpress与我自己的主题: 我有一个叫做展览的页面,在这个页面上我有两个类别:“当前”和“预览”。 当我发布一篇文章时,我想选择一个类别来显示文章的标题(永久链接)。类别不是按钮,它们只是不同帖子所属的“标题”。 我制作了一个名为“展览”的模板文件。php(见下面的代码),它应用于我在Wordpress中的展示页面。我不知道如何调用函数来显示类别名称,然后将类别属性化为我的帖子

  • 我创建了一个自定义博客页面,可以在其中列出所有帖子。我有一个名为news的分类法帖子类型,我想在同一页面上显示该分类法下可用的帖子,并将其与普通帖子混合显示。 这是我用来显示帖子的while循环: while($wp_)查询- “title=”Read More“style=”颜色:白色;字体系列:“Roboto Condensed”,Arial,无衬线;左边距:5px;字体大小:粗体“ 那么,有