当值为序列化数组时,如何按高级自定义字段查询发布?

时间:2015-07-21 作者:Matt Campbell

Bottom for resolution我想我快疯了。我一辈子都搞不懂这件事。我有一个高级自定义字段,它是一个选择框。选择框有多个值,允许进行多个选择。我在这个下拉列表中发表了1篇文章,并选择了3个值。

我现在需要能够显示所有具有其中一个值的帖子。所以我创建了一个新页面,并开始在谷歌上搜索代码来实现这一点,我尝试了很多方法,但似乎都没有奏效。现在,如果我将此ACF更改为单选,我可以做得很好。但由于它是这个多选序列化数组,所以我无法理解其语法。

目前,我的带有以下代码的页面返回了许多帖子标题,包括我想要的,但也包括一些我不想要的。

关键词:使用高级自定义字段(数组)创建页面以查询帖子,查询acf字段数组

acf meta_key = author_link
meta_value in db = a:3:{i:0;s:12:"Triz-Journal";i:1;s:18:"Matt Campbelll III";i:2;s:8:"Garfield";}
我应该能够返回我的1篇文章的标题,其中包含这3个值中的1个。我永远不会搜索超过1个值。

这是我目前正在使用的代码,但我也尝试了许多其他代码

// args
$args = array(
\'numberposts\'   => -1,
\'post_type\'     => \'post\',
\'meta_query\'    => array(
    array(
        \'key\'       => \'author_link\',
        \'value\'     => $authorname,
    )
)
);


// query
$the_query = new WP_Query( $args );
var_dump($the_query->request);
?>

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

<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
    <p>
        <a href="<?php the_permalink(); ?>">

            <?php the_title(); ?>
        </a>
    </p>
<?php endwhile; ?>

<?php endif; ?>

<?php wp_reset_query();  // Restore global post data stomped by the_post(). ?>
VAR\\u转储查询结果

string(408) "SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts
INNER JOIN wp_postmeta   ON ( wp_posts.ID = wp_postmeta.post_id ) 
WHERE 1=1 AND 
( ( wp_postmeta.meta_key = \'author_link\' AND 
CAST(wp_postmeta.meta_value AS CHAR) = \'Garfield\' ) ) AND 
wp_posts.post_type = \'post\' AND (wp_posts.post_status = \'publish\' OR 
wp_posts.post_status = \'private\') 
GROUP BY wp_posts.ID 
ORDER BY wp_posts.post_date DESC 
LIMIT 0, 20"
目前,查询返回了许多帖子标题,但并不是唯一一篇实际包含acf值“Garfield”的帖子。

有人能进一步帮助吗?

RESOLUTION----------不管出于什么原因,这个查询会撤回多篇帖子,包括我需要的帖子。多亏了那些回应的人,我才明白了这一点。在查询循环中,我使用get字段测试循环中每个帖子的数组。然后,我只回显标题,如果它有一个匹配我需要的元值(从URL获取)。

page-authors.php

//Get authorname from URL
<?php
if (isset($_GET[\'authorname\'])) {
 $authorname = $_GET[\'authorname\'];
} else {
 $authorname = \'none\';
}
?>

// meta query my acf field name called author_link 
// which is a multi value array not a single text value. 
// query it for the value from the url
$args = array(
\'numberposts\'   => -1,
\'post_type\'     => \'post\',
\'meta_query\'    => array(
    array(
        \'key\'       => \'author_link\',
        \'value\'     => \'"\' . $authorname . \'"\',
        \'compare\'   => \'LIKE\',
    )
)
);


// query
$the_query = new WP_Query( $args );
?>

// loop through the query results and test 
// them further for the meta value matching  what came from the url.
// then echo the title   if it matches
<?php if( $the_query->have_posts() ): ?>
<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
    <p>
        <a href="<?php the_permalink(); ?>">
            <?php if( in_array( $authorname, get_field(\'author_link\') ) )
                {
                 echo the_title();
                } ?>    
        </a>
    </p>
<?php endwhile; ?>

<?php endif; ?>

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

1 个回复
SO网友:jdm2112

我建议为此使用内置ACF功能。Elliot为您提供了完整的工具箱和所有字段类型的文档:

<?php

// Conditional statement (Single Value)   
if(get_field(\'page_layout\') == "col_1")
{
    //...
}


//Conditional statement (Multiple Values)
if( in_array( \'col_1\', get_field(\'page_layout\') ) )
{
    //...
}
?>
查看ACF文档:http://www.advancedcustomfields.com/resources/select/

结束

相关推荐

meaning of (array)function()

我看到了这段代码,其中包含了我以前从未见过的部分代码。在此场景中,(数组)的行为是什么?到目前为止,我知道用php创建数组的方法,但从未见过这种情况。// $this->settings = array_merge( $this->settings_defaults(), (array) get_option( $this->settings_slug, $this->settings_defaults() ) ); // &#x

当值为序列化数组时,如何按高级自定义字段查询发布? - 小码农CODE - 行之有效找到问题解决它

当值为序列化数组时,如何按高级自定义字段查询发布?

时间:2015-07-21 作者:Matt Campbell

Bottom for resolution我想我快疯了。我一辈子都搞不懂这件事。我有一个高级自定义字段,它是一个选择框。选择框有多个值,允许进行多个选择。我在这个下拉列表中发表了1篇文章,并选择了3个值。

我现在需要能够显示所有具有其中一个值的帖子。所以我创建了一个新页面,并开始在谷歌上搜索代码来实现这一点,我尝试了很多方法,但似乎都没有奏效。现在,如果我将此ACF更改为单选,我可以做得很好。但由于它是这个多选序列化数组,所以我无法理解其语法。

目前,我的带有以下代码的页面返回了许多帖子标题,包括我想要的,但也包括一些我不想要的。

关键词:使用高级自定义字段(数组)创建页面以查询帖子,查询acf字段数组

acf meta_key = author_link
meta_value in db = a:3:{i:0;s:12:"Triz-Journal";i:1;s:18:"Matt Campbelll III";i:2;s:8:"Garfield";}
我应该能够返回我的1篇文章的标题,其中包含这3个值中的1个。我永远不会搜索超过1个值。

这是我目前正在使用的代码,但我也尝试了许多其他代码

// args
$args = array(
\'numberposts\'   => -1,
\'post_type\'     => \'post\',
\'meta_query\'    => array(
    array(
        \'key\'       => \'author_link\',
        \'value\'     => $authorname,
    )
)
);


// query
$the_query = new WP_Query( $args );
var_dump($the_query->request);
?>

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

<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
    <p>
        <a href="<?php the_permalink(); ?>">

            <?php the_title(); ?>
        </a>
    </p>
<?php endwhile; ?>

<?php endif; ?>

<?php wp_reset_query();  // Restore global post data stomped by the_post(). ?>
VAR\\u转储查询结果

string(408) "SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts
INNER JOIN wp_postmeta   ON ( wp_posts.ID = wp_postmeta.post_id ) 
WHERE 1=1 AND 
( ( wp_postmeta.meta_key = \'author_link\' AND 
CAST(wp_postmeta.meta_value AS CHAR) = \'Garfield\' ) ) AND 
wp_posts.post_type = \'post\' AND (wp_posts.post_status = \'publish\' OR 
wp_posts.post_status = \'private\') 
GROUP BY wp_posts.ID 
ORDER BY wp_posts.post_date DESC 
LIMIT 0, 20"
目前,查询返回了许多帖子标题,但并不是唯一一篇实际包含acf值“Garfield”的帖子。

有人能进一步帮助吗?

RESOLUTION----------不管出于什么原因,这个查询会撤回多篇帖子,包括我需要的帖子。多亏了那些回应的人,我才明白了这一点。在查询循环中,我使用get字段测试循环中每个帖子的数组。然后,我只回显标题,如果它有一个匹配我需要的元值(从URL获取)。

page-authors.php

//Get authorname from URL
<?php
if (isset($_GET[\'authorname\'])) {
 $authorname = $_GET[\'authorname\'];
} else {
 $authorname = \'none\';
}
?>

// meta query my acf field name called author_link 
// which is a multi value array not a single text value. 
// query it for the value from the url
$args = array(
\'numberposts\'   => -1,
\'post_type\'     => \'post\',
\'meta_query\'    => array(
    array(
        \'key\'       => \'author_link\',
        \'value\'     => \'"\' . $authorname . \'"\',
        \'compare\'   => \'LIKE\',
    )
)
);


// query
$the_query = new WP_Query( $args );
?>

// loop through the query results and test 
// them further for the meta value matching  what came from the url.
// then echo the title   if it matches
<?php if( $the_query->have_posts() ): ?>
<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
    <p>
        <a href="<?php the_permalink(); ?>">
            <?php if( in_array( $authorname, get_field(\'author_link\') ) )
                {
                 echo the_title();
                } ?>    
        </a>
    </p>
<?php endwhile; ?>

<?php endif; ?>

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

1 个回复
SO网友:jdm2112

我建议为此使用内置ACF功能。Elliot为您提供了完整的工具箱和所有字段类型的文档:

<?php

// Conditional statement (Single Value)   
if(get_field(\'page_layout\') == "col_1")
{
    //...
}


//Conditional statement (Multiple Values)
if( in_array( \'col_1\', get_field(\'page_layout\') ) )
{
    //...
}
?>
查看ACF文档:http://www.advancedcustomfields.com/resources/select/

相关推荐

警告:CALL_USER_FUNC_ARRAY()要求参数1是有效的回调

我创建了一个新的wordpress,没有主题,只有一个插件:GDPR WP。(我想先在空wordpress上试用这个插件,然后再将它部署到其他网站上)。所以,我第一次尝试创建函数来接受或不接受GoogleAnalytics cookie。我的函数工作正常,但在BO/FO上有一个错误:Warning: call_user_func_array() expects parameter 1 to be a valid callback, function \'cookie_GA\' not found or i